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 动态参数时,用$而不是#;
避免用#导致多了''
Mybatis中#和$的区别
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...