Osheep

时光不回头,当下最重要。

Mybatis中#和$的区别

tips:
能用#的就别用$.
Mybatis中进行参数传递,可以使用两种方式#{}或者${}
其中,#{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符;一个 #{ } 被解析为一个参数占位符 ?
而,${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换
${ } 的变量的替换阶段是在动态 SQL 解析阶段,而 #{ }的变量的替换是在 DBMS 中。
简单理解
用#{} 这种取值是编译好SQL语句再取值
而${} 这种是取值以后再去编译SQL语句
所以,#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:
order by #{id},如果传入的值是111,那么解析成sql时的值为order by ‘111’
$将传入的数据直接显示生成在sql中。如:order by ${id},如果传入的值是111,
那么解析成sql时的值为order by 111
因此,#方式能够很大程度防止sql注入。
$方式无法防止Sql注入。
$方式一般用于传入数据库对象,例如传入表名.
以及MyBatis排序时使用order by 动态参数时,用$而不是#;
避免用#导致多了”

点赞