• 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类。

    自定义方法

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

    无论如何,心平气和

  • 相关阅读:
    属性选择器
    优先级
    hj_html&css
    hj_解决gpedit.msc不存在的问题
    hj_designPatterns
    hj_ssm
    hj-springmvc
    hj_mybatis
    hj_Python踩坑之旅
    hj_Python学习笔记
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7234397.html
Copyright © 2020-2023  润新知