首页 > 代码库 > Mybatis中#和$区别
Mybatis中#和$区别
零、引言
使用 #{name} 的时候,MyBatis会进行预编译,防止SQL注入的问题(官方话)
用一个通俗一点的例子来解释,比如有如下MyBatis的SQL语句
一、最正确的用法
<selectid="find">
... where name = #{name} order by ${columnName}
</select>
说明:如果name的类型为String值为LCF,columnName的类型为String值为 id
上述SQL翻译结果是:
...where name =‘LCF‘ order by id
1. #{name} 会根据传入数据的类型进行预编译,所以在生成SQL的时候自动加上了单引号。
2.${columnName} 会直接将结果替换进来。
二、反例说明
<selectid="find">
... where name = ${name} order by #{columnName}
</select>
说明:基本类型和值如上所述,该SQL翻译出来的结果是什么?
...where name = LCF order by‘id‘
仔细看LCF是没有单引号引起来的,反倒是 id 被单引号括起来了。
三、结论
#会进行预编译,防止SQL注入。
$会被直接进行字符替换,容易造成SQL注入。
#####################LCF###############2017-06-21#####################
Mybatis中#和$区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。