 通用查询
通用查询
  # 通用查询
本项目对 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, 14:38:28
 
 