SpringDataJpa

SpringDataJpa

  • 1、SpringDataJpa概念
  • 2、JpaRepository 接口
  • 3、JpaSpecificationExecutor(用的少,他的扩展用的多)
  • 4、jpa-spec插件(常用)

1、SpringDataJpa概念

    SpringDataJpa相当于对jpa的再次封装,使开发效率更高

2、JpaRepository 接口

(1) JpaRepository 是 SpringDataJpa里的一个接口
	 dao层继承JpaRepository 接口,里面把基本的crud和分页已经排序都写好了:

		/*
		参数1:crud需要操作的实体类
		参数2:主键类型
		*/
		public interface EmployeeRepository extends JpaRepository{
		//注意:基本的增删改查可以通过注入的Repository(dao层)直接调用,框架里面已经封装好了
		保存/修改方法:save()  //有id就是修改,没有就是保存
		删除:delete
		查询全部:findAll
		查询单个:findOne
		}
		
		
(2)@Quyer注解
		 Repository接口里面自定义查询语句(方法):
		
		①/*通过字段查询   findby必须要这样写(不用)
		类型 findBy字段名();*/
		
		②自定义方法,jpql语句
		样例:
					@Query("jpql语句")
					List queryAll();  //自定义方法
		
		③原生sql语句
		@Query(nativeQuery = true,value = "sql语句")
			List query04();

3、JpaSpecificationExecutor(用的少,他的扩展用的多)

3.1、概念:
Jpa规则执行者,SpringDataJpa提供的接口,主要用来做查询的操做,让jpa以面向对象的形式操做,实现不写sql语句

3.2 、使用

(1) Repository层继承这个接口(一般配合JpaRepository)使用

//里面的参数:需要操作的是哪个实体类
public interface EmployeeRepository extends JpaRepository,JpaSpecificationExecutor {

}


(2) 分页+排序+高级查询
Sort sort = new Sort(Sort.Direction.DESC,"age");
	//参数1:第几页。 参数2:每页多少条数据
	Pageable pageable = new PageRequest(0,10,sort);

	//使用匿名类部类使用自定义查询规则。这个方法最终的到分页的数据
 	Page page = employeeRepository.findAll(new Specification() {
    	/*
     	*   root:可以得到需要操做的字段
CriteriaBuilder :得到需要将字段进行什么条件(模糊/大小于/不等于)的查询
     	*/
    	@Override
    	public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder cb) {
        	Path username = root.get("username");
        	Path age = root.get("age");
        	//根据字段进行模糊查询
        	Predicate p1 = cb.like(username, "%1%");
        	//年龄要大于30岁的
        	Predicate p2 = cb.gt(age, 30);
        	//多个条件进行拼接,用and/or
        	Predicate predicate = cb.and(p1, p2);
        	return predicate;
    	}
	}, pageable);

4、jpa-spec插件(常用)

4.1、概念:
相当于将上面的JpaSpecificationExecutor在他的基础上进行了扩展

官网地址:https://github.com/wenhao/jpa-spec

4.2、使用

 1.导包


  com.github.wenhao
  jpa-spec
  3.1.1
  
  
    
      *
      *
    
  



2、根据查询全部的方法,里面使用
   //规定就是这样写
Specification specification = Specifications.and()
        //判断是否为空,或者是空字符串。如果有值,那么就执行后面的括号里面的代码
		//StringUtils:导lang3/lang包下面的
        .like(StringUtils.isNoneBlank(username),"需要进行模糊查询的字段名", "%模糊查询的值%")
        .gt(age!=null,"age", age)
        .build();  //结尾也是规则这样写

      //查询的规则的到查询出来的数据
List list =employeeRepository.findAll(specification);

你可能感兴趣的:(SpringDataJpa)