欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > mybatis的LambdaQueryWrapper 写or怎么写

mybatis的LambdaQueryWrapper 写or怎么写

2025/5/1 8:10:23 来源:https://blog.csdn.net/lu1171901273/article/details/147380414  浏览:    关键词:mybatis的LambdaQueryWrapper 写or怎么写
一、基础 OR 条件

使用 or() 方法直接连接多个条件,默认在同一逻辑层内生成 OR 条件:

javaCopy Code

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getStatus, 1) .or() .eq(User::getRole, "admin");

生成 SQL:

sqlCopy Code

WHERE status = 1 OR role = 'admin'

注:or() 会将其后第一个条件与前一个条件以 OR 连接‌

二、嵌套 OR 条件

通过 or(Consumer<LambdaQueryWrapper> consumer) 实现逻辑分组,自动添加括号:

javaCopy Code

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getType, "A") .or(wq -> wq .eq(User::getName, "张三") .eq(User::getName, "李四") );

生成 SQL:

sqlCopy Code

WHERE type = 'A' OR (name = '张三' AND name = '李四')

注:通过 Consumer 嵌套条件,保证 OR 子句的独立性‌67。


三、循环中动态添加 OR 条件

遍历集合动态拼接 OR 条件时,需正确处理首次条件:

javaCopy Code

List<String> names = Arrays.asList("张三", "李四", "王五"); LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getStatus, 1); if (!names.isEmpty()) { wrapper.and(wq -> { wq.eq(User::getName, names.get(0)); // 第一个条件 for (int i = 1; i < names.size(); i++) { wq.or().eq(User::getName, names.get(i)); // 后续条件以 OR 连接 } }); }

生成 SQL:

sqlCopy Code

WHERE status = 1 AND (name = '张三' OR name = '李四' OR name = '王五')

注:需通过 and() 包裹动态 OR 条件,避免与外部条件错误组合‌16。


四、复杂逻辑混合 AND/OR

结合 and() 和 or() 实现多层级条件嵌套:

javaCopy Code

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getDept, "IT") .and(wq -> wq .eq(User::getAge, 30) .or() .gt(User::getSalary, 10000) );

生成 SQL:

sqlCopy Code

WHERE dept = 'IT' AND (age = 30 OR salary > 10000)

注:通过 and() 包裹内部 OR 逻辑,明确条件层级‌7。


常见错误及解决

  1. 错误连续调用 or()

    javaCopy Code

    wrapper.eq(A).or().eq(B).or().eq(C);

    生成 SQL:

    sqlCopy Code

    WHERE A OR B OR C # 可能破坏外部条件逻辑

    正确写法:使用 or(Consumer) 分组‌

  2. 未处理空集合
    动态拼接 OR 条件时,若集合为空会导致 SQL 异常,需添加判空逻辑‌

  3. 忽略括号优先级
    复杂条件需显式嵌套,避免默认优先级导致逻辑错误‌

  4. 来源于deepseek

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词