Jpa条件查询组合查询and和or同时用

深藏阁楼爱情的钟 2022-10-16 15:20 472阅读 0赞
  1. Pageable pageable = PageRequest.of(request.getPage(), request.getPageSize(), Sort.by(Sort.Direction.DESC, "id"));
  2. Page<Produce> producePage = produceRepo.findAll(
  3. new Specification() {
  4. @Override
  5. public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
  6. //WHERE del_flag=0 AND status=1 AND ((title like "%keyword%") OR (content like "%keyword%") OR (music_title like "%keyword%"))
  7. List<Predicate> pListAnd = new ArrayList<Predicate>();
  8. // 删除标记:0-正常1-删除
  9. pListAnd.add(cb.equal(root.get("delFlag"), DelFlag.NORMAL));
  10. // 状态: 0-禁用 1-启用
  11. pListAnd.add(cb.equal(root.get("status"), Status.OPEN));
  12. Predicate[] psAnd = new Predicate[pListAnd.size()];
  13. Predicate preAnd = cb.and(pListAnd.toArray(psAnd));
  14. List<Predicate> pListOr = new ArrayList<Predicate>();
  15. //标题
  16. if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
  17. pListOr.add(cb.like(root.get("title").as(String.class), "%" + request.getKeyword() + "%"));
  18. }
  19. //内容
  20. if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
  21. pListOr.add(cb.like(root.get("content").as(String.class), "%" + request.getKeyword() + "%"));
  22. }
  23. //音乐标题
  24. if (request.getKeyword() != null && !"".equals(request.getKeyword())) {
  25. pListOr.add(cb.like(root.get("musicTitle").as(String.class), "%" + request.getKeyword() + "%"));
  26. }
  27. Predicate[] psOr = new Predicate[pListOr.size()];
  28. if (pListOr.size() > 0) {
  29. Predicate preOr = cb.or(pListOr.toArray(psOr));
  30. query.where(preAnd, preOr).getRestriction();
  31. } else {
  32. query.where(preAnd).getRestriction();
  33. }
  34. return null;
  35. }
  36. }, pageable);

注意:JPA分页索引从0开始,Mybatis-Plus分页索引从1开始。

发表评论

表情:
评论列表 (有 0 条评论,472人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mybatis andor组合查询

    在mybatis中涉及到和、或者的查询需要注意,一招不慎,会导致查询出来的结果不准确。 究其原因,是and优先级高于or。凡是查询中涉及到or,需要将or 条件和与之并肩查询

    相关 JPA条件查询

    1 需求    1  使用JPA进行查询,并且不分页     2  查询条件是 A = 1  并且 B=2   2  怎么做    1 在接口中新一个方法,   

    相关 jpa specification条件查询

    1. 1. [spring][] data jpa 通过创建方法名来做查询,只能做简单的查询,那如果我们要做复杂一些的查询呢,多条件分页怎么办,这里,spring data