mybatis like最优写法
时间: 2025-01-07 11:06:43 浏览: 4
### MyBatis 中使用 LIKE 关键字的最佳实践
#### 使用 `CONCAT` 函数处理模糊查询
为了防止 SQL 注入并提高可读性和维护性,在 MySQL 和 Oracle 数据库中可以采用不同的方式来实现模糊匹配。对于 MySQL,推荐的方式是在 XML 映射文件里利用 `<select>` 标签配合 `concat()` 方法构建条件表达式[^1]。
```xml
<select id="findUserByLikeName3" parameterType="java.lang.String" resultMap="user">
select * from t_user where name like concat('%',#{name,jdbcType=VARCHAR},'%')
</select>
```
这种方法不仅能够有效避免潜在的安全风险,而且使得参数传递更加直观简洁。
#### 结合 Java 代码预处理通配符
另一种常见的做法是提前在应用程序层面上准备好带有百分号 `%` 的字符串模式再传给持久化框架执行查询操作。这种方式适用于多种类型的数据库系统,并且保持了一定程度上的灵活性[^3]。
```java
String wildcardName = "%" + originalName + "%";
list<Name> names = mapper.selectLike(wildcardName);
```
对应的 Mapper 文件定义如下:
```xml
<select id="selectlike">
select * from foo where bar like #{value}
</select>
```
需要注意的是,当业务逻辑允许的情况下应尽可能减少动态拼接 SQL 片段的行为,因为这可能会带来性能开销以及安全隐患等问题。
#### 定义 Result Map 提升映射效率
无论采取哪种形式的模糊查询方案,都建议为实体类创建专门的结果集映射规则(Result Map),从而确保字段之间的对应关系清晰明了,同时也便于后续扩展和调试工作[^2]。
```xml
<resultMap type="demo.entity.AppList" id="resultMap">
<result column="appid" property="appid" jdbcType="VARCHAR"/>
<result column="schoolid" property="schoolid" jdbcType="VARCHAR"/>
<result column="appname" property="appname" jdbcType="VARCHAR"/>
<result column="app_departid" property="app_departid" jdbcType="VARCHAR"/>
<result column="apptype" property="apptype" jdbcType="VARCHAR"/>
</resultMap>
```
通过上述措施可以在很大程度上提升基于 MyBatis 实现模糊查询功能的质量与可靠性。
阅读全文