mybatis-plus where a = ‘1‘ or a = ‘2‘ or a = ‘3‘ 写法

这篇博客介绍了如何使用Java的LambdaQueryWrapper进行复杂查询过滤。通过示例展示了如何利用LambdaQueryWrapper结合List遍历实现部门代码的多条件匹配,并且演示了在模糊搜索中对多个字段进行Like操作的方法,这些技巧在日常的后端开发中非常实用。

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

LambdaQueryWrapper<FmsPayableOrderHeader> lambdaQuery = Wrappers.lambdaQuery();

List<String> departments = Lists.newArrayList("1"."2","3");
lambdaQuery.and(wrapper -> departments.forEach(code -> wrapper.eq(FmsPayableOrderHeader::getDepartmentCode, code).or()));

模糊搜索 某一个字段

  lambdaQuery.and(p -> p.like(TSoxHeadSupport::getHeadName, param.getHeadName())
                    .or().like(TSoxHeadSupport::getHeadCode, param.getHeadName()));

### 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 &#39;%John%&#39;) ``` 该语句将返回所有状态为“启用”并且满足年龄等于 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 &#39;%Tom%&#39;) ``` 这种方式不仅提高了代码可读性,也增强了编译时的类型安全性[^2]。 ### 3.3 嵌套条件中的 AND OR 组合 对于更复杂的嵌套查询场景,可以使用多层 `.and()` `.or()` 方法来构建条件结构。例如,查找同时满足 `(name = &#39;张三&#39; AND age > 30)` 或 `(name = &#39;李四&#39; 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 = &#39;张三&#39; AND age > 30) OR (name = &#39;李四&#39; AND age < 25) ``` 这种写法支持对多个子条件进行分组并灵活应用逻辑运算符,从而构建出高度定制化的查询条件[^1]。 ### 相关注意事项 - 在构造复杂查询条件时,应确保理解最终生成的 SQL 结构,以避免因逻辑错误导致结果偏差。 - 对于涉及动态参数的查询,建议使用 Lambda 表达式增强类型安全性。 - 测试阶段应充分验证每种条件组合的行为是否符合预期,尤其是在生产环境中使用前应进行充分测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值