【知识梳理】MyBatis-Plus之and和or多重嵌套的写法

本文详细解析了如何在MyBatis-Plus中进行and和or的多重嵌套操作,通过实例代码展示了如何构建复杂的查询条件,帮助开发者更好地掌握MyBatis-Plus的高级查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要用mybtis-plus框架写一个类似如下的语句:

select * from X where A and B and ( ( C and ( D or E ) ) or ( F and ( G or H ) ) )

代码如下:


                
### 3.1 基于 QueryWrapper 的 AND OR 组合查询 在 MyBatis-Plus 中,使用 `QueryWrapper` 可以实现复杂AND OR 条件组合查询。通过 `.eq()`、`.gt()`、`.like()` 等方法设置查询条件,并结合 `.and()` `.or()` 方法进行逻辑连接。 例如,若需查询状态为“启用”(status = 1)且年龄等于 30 或姓名包含 “John” 的用户记录: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", 1) .and(wq -> wq.eq("age", 30).or().like("name", "John")); List<User> users = userMapper.selectList(queryWrapper); ``` 生成的 SQL 如下: ```sql SELECT * FROM user WHERE status = 1 AND (age = 30 OR name LIKE '%John%') ``` 该语句将返回所有状态为“启用”并且满足年龄等于 30 或者姓名中包含 “John” 的用户记录[^3]。 ### 3.2 使用 LambdaQueryWrapper 实现类型安全的 AND/OR 查询 相比 `QueryWrapper`,`LambdaQueryWrapper` 提供了更安全的类型检查机制,避免字段名拼错误的问题。同样可以实现 AND OR复杂组合逻辑。 例如,查询状态为“启用”且年龄大于 30,或者姓名包含 “Tom” 的用户: ```java LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(User::getStatus, 1) .and(wrapper -> wrapper.gt(User::getAge, 30).or().like(User::getName, "Tom")); List<User> users = userMapper.selectList(lambdaQueryWrapper); ``` 生成的 SQL 为: ```sql SELECT * FROM user WHERE status = 1 AND (age > 30 OR name LIKE '%Tom%') ``` 这种方式不仅提高了代码可读性,也增强了编译时的类型安全性[^2]。 ### 3.3 嵌套条件中的 AND OR 组合 对于更复杂嵌套查询场景,可以使用多层 `.and()` `.or()` 方法来构建条件结构。例如,查找同时满足 `(name = '张三' AND age > 30)` 或 `(name = '李四' AND age < 25)` 的记录: ```java QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.and(wrapper1 -> wrapper1.eq("name", "张三").gt("age", 30)) .or() .and(wrapper2 -> wrapper2.eq("name", "李四").lt("age", 25)); ``` 最终生成的 SQL 为: ```sql SELECT * FROM user WHERE (name = '张三' AND age > 30) OR (name = '李四' AND age < 25) ``` 这种写法支持对多个子条件进行分组并灵活应用逻辑运算符,从而构建出高度定制化的查询条件[^1]。 ### 相关注意事项 - 在构造复杂查询条件时,应确保理解最终生成的 SQL 结构,以避免因逻辑错误导致结果偏差。 - 对于涉及动态参数的查询,建议使用 Lambda 表达式增强类型安全性。 - 测试阶段应充分验证每种条件组合的行为是否符合预期,尤其是在生产环境中使用前应进行充分测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值