mybatisplus忽略大小写模糊查询
时间: 2025-06-09 22:25:05 浏览: 15
### MyBatisPlus 实现忽略大小写的模糊查询
在使用 MyBatisPlus (MP) 进行数据库操作时,若需要实现忽略大小写的模糊查询功能,可以通过自定义 SQL 或者使用 MP 提供的 Wrapper 来完成。以下是一个完整的解决方案[^1]。
#### 1. 使用 `like` 和 `upper/lower` 函数
MyBatisPlus 的 `QueryWrapper` 或 `LambdaQueryWrapper` 支持链式调用,并允许通过 SQL 函数实现忽略大小写的模糊查询。例如,可以将字符串统一转换为大写或小写进行比较。
```java
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
public List<Entity> caseInsensitiveFuzzyQuery(String keyword) {
LambdaQueryWrapper<Entity> wrapper = Wrappers.lambdaQuery();
wrapper.like(Entity::getName, keyword.toUpperCase()) // 转换为大写
.or()
.like(Entity::getName, keyword.toLowerCase()); // 转换为小写
return entityMapper.selectList(wrapper);
}
```
上述代码通过 `like` 方法实现了对字段值的模糊匹配,并结合 `toUpperCase` 和 `toLowerCase` 方法确保了查询忽略大小写[^2]。
#### 2. 数据库级别的忽略大小写
部分数据库(如 MySQL)支持配置字段的排序规则(collation),从而在查询时自动忽略大小写。例如,将字段的 collation 设置为 `utf8_general_ci` 或 `utf8mb4_general_ci`,其中 `_ci` 表示大小写不敏感(case-insensitive)。此时,无需额外处理即可实现忽略大小写的模糊查询。
```sql
ALTER TABLE your_table MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
```
在 Java 层面,可以直接使用 `like` 方法:
```java
wrapper.like(Entity::getName, keyword); // 自动忽略大小写
```
#### 3. 动态 SQL 的方式
如果需要更灵活的控制,可以使用 MyBatis 的 XML 映射文件编写动态 SQL。例如:
```xml
<select id="selectByName" resultType="Entity">
SELECT * FROM your_table
WHERE LOWER(name) LIKE CONCAT('%', #{keyword}, '%')
</select>
```
在 Java 中调用时,传递的参数无需额外处理大小写,因为 SQL 已经将其转换为小写[^3]。
#### 注意事项
- 如果使用的是 Oracle 数据库,推荐使用 `UPPER` 或 `LOWER` 函数,因为 Oracle 默认区分大小写。
- 在高并发场景下,尽量避免对大量数据执行函数运算(如 `UPPER` 或 `LOWER`),以减少性能开销。
```java
wrapper.apply("LOWER(name) LIKE CONCAT('%', LOWER({0}), '%')", keyword);
```
上述代码通过 `apply` 方法直接嵌入 SQL 片段,确保查询效率[^4]。
---
阅读全文
相关推荐















