2301_78464877 2024-06-12 15:03 采纳率: 50%
浏览 10
已结题

QueryWrapper 模糊查询


QueryWrapper可以使用eq 等方法 添加查询条件,然后使用Mapper.selectList(queryWrapper)返回查询的集合。

具体应该如下

 public List<EntityName> selectByQueryWrapper(EntityName entityName) {
        LambdaQueryWrapper<EntityName> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(EntityName::id,entityName.getid());
        return basserMapper.selectList(queryWrapper);
    }

但是我想将EntityName 的字段一一判断是否为空,不为空再进行查询等操作,
中间  queryWrapper.like(EntityName::id,entityName.getid()); 就不确定行数,要随着字段数量变动,
如果左侧代码EntityName::id要使用反射获取EntityName拿取字段,但是右侧entityName.getid又不能随着变动,这个表达式就不能随着需求变动。

我看了站里面的,写的queryWrapper都是固定的一两个,可不可以将查询的参数个数换为非固定数量呢?然后再排除为空的参数,不为空的填入queryWrapper中

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-12 15:03
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要实现一个灵活的QueryWrapper模糊查询方法,你可以通过Java的反射机制来动态地获取EntityName类的所有字段,并检查它们的值是否为空。如果字段值非空,就使用like方法添加到queryWrapper中。以下是一个实现示例:

    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.extension.service.IService;
    
    import java.lang.reflect.Field;
    import java.util.List;
    
    public class EntityNameService implements IService<EntityName> {
    
        // 假设basserMapper是继承自IService接口的mapper
        private BasserMapper<EntityName> basserMapper;
    
        public List<EntityName> selectByDynamicQueryWrapper(EntityName entityName) {
            LambdaQueryWrapper<EntityName> queryWrapper = new LambdaQueryWrapper<>();
            try {
                // 获取EntityName类的Class对象
                Class<EntityName> clazz = entityName.getClass();
                // 获取类的所有字段
                Field[] fields = clazz.getDeclaredFields();
    
                for (Field field : fields) {
                    // 设置字段为可访问
                    field.setAccessible(true);
                    // 获取字段值
                    Object value = field.get(entityName);
                    // 检查字段值是否不为空
                    if (value != null && !value.toString().isEmpty()) {
                        // 构建字段名称
                        String fieldName = field.getName();
                        // 使用like方法添加查询条件
                        queryWrapper.like(fieldName, value.toString());
                    }
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
    
            return basserMapper.selectList(queryWrapper);
        }
    }
    

    请注意,这段代码只是一个示例,你可能需要根据你的具体情况进行调整。例如,BasserMapper应该是你使用的Mapper接口,EntityName是你的实体类。

    关于参考资料,你可以查看MyBatis-Plus的官方文档,特别是关于LambdaQueryWrapper的使用部分:

    这些文档将为你提供更深入的理解和更多的使用示例。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月21日
  • 已采纳回答 6月13日
  • 创建了问题 6月12日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上