SpringDataJPA的JpaSpecificationExecutor接口详解

JpaSpecificationExecutor接口是SpringDataJAP中的一个接口:
与其他的接口有点不一样,这个接口也包含了许多查询的条件,可以和JpaRepository,PagingAndSortingRepository接口一起使用
JpaRepository接口详解:接口详解

声明接口:

 //条件查询
    @Test
    public void TestQuery(){
        //DESC:降序排列  ASC:升序排列
        Sort.Order order=new Sort.Order(Sort.Direction.DESC,"id");
        Sort sort=new Sort(order);
        //从0开始,显示的条数是5条   index是从0开始的 而不是从1开始
        Pageable pageable=new PageRequest(0,5,sort);
        /**
         * root:需要查询的类型(employee)
         * query:添加查询条件
         * cb:构建Predicate
         * */
        Specification<Employee> specification=new Specification<Employee>() {
            @Override
            public Predicate toPredicate(Root<Employee> root,
                                         CriteriaQuery<?> query,
                                         CriteriaBuilder cb) {
                //Path:拿到employee中的age
                Path path=root.get("id");
                //年龄大于50的  gt:大于
                return  cb.gt(path,5);
            }
        };
        Page<Employee> page = employeeJpaSpecificationExecutor.findAll(specification,pageable);
        System.out.println("查询的总页数: "+page.getTotalPages());
        System.out.println("查询的总记录数: "+page.getTotalElements());
        //这个是显示的是第几页 如是第一页的会显示的是第0页,一般来说是从第一页开始的所以+1
        System.out.println("查询的当前第几页: "+(page.getNumber()+1));
        System.out.println("查询的当前页面的集合: "+page.getContent());
        System.out.println("查询的当前页面的记录数: "+page.getNumberOfElements());
    }

结果

SpringDataJPA的JpaSpecificationExecutor接口详解_第1张图片
使用这个接口的最重要的就是这一段:
SpringDataJPA的JpaSpecificationExecutor接口详解_第2张图片


SpringDataJPA的JpaSpecificationExecutor接口详解_第3张图片
先前使用PagingAndSortingRepository接口中有个方法也是findAll,用此方法返回的也是page
JpaSpecificationExecutor接口的中findAll方法
PagingAndSortingRepository接口中的findAll方法:
SpringDataJPA的JpaSpecificationExecutor接口详解_第4张图片
所以只需要findAll方法中添加一个specification就行,两个findAll方法都返回的是page,就实现了分页排序和条件查询,这也是在开发中所常用的一个接口,因此我也记录下来;
再说明一下,我先前的接口是继承JpaSpecificationExecutor和JpaRepository接口,怎么就说到PagingAndSortingRepository接口中去了呢?因为JpaRepository接口也是继承PagingAndSortingRepository接口的,因此PagingAndSortingRepository接口中的方法JpaRepository也是能用的,以下是JpaRepository接口的底层代码在这里插入图片描述

格言:不驰于空想,不骛于虚声

你可能感兴趣的:(SpringDataJPA的JpaSpecificationExecutor接口详解)