码迷,mamicode.com
首页 > 编程语言 > 详细

Hibernate 同时使用分页、排序、筛选

时间:2018-05-16 15:32:18      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:没有   EDA   example   tor   cat   复杂   简单   help   代码   

在没有复杂查询的时候使用 Example 即可实现,在接口上需继承 JpaRepository<User, Integer>

// 筛选
User user = new User();
user.setCity(city);
Example<User> userExample = Example.of(user);

// 排序
Sort sort = new Sort(Sort.Direction.DESC, "createdAt");
// 分页
Pageable pageable = PageRequest.of(currentPage - 1, size, sort);
// 取得数据
Page<User> pageHelper = userRepository.findAll(example, pageable);

如果有 where in 等复杂查询时,Example 无法实现相关功能,只能用 Specification 实现,在接口上还需继承 JpaSpecificationExecutor<User>

Specification<User> specification = (Specification<User>) (root, criteriaQuery, criteriaBuilder) -> {
    List<Predicate> list = new ArrayList<>();
    if (city != null) {
        list.add(root.get("city").as(Integer.class).in((Object[]) city.split(","))); // where in
        // list.add(criteriaBuilder.equal(root.get("city").as(Integer.class), city)); // 精确查找
    }
    Predicate[] predicates = new Predicate[list.size()];
    criteriaQuery.where(criteriaBuilder.and(list.toArray(predicates)));
    return criteriaQuery.getRestriction();
};

// 省略部分代码
List<User> list = userRepository.findAll(specification, pageable);

这里使用了 Lambda 表达式,这篇只简单介绍了一下相关功能的实现,更多请自行探索。

Hibernate 同时使用分页、排序、筛选

标签:没有   EDA   example   tor   cat   复杂   简单   help   代码   

原文地址:https://www.cnblogs.com/StarUDream/p/9045552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!