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

狂风中的少年 提交于 2020-03-17 07:27:53

 

${}和#{}的作用

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'
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!