mybatis里面动态传参${} 和#{}的区别

他们的区别一句话概括:#{name}对数据 加上 双引号,${name} 直接显示数据。

1、#{name}把传入的参数视为字符串,会预编译,

例子:select * from a where name = #{name}  入参name=哈哈

其实相当于 select * from a where name ="哈哈",

2、${name} 不会进行预编译,

例子:select * from a where name = #{name} ,入参name=哈哈,

其实相当于 select * from a where name =哈哈,

什么时候用${}  什么时候用#

 (1)当你入参传过来的是一个字符串你可以用# 

 (2) 入参是一个数值 可以用${}

 (3) MyBatis排序时使用order by 动态参数时,用$而不是#

  (4)动态传表名字的时候,用$而不是#(select * from ${tableName} )

建议:能用#{}尽量用#  #的优势就在于它能很大程度的防止sql注入,而$则不行

例子:如果前台查询调用查询a表数据sql

mybatis sql:select * from a where name=#{name} and state= #{state},如果前台传来的名称是“哈哈”,state字段是 “0 or state=1”,用#的方式就不会出现sql注入,而如果换成$方式,sql语句就变成了 select * from a where name=哈哈 and state= 0 or state=1。这样的话就形成了sql注入。

猜你喜欢

转载自blog.csdn.net/qq_37557563/article/details/107163315
今日推荐