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

1. #{}形式

Mybatis会将SQL语句中的#{}转换为问号占位符。

例如,现在有如下sql语句,根据员工Id查询员工信息。

select emp_id, emp_name, emp_salary 
from t_emp where emp_id = #{empId}

那么,Mybatis会先用占位符来代替#{},也就是将上述sql语句转为:

select emp_id, emp_name, emp_salary 
from t_emp where emp_id = ?

之后,直接用参数id的值将占位符?替换掉,得到最终执行的sql语句。

2. ${}形式

${}形式传参,底层Mybatis做的是字符串拼接操作。

例如,现在有如下sql语句,根据员工Id查询员工信息。

select emp_id, emp_name, emp_salary 
from t_emp where emp_id = #{empId}

Mybatis会把sql语句中不含参数的字符串与参数字符串拼接,相当于:

'select emp_id, emp_name, emp_salary 
from t_emp where emp_id = ' + '参数'

得到最终执行的sql语句。

3. 总结

  • 通常不会采用${}的方式传值,因为其无法抵御sql注入攻击。
  • 如果列名或者关键字也需要动态参数传入,那么#{}无法在这种场景下使用,因此只能使用${}。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值