mybatis中$和#的区别
时间: 2024-10-25 11:09:41 浏览: 34
在MyBatis中,`$`和`#`是两个特殊的字符,它们在动态SQL生成中有重要的作用:
1. `$`: 这是MyBatis的传统方式(即JDBC预编译语句的遗留支持),在动态SQL表达式中用于引用参数的值。当你在mapper XML文件中直接写 `${parameterName}`,它会被替换为传入的参数值。例如:
```xml
<select id="selectUser" parameterType="map" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
```
2. `#`: 这种形式是MyBatis 3.3及以上版本推荐使用的,特别是在Spring Boot集成时,它可以更好地避免SQL注入攻击,因为MyBatis会将`#{}`视为一个表达式,并通过EL(Expression Language)引擎去解析和安全地传递参数值。这种写法更安全且易于维护。同样地:
```xml
<select id="selectUser" parameterType="User" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
```
在上述XML中,`#name`会被Spring EL引擎解析成对应的请求参数值。
总结来说,`$`在老版本中使用较多,而`#`不仅提供了更好的安全特性,还兼容了更多现代的依赖和框架。使用`#`时,参数的类型信息会保存在Mapper的参数映射中,有助于MyBatis性能优化。
阅读全文