mybatisplus中or的用法
时间: 2023-12-05 19:41:12 浏览: 128
MyBatisPlus中的or()方法可以用于构建SQL语句中的OR条件。下面是一个使用or()方法的示例:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三").or().eq("name", "李四");List<User> userList = userMapper.selectList(wrapper);
```
上面的代码中,我们首先创建了一个QueryWrapper对象,然后使用eq()方法添加了一个等于条件,接着使用or()方法添加了一个OR条件,最后再使用eq()方法添加了另一个等于条件。这样就构建出了一个SQL语句,查询name等于"张三"或者等于"李四"的用户信息。
需要注意的是,or()方法必须在添加完一个条件之后才能调用,否则会抛出异常。如果需要在or()方法之后添加多个条件,可以使用nested()方法将它们包裹起来,例如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三").or(i -> i.eq("age", 18).ne("email", "[email protected]"));
List<User> userList = userMapper.selectList(wrapper);
```
上面的代码中,我们使用了一个Lambda表达式将两个条件包裹起来,这样就可以在or()方法之后添加多个条件了。
相关问题
mybatisplus的or用法
MybatisPlus的or用法可以通过使用`or`方法来实现。在查询条件中,如果需要使用or连接多个条件,可以使用`or`方法将这些条件包裹起来。例如,可以使用`or`方法将`eq("attr_id", key)`和`like("attr_name", key)`这两个条件连接起来。示例如下:
```java
QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<AttrEntity>()
.eq("attr_type", "base".equalsIgnoreCase(type) ? 1 : 0)
.and(qr -> qr.eq("catelog_id", catelogId)
.or()
.eq("attr_id", key)
.like("attr_name", key)
);
```
这样生成的SQL语句会包含`OR`关键字,实现了多个条件之间的or连接。生成的SQL语句类似于:
```sql
SELECT ...
FROM ...
WHERE (attr_type = ? AND (catelog_id = ? OR attr_id = ? OR attr_name LIKE ?))
```
通过使用`or`方法,可以在MybatisPlus中灵活地使用or连接多个条件。
#### 引用[.reference_title]
- *1* *3* [Mybatis-Plus中的and()和or()的使用与原理介绍](https://blog.csdn.net/qq_43318840/article/details/125704216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [MybatisPlus使用or关联导致查询条件失效](https://blog.csdn.net/m0_53434091/article/details/128965335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
mybatisplus.or用法
### MyBatis Plus 中 `or` 方法的使用
在构建复杂的查询条件时,`QueryWrapper` 提供了多种方法来组合不同的逻辑运算符。对于 `or` 的使用,在 `QueryWrapper` 类中有专门的方法用于实现 OR 逻辑连接。
#### 基本语法结构
可以调用 `or()` 或者带有参数版本的重载函数来进行条件拼接:
- 不带参数的 `or()`: 结束当前 AND 链条并开启新的 OR 子链。
- 带有表达式的 `or(ICondition)` 和 `or(boolean, IFunction<NoneWrapper<T>, NoneWrapper<T>> function)`: 可以直接传入 Lambda 表达式定义后续要追加的具体字段判断[^2]。
#### 实际应用案例
下面是一个具体的例子展示如何利用 `or` 来创建复合查询语句:
```java
// 创建 QueryWrapper 对象实例
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
// 添加多个条件,并通过 or 进行链接
queryWrapper.eq(User::getAge, 18).or().eq(User::getName, "Li Lei");
// 执行查询操作 (假设 userMapper 是已经配置好的 Mapper 接口)
List<User> userList = userMapper.selectList(queryWrapper);
```
这段代码将会生成 SQL 查询类似于 `"SELECT * FROM User WHERE age = ? OR name = ?"` ,其中问号会被实际值替换掉。
当需要更复杂的情况比如嵌套条件的时候,则可以通过传递 lambda 函数给 `or` 方法完成更加灵活的操作:
```java
queryWrapper.eq(User::getStatus, true)
.and(i -> i.ge(User::getCreateTime, startDate))
.or(j -> j.le(User::getLastLoginTime, endDate));
```
这将形成如下形式的SQL片段:"...WHERE status=true AND create_time >= 'startDate' OR last_login_time <= 'endDate'".
阅读全文
相关推荐
















