zoukankan      html  css  js  c++  java
  • SpringData学习04

    滴水穿石

    之前的 Repository 的分页不支持传参,怎么破? ...实现 JpaSpecificationExecutor<T> 接口

     service 层

      /**
         * Specification<T> : 封装了 JPA Criteria 查询的查询条件
         * Pageable : 封装了请求分页的信息
         * */
        public Page<Person> findByJpaSpecificationExecutor(Specification<Person> spec,Pageable pageable){
            return pRepository.findAll(spec, pageable);
        }

    单元测试

    /**
         * 实现带查询条件的分页
         * */
        @Test
        public void testJpaSpecificationExecutor(){
            int page = 3 - 1;
            int size = 5;
            PageRequest pageable = new PageRequest(page, size);
            
            Specification<Person> spec = new Specification<Person>() {
                /**
                 * *root : 代表查询的实体类
                 * query : 从中可得到Root对象,即告知JPA Criteria 查询要查询哪一个实体类
                 *             还可以用来添加查询条件,
                 *             还可以结合EntityManager 对象得到最终查询的 TypedQuery 对象
                 * *cb : CriteriaBuilder对象,用于创建 Criteria相关对象的工厂,当然可以从中获取Predicate对象
                 * *Predicate : 代表一个查询条件
                 * */
                @Override
                public Predicate toPredicate(Root<Person> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                    Path path = root.get("id");
                    Predicate predicate = cb.gt(path, 5);
                    return predicate;
                }
                
            };
            
            Page<Person> plist = pService.findByJpaSpecificationExecutor(spec, pageable);
            
            System.out.println("总条数: " + plist.getTotalElements());
            System.out.println("总页数: " + plist.getTotalPages());
            System.out.println("当前页数: " + (plist.getNumber()+1));
            System.out.println("当前页面记录数: " + plist.getNumberOfElements());
            System.out.println("当前页面List: " + plist.getContent());
        }
        

    测试结果

    当前页数 为  21 , "xxx" + 2 + 1 ; 不能忽略呀 要写成 “xxxx” + (2+1) 哦

    这个方式工作中肯定是不科学的,需要构建一个通用的Base类。

    自定义方法

    —————————————————————————————————————————————————————————————————————————

    无论如何,心平气和

  • 相关阅读:
    CVPR-2021-Papers
    caffe中使用多个GPU的方法
    大道至简!深度解读CVPR2021论文RepVGG
    195上的rknn
    RKNN1.6下载路径
    基于深度学习的2D和3D仿射变换配准
    涵盖18+ SOTA GAN实现,开源工程StudioGAN火了
    基于opencv实战眼睛控制鼠标
    S7-200SMART PLC与变频器MODBUS RTU通讯与SMART LINE系列屏控制(案例三)
    Java异常处理学习
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7234397.html
Copyright © 2011-2022 走看看