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());
    }

结果

在这里插入图片描述
使用这个接口的最重要的就是这一段:
在这里插入图片描述


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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值