mybatis中写sql,使用in()遇到的问题

错误演示:

<select id="test" parameterType="java.lang.String" resultMap="BaseResultMap">

select * from temp where id_ in(#{ids}) 

</select>

注意:演示代码中传入的参数格式是:1,2,3,4    这条sql在数据库中可以正常运行,并查出了相关的结果集。但是写在mybatis中,就不能查询出对应的结果。

错误原因:因为mybatis在解析#{}时,把整个#{}解析为一个占位符,虽然传入的参数用“,”号分隔开了,还是被mybatis解析成了一个整体


解决方案:

<select id="test" parameterType="java.lang.String" resultMap="BaseResultMap">

select * from temp where id_ in(${_parameter}) 

</select>

注意:当对应的Mapper接口方法只传入一个参数时,且没有使用@Param注解对参数命名时,我们可以通过${_parameter}形式直接获取传来的参数

问题分析:${}会将传递的参数直接赋值到sql中,但是很容易被sql注入,所以${}接收的参数尽量是数据库中查出来的,而不是页面传递来的!


此外也是看到了一篇相关的博客,对mybatis参数传递和#{} ${}的区别写的很细致,同时感谢作者的分享精神。

http://blog.csdn.net/u010643307/article/details/70148702

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值