在我没日没夜的写大量的增删改查的过程中意识到了一个问题,那就是我们在分页查询或者批量查寻的时候,通常会根据不同的场景去构造不同的QueryWrapper
那就有一个问题,
对于我们后端很不友好,每次都是查询,只不过前端传过来的条件可能不一样,所以我就想有没有一种办法可以动态的去构造QueryWrapper
这时候我就尝试造一个轮子
下面注释写的很详细,不过要使用这个构造器就要遵守我自己定的规范那么就是在RO对象上所有的属性添加ApiModelProperty
注解并且其value
值必须要为其数据库中对应的字段名
/**
* @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;
}
}