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

    自定义方法

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

    无论如何,心平气和

  • 相关阅读:
    LVGL初步移植
    为什么javac后加.java,java后不加.class?
    为什么内部类可以访问外部类的私有属性?
    Optional类与使用==判断null有什么区别?使用Optional类有什么优势?
    注释中的Unicode编码也会被转义
    用反射编写泛型数组
    JDBC与JPA--初学JPA
    抽象类与接口
    面向对象——多态
    面向对象——封装(隐藏)
  • 原文地址:https://www.cnblogs.com/cfb513142804/p/7234397.html
Copyright © 2011-2022 走看看