在我没日没夜的写大量的增删改查的过程中意识到了一个问题,那就是我们在分页查询或者批量查寻的时候,通常会根据不同的场景去构造不同的QueryWrapper那就有一个问题,
对于我们后端很不友好,每次都是查询,只不过前端传过来的条件可能不一样,所以我就想有没有一种办法可以动态的去构造QueryWrapper这时候我就尝试造一个轮子

下面注释写的很详细,不过要使用这个构造器就要遵守我自己定的规范那么就是在RO对象上所有的属性添加ApiModelProperty注解并且其value值必须要为其数据库中对应的字段名

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
52
53
54
55
/**
* @Author: ZVerify
* @Description: 初始化查询条件构造
* @DateTime: 2022/9/4 16:41
**/
public class SearchQueryInit {

public static <T> QueryWrapper<T> getQueryWrapper(Object entity,Class<T> clazz){

QueryWrapper<T> queryWrapper = new QueryWrapper<>();

// 获取所有属性
for(Field f : entity.getClass().getDeclaredFields()) {
// 得到私有属性
f.setAccessible(true);

Opp.ofTry(() -> {

if (f.get(entity) != null) {
// 得到属性上的注解
ApiModelProperty field = f.getAnnotation(ApiModelProperty.class);

// 在其不为空的情况下
Opp.ofStr(field.value()).ifPresent(fQ->{

try {

// 如果是字符串类型的字段单独处理,过滤掉字符串为""or" "的,然后进行构造
Opp<Object> opp = Opp.of(f.get(entity)).typeOfPeek((String s) -> Opp.ofStr(s).ifPresent(Fq -> queryWrapper.like(fQ, Fq)));

// 如果不是字符传则正常处理
if (opp.isNull()){

queryWrapper.like(fQ, f.get(entity));
}

} catch (IllegalAccessException e) {

throw new RuntimeException(ResultConstant.InitializationMessage.SEARCH_STRUCTURE);
}

});

}
return null;

});

}

return queryWrapper;

}
}