通用查询
# 通用查询
本项目对 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为关联实体名称 , 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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
关联查询参考:DictDetailQueryCriteria
类,下面代码为关联查询 dict 表里面的 name 字段
public class DictDetailQueryCriteria {
@Query(propName = "name",joinName = "dict")
private String dictName;
}
// propName = "name" 为关联实体 Dict 中的字段名称
public class Dict extends BaseEntity implements Serializable {
@NotBlank
@ApiModelProperty(value = "名称")
private String name;
}
// joinName = "dict" 为关联实体名称
public class DictDetail extends BaseEntity implements Serializable {
@JoinColumn(name = "dict_id")
@ManyToOne(fetch=FetchType.LAZY)
@ApiModelProperty(value = "字典", hidden = true)
private Dict dict;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2、在控制器中使用
// Pageable 分页查询
public ResponseEntity query(QueryCriteria criteria, Pageable pageable){
return new ResponseEntity(service.queryAll(criteria,pageable), HttpStatus.OK);
}
1
2
3
4
2
3
4
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;
}
1
2
3
4
5
2
3
4
5
提示
如果需要添加一个字段查询,只需要在查询类 QueryCriteria
中添加就可以了,可节省大量时间。
源码可以查看 eladmin-common
模块中的 me.zhengjie.annotation.Query
与 me.zhengjie.utils.QueryHelp
帮助我们改善此页面! (opens new window)
上次更新: 2024/09/11, 06:38:28