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

猜你喜欢

转载自blog.csdn.net/github_39325328/article/details/77043879