1.#{}
- #{}会作为sql参数使用,替代sql中的占位符?
- 有预编译机制,防止sql注入,效率高
- 字符串;类型会自动在两边拼上单引号
2. ${}
- ${}会原样直接拼接到sql上
- 没有预编译机制,不能防止sql注入,效率低
- 字符串类型两边不会自动拼接单引号
3.测试
#{}测试
Mapper中的代码
<select id="selc01" resultType="cn.tedu.domain.User">
select * from user where name = #{name};
</select>
结果如下
${}测试
Mapper中的代码
<select id="selc02" resultType="cn.tedu.domain.User">
select * from user where name = '${name}';
</select>
结果如下
4.总结
通常都使用#{},有预编译机制,可以防止sql注入,效率高。
但如果传递的是 表名 列名 关键字 等必须直接拼接到sql中的内容时,使用${},防止自动拼接单引号改变sql语义