${}和#{}的作用
Mybatis在项目中起到的是项目和数据库的交互以及sql语句的管理,sql语句的集中管理,方便开发人员对sql语句的复用和管理,但是既然需要复用,就表明sql语句本身是进过抽象的,抽象的目标就是参数,在不同的用途就需要传入不同的参数${}和#{}就是用来向已经定义好的sql语句传入参数的。
${}和#{}的区别
#{} 这种取值是变异号sql语句之后再取值,添加的值有' '包裹
${} 这种取值是取值之后再去编译sql语句,添加的值没有' '包裹
#{}的使用案例
<select id = "selectUser" parameterType="String" resultType="com.mybatis.po.MyUser">
select * from user where account = #{account} and password = #{password}
</select>
上述sql语句经过编译之后的结果是
select * from user where account = '122221122' and password = '1515131811515'
${}的使用案例
<select id = "selectUser" parameterType="String" resultType="com.mybatis.po.MyUser">
select * from user where account = ${account} and password = ${password}
</select>
上述sql语句经过编制之后的结果是
select * from user where account = 122221122 and password = 1515131811515
${}和#{}的使用场景
-
${} 添加参数的时候值的两边没有‘’,可以使用在字段和表名的参数注入
-
#{}添加参数的时候值的两边有'',可以使用在查询条件对应值的注入
${}导致的sql注入的情况
上面案例中的sql语句,如果password传入的参数值是‘12252152521 or 1=1’
select * from user where account = 122221122 and password = 12252152521 or 1=1
#{}防止sql注入的情况
select * from user where account = 122221122 and password = '12252152521 or 1=1'
来源:CSDN
作者:founder_forever
链接:https://blog.csdn.net/founder_forever/article/details/104835954