动态生成初始化条件构造器

2022-11-15 19:56:09 浏览数 (1)

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

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

代码语言:javascript复制
/**
 * @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;

    }
}

0 人点赞