#{}
:表示一个占位符,相当于预编译对象的SQL中的?
- 可以有效防止SQL注入;
- Mybatis会自动进行参数的Java类型和JDBC类型转换;
#{}
写的是属性名称。如果只有一个参数并且是简单类型,里边可以是value或者其它名称
映射配置文件中的SQL:select * from user where username like #{username}
单元测试中传递实参:%王%
最终执行的SQL:select * from user where username like ?
参数值:%王%
-------------------------------------------------------------------------------------------------------------
${}
:表示拼接SQL串,相当于把实际参数值,直接替换掉${}
-
不能防止SQL注入
-
Mybatis不进行参数的Java类型和JDBC类型转换
-
${}
写的是属性名称。如果只有一个参数并且是简单类型,${value}
中只能是value,不能是其它名称(Mybatis3.4 里存在这种现象,3.5后修改没有了)
映射配置文件中的SQL:select * from user where username like '%${value}%'
单元测试中传递实参:王
最终执行的SQL:select * from user where username like '%王%'