Mybatis之$和#的区别-yellowcong

Mybatis中的$#两个传参方式的区别,$是在执行SQL前,将SQL拼接号,这种场景用于传递数组的情况,还有动态GROUP BY的情况,#是将引用参数传递进去,#这种方式可以解决到SQL注入的问题

Seasar中SQL参数注入

我们之前学过的Seasar框架中,有一个同Mybatis类似的框架S2Dao,里面对于 Sql参数的注入也提供了两种方式,/$xx//*xx*/,这两个传参方式不同的地方是,/$xx/会在执行PreparedStatement的时候,就将/$xx/引用的参数变成字符串,连接起来,/*xx*/的参数都是用引号处理的。这个Seasar框架在小日本用得是比较多的,做过java对日开发的,都基本上接触到这个

Mybatis中参数注入

我比较了一下Mybatis和S2Dao项目,发现设计中有很多类似的地方,在Mybatis中,${xx} 和#{xx}同S2Dao类似,${xx}引用的参数在执行PreparedStatement的时候,就会将字符串连接起来了,#{xx}这个就是通过双引号的方式来连接数据

比如如下的SQL

// # 符号的情况
SELECT * FROM USER WHERE AGE = #{age} //到PreparedStatement 执行的时候,执行的SQL,会将参数传进去 SELECT * FROM USER WHERE AGE = ? // $符号的情况 SELECT * FROM USER WHERE AGE = ${age} //到PreparedStatement 执行的时候,执行的SQL会将参数拼接好 SELECT * FROM USER WHERE AGE = 16 

转载于:https://my.oschina.net/u/1987703/blog/1617625

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值