mybatis中like模糊查询
时间: 2025-05-10 17:34:01 浏览: 15
### MyBatis中实现LIKE模糊查询
在MyBatis中,可以通过多种方式实现`LIKE`模糊查询。以下是常见的几种方法及其具体实现:
#### 方法一:使用 `concat` 函数和 `#{}` 参数占位符
这种方式利用SQL中的`CONCAT`函数将通配符 `%` 和参数动态拼接在一起。这种方法可以有效防止SQL注入攻击。
```sql
SELECT * FROM table_name WHERE column_name LIKE CONCAT('%', #{param}, '%');
```
此方法通过预编译的SQL语句传递参数,从而提高安全性[^1]。
---
#### 方法二:直接使用 `${}` 插入字符串并手动添加 `%`
`${}` 是一种直接替换变量的方式,适合用于静态SQL场景。需要注意的是,这种写法存在潜在的安全风险,容易受到SQL注入攻击。
```sql
SELECT * FROM table_name WHERE column_name LIKE '%${param}%';
```
尽管如此,在某些特定情况下(如完全信任输入数据),该方法仍然被广泛采用[^2]。
---
#### 方法三:组合 `concat` 和 `${}`
如果希望既保持灵活性又减少安全隐患,则可以选择混合模式——即部分固定逻辑由数据库处理而其他部分交予程序控制。
```sql
SELECT * FROM table_name WHERE column_name LIKE CONCAT('%%', ${param});
```
不过仍需谨慎对待任何未经验证的数据源[^3]。
---
#### 方法四:借助双竖线 (`||`) 实现 Oracle 数据库下的功能扩展
对于支持特殊运算符 (比如Oracle 的 || ) 的 RDBMS 而言, 我们还可以尝试如下形式:
```sql
-- 适用于 Oracle 数据库环境
SELECT * FROM table_name WHERE column_name LIKE '%' || #{param} || '%';
```
这同样依赖于框架内部机制完成最终解析工作[^4].
---
#### 推荐的最佳实践
综合考虑性能与安全因素之后 , 应优先选用基于 **Prepared Statement** 构建起来的标准接口调用链路; 同时确保所有外部提交过来的内容都经过严格校验后再参与实际执行流程.
```java
// Java Mapper Interface Example
List<Record> findRecordsByKeyword(@Param("keyword") String keyword);
```
配合上述任意一条合法声明即可满足日常开发需求的同时保障整体质量水平处于可控范围之内 .
---
阅读全文
相关推荐


















