Or 或操作

SELECT * FROM test
WHERE (name LIKE '%star%' AND NOT name LIKE '%trek%') OR duration = 200

db.test.find({$or:
    [
      { name: /star/i, name: { $not: /trek/i } },
      { duration: 200 }
    ]
  },{_id:0})

 

在 MyBatis-Plus 中,实现 OR 查询条件主要依赖于 `QueryWrapper` 或 `LambdaQueryWrapper` 来构造复杂的查询逻辑。通过这些封装好的工具类,可以灵活地构建包含 OR 逻辑的 SQL 查询语句。 ### 使用 QueryWrapper 实现 OR 查询 `QueryWrapper` 提供了 `or()` 方法来支持 OR 条件的拼接。例如,如果需要查询用户表中姓名是“李白”且状态为“alive”,或者姓名是“杜甫”且状态为“alive”的记录,可以通过以下方式构建查询条件: ```java QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name", "李白").eq("status", "alive") .or() .eq("name", "杜甫").eq("status", "alive"); ``` 生成的 SQL 语句如下: ```sql SELECT * FROM user WHERE (name = '李白' AND status = 'alive') OR (name = '杜甫' AND status = 'alive') ``` 该查询将按照预期返回符合条件的所有记录[^4]。 ### 使用 LambdaQueryWrapper 构建 OR 查询 对于更复杂的查询场景,推荐使用 `LambdaQueryWrapper`,因为其提供了类型安全的方式进行条件构建。同样以查询“李白”和“杜甫”的活跃状态为例: ```java LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(User::getName, "李白").eq(User::getStatus, "alive") .or() .eq(User::getName, "杜甫").eq(User::getStatus, "alive"); ``` 上述代码片段生成的 SQL 与前面示例相同,但使用 Lambda 表达式提升了代码的可读性和安全性。 ### 嵌套条件中的 OR 操作 当需要在嵌套条件中使用 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)); ``` 这种写法允许对多个条件进行分组,并在每个分组内部应用 OR 运算符,从而形成更为复杂和精确的查询条件。 ### 注意事项 - 在实际开发过程中,应根据具体需求选择合适的 Wrapper 类型。 - 对于简单的查询逻辑,`QueryWrapper` 已经足够;而对于涉及多层嵌套或复杂业务逻辑的情况,则建议优先考虑 `LambdaQueryWrapper`。 - 确保正确理解并测试最终生成的 SQL 语句,避免因条件拼接错误导致的数据检索问题。 通过以上方法,可以在 MyBatis-Plus 中有效地实现包含 OR 逻辑的查询操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值