首页 > 其他 > 详细

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

时间:2019-04-05 19:35:10      阅读:162      评论:0      收藏:0      [点我收藏+]

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

使用#可以很大程度上防止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 中。

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

原文:https://www.cnblogs.com/lick468/p/10659528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!