#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
#{}
1、#{}表示一个占位符号 相当于 jdbc
中的 ? 符号
2、#{}将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
${}
1、$ {}将传入的数据直接显示生成在sql中。
Mybatis中#{}与${}的区别
使用#{}可以有效的防止SQL注入,提高系统安全性。
在
JDBC
不支持使用占位符的地方,就只能使用${}
,典型情况就是 动态参数(在JDBC
能使用占位符的地方,最好优先使用#{}
)