title: 通用查询 permalink: /pages/010203/ article: false

date: 2022-02-09 10:50:01

通用查询

本项目对 Jpa 的查询进行了封装,现可以通过 @Query 注解实现简单的查询与复杂查询

简单查询:等于(默认)、大于等于、小于等于、左模糊、右模糊、中模糊、多字段模糊、NOT_EQUAL 、BETWEEN 、NOT_NULL

复杂查询:包含(IN)查询、左连接、右连接等

参数说明

字段名称 字段描述 默认值
propName 对象的属性名,如果字段名称与实体字段一致,则可以省略 “”
type 查询方式,默认为 EQUAL
blurry 多字段模糊查询,值为实体字段名称 “”
joinName 关联实体的名称 “”
join 连接查询方式,左连接或者右连接 LEFT

使用方式

1、创建一个查询类 QueryCriteria

  1. @Data
  2. public class QueryCriteria {
  3. // 等于
  4. @Query
  5. private String a;
  6. // 左模糊
  7. @Query(type = Query.Type.LEFT_LIKE)
  8. private String b;
  9. // 右模糊
  10. @Query(type = Query.Type.RIGHT_LIKE)
  11. private String c;
  12. // 大于等于
  13. @Query(type = Query.Type.GREATER_THAN, propName = "createTime")
  14. private Timestamp startTime;
  15. // 小于等于
  16. @Query(type = Query.Type.LESS_THAN, propName = "createTime")
  17. private Timestamp endTime;
  18. // BETWEEN
  19. @Query(type = Query.Type.BETWEEN)
  20. private List<Timestamp> startTime;
  21. // 多字段模糊查询,blurry 为字段名称
  22. @Query(blurry = "a,b,c")
  23. private String blurry;
  24. // IN 查询
  25. @Query(type = Query.Type.IN)
  26. private List<String> d;
  27. // 左关联查询,left Join , joinName为关联实体名称 , propName为关联实体 字段
  28. @Query(joinName = "", propName="")
  29. private String e;
  30. // 右关联查询,right Join , joinName为关联实体名称 , propName为关联实体 字段
  31. @Query(joinName = "", propName="", join = Query.Join.RIGHT)
  32. private String f;
  33. // NOT_EQUAL 不等于
  34. @Query(type = Query.Type.NOT_EQUAL)
  35. private String g;
  36. // NOT_NULL 不为空
  37. @Query(type = Query.Type.NOT_NULL)
  38. private String g;
  39. }

2、在控制器中使用

  1. // Pageable 分页查询
  2. public ResponseEntity query(QueryCriteria criteria, Pageable pageable){
  3. return new ResponseEntity(service.queryAll(criteria,pageable), HttpStatus.OK);
  4. }

3、Service 中查询

  1. @Override
  2. public Object queryAll(QueryCriteria criteria, Pageable pageable){
  3. Page<实体> page = repository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)),pageable);
  4. return page;
  5. }

::: tip 如果需要添加一个字段查询,只需要在查询类 QueryCriteria 中添加就可以了,可节省大量时间。

源码可以查看 eladmin-common 模块中的 me.zhengjie.annotation.Queryme.zhengjie.utils.QueryHelp :::