在我没日没夜的写大量的增删改查的过程中意识到了一个问题,那就是我们在分页查询或者批量查寻的时候,通常会根据不同的场景去构造不同的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
|
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 { 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;
} }
|