mybatis中${}与#{}的区别
程序员文章站
2022-04-22 10:35:44
...
mybatis中${}和#{}都可以在增删改查中使用
select * from student where name = ${name};
select * from student where name = #{name};
二者的意思相同,都可以用来查询数据库中的内容,且查询的结果相同,但是二者仍存在较大的差异:
#{}是通过占位符?的方式来实现查询功能的,而${}则只是简单的字符的替换功能来实现查询的功能,总结为以下的几点不同之处
(1)安全性的差异
因为${}是通过简单的字符替换来实现功能的,所以${}并不安全,很容易被注入的sql语句攻击,而#{}是通过占位符的方式来实现功能的,安全性较高
(2)${}可以进行运算的功能而#{}不能运算
update product set name='${name}', price=${price+100} where id = #{id}
比如将指定的商品价格加100时,就需要使用${}而不能使用#{}但是为确保安全性,where后一般使用#{}
(3)${}可以替换sql语句中的任意一个部分,但是#{}只能替换值
上条语句也可以改写为:
update ${tablename} set name='${name}', price=${price+100} where id = #{id}
通过给tablename赋值来修改指定表中的数据,但是此处的${}不能使用#{}来替换。
综上所述:针对非变量的部分,使用${},针对变量,如果值是在原有值得基础上进行计算得来一般使用${},否则使用#{},一般情况下,先要考虑使用#{}
上一篇: php实现过滤UBB代码的类_php技巧
下一篇: mybatis入门