spring-data-jpa(分页、排序、分组)

上一篇:单表增删改查
插入七条数据
在这里插入图片描述

服务实现层
sql:每页两条数据,第一页,按name倒序排序

    @Override
    public Page findBySpecification() {
        Specification specification = new Specification() {
            @SneakyThrows
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
                Predicate condition = null;
                return condition;
            }
        };
        Sort sort = Sort.by(Sort.Direction.DESC, "name");
        Pageable pageable = PageRequest.of(0, 2, sort);
        return customerDao.findAll(specification, pageable);
    }

Controller层

@Transactional
    @Rollback(value = false)
    @RequestMapping("queryBySpecification")
    Page queryBySpecification() {
        return customerImpl.findBySpecification();
    }

浏览器查找
http://localhost:8080/customer/queryBySpecification
结果
在这里插入图片描述
分组
目标sql

select * from customer where custId =? and name like? and address like ? group by age order by name desc limit 0,4

服务实现层

 public Page customerGroup(Long id,String name,String address) {
        Specification specification = new Specification() {
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predList = new LinkedList<>();
                if (id != null) {
                    predList.add(criteriaBuilder.equal(root.get("custId").as(Integer.class), id));
                }
                if (name != null) {
                    predList.add(criteriaBuilder.like(root.get("name").as(String.class), "%" + name + "%"));
                }
                if (address != null) {
                    predList.add(criteriaBuilder.like(root.get("address").as(String.class), "%" + address + "%"));
                }
                Predicate[] predArray = new Predicate[predList.size()];

                predList.toArray(predArray);
                query.where(predArray);
                query.groupBy(root.get("age"));
                
                return query.getRestriction();
            }
        };
        Sort sort = Sort.by(Sort.Direction.DESC, "name");
        Pageable pageable = PageRequest.of(0, 4, sort);
        return customerDao.findAll(specification, pageable);
    }

控制层

 @Transactional
    @Rollback(value = false)
    @RequestMapping("customerGroup")
    List customerGroup() {
        return customerImpl.customerGroup();
    }

http://localhost:8080/customer/customerGroup?address=wei&name=s
结果
在这里插入图片描述

下一章:多表增删改查——一对多


版权声明:本文为qq_23355059原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。