mybatisplus条件构造器批量模糊like
时间: 2024-09-12 22:15:01 浏览: 148
MyBatisPlus是一个基于MyBatis的简化整合工具,它提供了一种更简洁的方式来编写SQL语句。其中,条件构造器(Criteria API)允许你在查询时使用方便的API创建复杂的查询条件,包括批量模糊搜索。
批量模糊like操作通常是在需要对某个字段做模糊匹配时使用,例如,你想查找所有名字包含"张"或者"李"的用户。在MyBatisPlus的Criteria API中,你可以这样做:
```java
// 创建一个动态的Criteria实例
DynamicCriteria dynamicCriteria = DynamicCriteria.me();
// 添加模糊查询条件
dynamicCriteria.where().LIKE("username", "张%").or().LIKE("username", "李%");
// 执行批量查询
List<User> users = UserMapper.selectByCriteria(dynamicCriteria);
```
这里,`LIKE`关键字配合`%`通配符用于表示任意字符,`or()`函数则连接两个条件,使得查询结果满足其中一个条件即可。
相关问题
mybatisplus批量like
### MyBatisPlus 批量 LIKE 查询的实现方式
MyBatisPlus 提供了灵活的方式来构建复杂的 SQL 查询条件,其中包括批量 `LIKE` 查询的支持。通过使用 Wrapper 条件构造器以及自定义 SQL 的能力,可以轻松实现这一功能。
以下是具体的实现方法:
#### 方法一:利用 QueryWrapper 构建动态条件
可以通过 `QueryWrapper` 或其子类来动态拼接多个 `LIKE` 条件。以下是一个简单的示例代码片段:
```java
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
public List<Entity> batchLike(List<String> keywords) {
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
// 动态添加多个 LIKE 条件
for (String keyword : keywords) {
if (!queryWrapper.getExpressions().isEmpty()) {
queryWrapper.or();
}
queryWrapper.like("column_name", keyword); // 替换 column_name 为目标字段名
}
return this.list(queryWrapper);
}
```
上述代码实现了针对指定列的批量模糊匹配操作[^1]。每次循环都会向查询条件中追加一个新的 `LIKE` 子句,并通过 `.or()` 进行逻辑连接。
---
#### 方法二:手写 XML 配置文件中的 SQL
对于更复杂的需求,可以直接编写自定义的 Mapper 接口并配合 XML 文件完成批量 `LIKE` 查询。例如,在 XML 中定义如下 SQL 片段:
```xml
<select id="batchLike" parameterType="map" resultType="Entity">
SELECT * FROM table_name WHERE
<foreach collection="keywords" item="keyword" open="" separator=" OR " close="">
column_name LIKE CONCAT('%', #{keyword}, '%')
</foreach>
</select>
```
对应的 Java 调用代码如下所示:
```java
@Mapper
public interface CustomMapper extends BaseMapper<Entity> {
List<Entity> batchLike(@Param("keywords") List<String> keywords);
}
// 使用示例
List<String> keywords = Arrays.asList("key1", "key2");
List<Entity> results = customMapper.batchLike(keywords);
```
这种方式更加直观且易于维护,尤其适合涉及大量参数的情况[^2]。
---
#### 方法三:借助 LambdaQueryWrapper 简化语法
Lambda 表达式的引入使得条件构造变得更加简洁明了。下面展示如何运用 `LambdaQueryWrapper` 完成相同的功能:
```java
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
public List<Entity> lambdaBatchLike(List<String> keywords) {
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper<>();
for (String keyword : keywords) {
if (!wrapper.getParamNameCache().isEmpty()) {
wrapper.or();
}
wrapper.like(Entity::getColumn, keyword); // Entity 是实体类名称,Column 对应目标属性
}
return this.list(wrapper);
}
```
此版本不仅保持了清晰可读的特点,还有效减少了硬编码字符串带来的潜在错误风险[^3]。
---
### 注意事项
- 如果关键词列表过长,则可能导致生成的 SQL 较大甚至超出某些数据库支持的最大长度限制,请酌情考虑分批次处理。
- 当前讨论仅适用于单表场景下的简单查询;实际项目开发过程中可能还需要结合事务管理机制或其他高级特性加以完善。
Mybatisplus的原理
Mybatisplus是一个基于MyBatis的增强工具,它提供了很多实用的功能,让我们在使用MyBatis时更加方便快捷。其主要原理可以分为以下几个方面:
1. 代码生成器:Mybatisplus提供了一个代码生成器,可以根据数据库表自动生成对应的实体类、mapper接口和xml文件,省去了手动编写的麻烦。
2. 基于注解的CRUD操作:Mybatisplus提供了一些注解,例如@TableName、@TableId等,可以直接在实体类上标记表名和主键信息,使得CRUD操作更加便捷。
3. 条件构造器:Mybatisplus提供了一个条件构造器,可以根据不同的条件组合生成SQL语句,例如eq等于、like模糊查询等,可以方便地进行复杂的查询操作。
4. 分页插件:Mybatisplus提供了一个分页插件,可以方便地进行分页查询操作,支持MySQL、Oracle、SQLServer等多种数据库。
5. 性能优化:Mybatisplus对MyBatis进行了一些性能优化,例如缓存机制、批量操作等,使得MyBatis的性能更加出色。
总的来说,Mybatisplus的原理就是在MyBatis的基础上提供了一些实用的功能,让我们在开发中更加方便快捷。
阅读全文
相关推荐









