mybatis like查询
时间: 2025-05-17 12:27:51 浏览: 27
### MyBatis 中 LIKE 查询的使用方法
在 MyBatis 中,`LIKE` 查询通常用于模糊匹配字符串数据。可以通过 SQL 语句中的 `WHERE column_name LIKE '%value%'` 来实现这一功能。以下是具体的实现方式和示例。
#### 方法一:使用 `#{}`
当需要进行模糊查询时,可以在 Java 层面拼接 `%` 符号,并通过 `#{}` 占位符传递参数[^3]。这种方式能够有效防止 SQL 注入攻击。
```java
// Mapper 接口定义
public interface UserMapper {
@Select("SELECT * FROM users WHERE name LIKE CONCAT('%', #{name}, '%')")
List<User> findByNameLike(String name);
}
```
调用此方法时,只需传入待查找的关键字即可:
```java
String keyword = "John";
List<User> result = userMapper.findByNameLike(keyword);
```
---
#### 方法二:使用 `${}`
如果希望直接在 SQL 中嵌入变量而不经过预编译,则可以使用 `${}` 占位符。需要注意的是,这种方法存在潜在的安全风险(如 SQL 注入),因此应谨慎使用。
```sql
<!-- XML 配置 -->
<select id="findByNameLike" parameterType="string" resultType="User">
SELECT * FROM users WHERE name LIKE '%${name}%'
</select>
```
对应的 Java 调用如下:
```java
Map<String, Object> params = new HashMap<>();
params.put("name", "John");
List<User> result = sqlSession.selectList("findByNameLike", params);
```
---
#### 方法三:组合条件构造器(适用于 MyBatis-Plus)
对于更复杂的场景,尤其是涉及多字段联合查询的情况下,推荐使用 MyBatis-Plus 提供的功能[^4]。例如,构建一个基于 `QueryWrapper` 的条件表达式来完成模糊查询。
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "John"); // 构造 LIKE '%%' 条件
List<User> resultList = userMapper.selectList(queryWrapper);
```
上述代码会生成类似于以下的 SQL 语句:
```sql
SELECT * FROM users WHERE name LIKE '%John%';
```
---
#### 注意事项
1. **安全性**:优先选用 `#{}` 方式以避免 SQL 注入问题。
2. **性能优化**:针对大数据表,建议为经常使用的模糊查询字段创建索引,但需注意前缀通配符 (`%keyword`) 可能无法利用索引。
3. **大小写敏感性**:默认情况下,MySQL 对于 Latin 字符集是区分大小写的;而对于 UTF-8 则可能不区分。可通过调整数据库配置或显式指定 COLLATE 解决该问题。
---
### 总结
以上介绍了三种常见的 MyBatis 实现 `LIKE` 查询的方式,分别是通过 `#{}` 安全绑定参数、`${}` 动态替换模板以及借助 MyBatis-Plus 的高级特性简化开发流程。开发者可以根据实际需求选择合适的方法。
阅读全文
相关推荐

















