Mybatis 中 #{}和${} 的区别

一般可以使用#不要使用$.

使用#可以很大程度上防止SQL注入,提高系统安全。$则不可以。

排序使用order by时,使用$,order by ${columnName}.

#{}  占位符, 预编译处理。
${} 字符串替换,使用花括号内的字符串替换

  #{ }:解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。

例如,Mapper.xml中如下的 sql 语句:
select * from user where name = #{name};
动态解析为:
select * from user where name = ?;
一个 #{ } 被解析为一个参数占位符 ? 。
${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
例如,Mapper.xml中如下的 sql:
select * from user where name = ${name};
当我们传递的参数为 "Jack" 时,上述 sql 的解析为:
select * from user where name = "Jack";
预编译之前的 SQL 语句已经不包含变量了,完全已经是常量数据了。
综上所得, ${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。

posted @ 2019-04-05 19:15  lick  阅读(325)  评论(0编辑  收藏  举报