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注入。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值