通用查询
本项目对 Jpa 的查询进行了封装,现可以通过 @Query
注解实现简单的查询与复杂查询
简单查询:等于(默认)、大于等于、小于等于、左模糊、右模糊、中模糊、多字段模糊、NOT_EQUAL 、BETWEEN 、NOT_NULL
。
复杂查询:包含(IN)查询、左连接、右连接等
参数说明
字段名称 | 字段描述 | 默认值 |
---|---|---|
propName | 对象的属性名,如果字段名称与实体字段一致,则可以省略 | “” |
type | 查询方式,默认为 | EQUAL |
blurry | 多字段模糊查询,值为实体字段名称 | “” |
joinName | 关联实体的名称 | “” |
join | 连接查询方式,左连接或者右连接 | LEFT |
使用方式
1、创建一个查询类 QueryCriteria
@Data
public class QueryCriteria {
// 等于
@Query
private 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为关联实体名称
@Query(joinName = "")
private String e;
// 右关联查询,right Join , joinName为关联实体名称
@Query(joinName = "", 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 中查询
@Override
public 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