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
@Datapublic class QueryCriteria {// 等于@Queryprivate String a;// 左模糊@Query(type = Query.Type.LEFT_LIKE)private String b;// 右模糊@Query(type = Query.Type.RIGHT_LIKE)private String c;// 大于等于@Query(type = Query.Type.GREATER_THAN, propName = "createTime")private Timestamp startTime;// 小于等于@Query(type = Query.Type.LESS_THAN, propName = "createTime")private Timestamp endTime;// BETWEEN@Query(type = Query.Type.BETWEEN)private List<Timestamp> startTime;// 多字段模糊查询,blurry 为字段名称@Query(blurry = "a,b,c")private String blurry;// IN 查询@Query(type = Query.Type.IN)private List<String> d;// 左关联查询,left Join , joinName为关联实体名称 , propName为关联实体 字段@Query(joinName = "", propName="")private String e;// 右关联查询,right Join , joinName为关联实体名称 , propName为关联实体 字段@Query(joinName = "", propName="", join = Query.Join.RIGHT)private String f;// NOT_EQUAL 不等于@Query(type = Query.Type.NOT_EQUAL)private String g;// NOT_NULL 不为空@Query(type = Query.Type.NOT_NULL)private String g;}
2、在控制器中使用
// Pageable 分页查询public ResponseEntity query(QueryCriteria criteria, Pageable pageable){return new ResponseEntity(service.queryAll(criteria,pageable), HttpStatus.OK);}
3、Service 中查询
@Overridepublic Object queryAll(QueryCriteria criteria, Pageable pageable){Page<实体> page = repository.findAll(((root, criteriaQuery, cb) -> QueryHelp.getPredicate(root, criteria, cb)),pageable);return page;}
::: tip
如果需要添加一个字段查询,只需要在查询类 QueryCriteria 中添加就可以了,可节省大量时间。
源码可以查看 eladmin-common 模块中的 me.zhengjie.annotation.Query 与 me.zhengjie.utils.QueryHelp
:::
