Spring Boot jpa Service层实现代码
package com.fei.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import com.fei.NotFoundException;
import com.fei.po.Blog;
import com.fei.po.Type;
import com.fei.repository.BlogRepository;
import com.fei.service.BlogService;
/**
* Created by zxf on 2019年10月3日
*/
@Service
public class BlogServiceImpl implements BlogService {
@Autowired
private BlogRepository blogRepository;
/**
* 根据id查询一条博客
*
* @param id
* @return
*/
@Override
public Blog getBlog(Long id) {
return blogRepository.findById(id).get();
}
/**
* 多条件动态查询博客列表
*
* @param pageable
* @param blog
* @return
*/
@Override
public Page<Blog> listBlog(Pageable pageable, Blog blog) {
return blogRepository.findAll(new Specification<Blog>() {
@Override
public Predicate toPredicate(Root<Blog> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
String title = blog.getTitle();
if (!"".equals(title) && title != null) {
predicates.add(cb.like(root.<String>get("title"), "%" + title + "%"));
}
Long id = blog.getType().getId();
if (id != null) {
predicates.add(cb.equal(root.<Type>get("type").get("id"), id));
}
boolean isRecommend = blog.isRecommend();
if (isRecommend) {
predicates.add(cb.equal(root.<Boolean>get("recommend"), isRecommend));
}
cq.where(predicates.toArray(new Predicate[predicates.size()]));
return null;
}
}, pageable);
}
/**
* 保存一条博客
*
* @param blog
* @return
*/
@Override
public Blog saveBlog(Blog blog) {
return blogRepository.save(blog);
}
/**
* 更新一条博客,先根据id查出结果回显
*
* @param id
* @param blog
* @return
*/
@Override
public Blog updateBlog(Long id, Blog blog) {
Blog b = blogRepository.findById(id).get();
if (b == null) {
throw new NotFoundException("你要更新的博客不存在!");
}
BeanUtils.copyProperties(b, blog);
return blogRepository.save(blog);
}
/**
* 根据id删除一条博客
*
* @param id
*/
@Override
public void deleteBlog(Long id) {
blogRepository.deleteById(id);
}
}
Spring Boot jpa Service层实现代码的更多相关文章
- 从零一起学Spring Boot之LayIM项目长成记(四) Spring Boot JPA 深入了解
前言 本篇内容主要是一些关于JPA的常用的一些用法等.内容也是很多是看其他博客学来的,顺道在本系列博客里抽出一篇作为总结.下面让我们来看看吧. 不过我更推荐大家读本篇:https://lufficc. ...
- Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例
Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例 一.快速上手 1,配置文件 (1)pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 ...
- Spring Boot JPA 连接数据库
本文将介绍怎样在Spring Boot project中加入JPA作为持久化方式. 改动 pom.xml 依赖 与上一篇介绍的 jdbc 不同的是 spring-boot-starter-jdbc 改 ...
- Spring boot Jpa添加对象字段使用数据库默认值
Spring boot Jpa添加对象字段使用数据库默认值 jpa做持久层框架,项目中数据库字段有默认值和非空约束,这样在保存对象是必须保存一个完整的对象,但在开发中我们往往只是先保存部分特殊的字段其 ...
- Spring Boot(五):Spring Boot Jpa 的使用
在上篇文章Spring Boot(二):Web 综合开发中简单介绍了一下 Spring Boot Jpa 的基础性使用,这篇文章将更加全面的介绍 Spring Boot Jpa 常见用法以及注意事项. ...
- Spring Boot Jpa 的使用
Spring Boot Jpa 介绍 首先了解 Jpa 是什么? Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范.它为 Java 开发人员提供了一种 ...
- (转)Spring Boot(五):Spring Boot Jpa 的使用
http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...
- Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
(转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题 这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...
- Spring boot JPA 用自定义主键策略 生成自定义主键ID
最近学习Spring boot JPA 学习过程解决的一些问题写成随笔,大家一起成长.这次遇到自定义主键的问题 package javax.persistence; public enum Gener ...
随机推荐
- 十八、RF中selenium2library构造函数中参数解释
def __init__(self, timeout=5.0, implicit_wait=0.0, ...
- python - from … import …
from . import XXX 默认的就是在当前程序所在文件夹里__init__.py程序中导入XXX from .A import XXX 如果当前程序所在文件夹里没有 ...
- 如何将EDM数据分类工作做的更加真善美
众所周知,数据是互联网时代营销的决定性因素,数据的好坏关乎到营销能力的强弱,而细化到EDM行业中,数据细分变得极为重要,根据数据形态的不同,将会涉及到多种不同的细分方法,有效的利用这些方法,将会大大的 ...
- 系统分析与设计HW4
个人作业 用例建模 a. 阅读 Asg_RH 文档,绘制用例图. b. 选择你熟悉的定旅馆在线服务系统(或移动 APP),如绘制用例图.并满足以下要求: 对比 Asg_RH 用例图,请用色彩标注出创新 ...
- HTML学习之==>HTML标签
前端的三把利器: HTML:一个人 CSS:这个人的衣服 JS:这个人的行为 HTML(超文本标记语言) html代码实际上就是一套能够被浏览器所识别的规则代码,由一个个标签组成.html代码就是一大 ...
- MySQL5.6版本之后设置DATETIME类型自动更新
在使用MySQL中datetime格式自动更新特性时,我们应该明确一点,datetime格式设置默认值为当前时间和自动更新时间是从MySQL5.6版本之后开始支持的.此前我们都是使用timestamp ...
- android 程序的运行步骤(备忘)
java代码: public class HelloWorld { public static void main(String[] args) { System.out.println(" ...
- python里一个class可以定义多个构造函数
不行,一个class只能有一个用于构造对象的__init__函数但python中的变量是无类型的,因此传给__init__的参数可以是任何类型python中的函数参数在定义时可以有默认值,可以让__i ...
- centos7 主从dns配置 bind服务
一,配置前请先关闭防火墙selinux 防火墙关闭方法,参见上一篇文章. setenforce 0 #临时关闭 修改/etc/selinux/config 文件 将SELINUX=enforc ...
- Jmeter 接口测试 响应结果中文是Unicode转为中文
1.增加一个后置处理器:BeanShell PostProcessor 内容如下: //获取响应代码Unicode编码的 String s2=new String(prev.getRes ...