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

本文详细介绍了Mybatis中${}和#{}的作用,它们的区别在于${}是在编译前替换,不处理SQL注入,而#{}在SQL编译后替换并自动进行SQL注入防护。#{}适合用于查询条件的值注入,${}适用于字段或表名的动态注入,但需注意SQL注入风险。

 

${}和#{}的作用

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'
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值