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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)