使用mybatis时,尽管mybatis提供了foreach
操作来帮我们循环list,但是在in的时候,尽可能的在代码中将list的所有值转为以,
逗号分割的字符串,避免mybatis自己解析,提高效率。
但是这里有一个问题需要注意下:
<select id="queryByMap" resultMap="ListResultMap">
select * from user where id in (#{ids})
</select>
使用这个sql,由于#
将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,所以sql在执行时会出现这种效果:
select * from user where id in ('12,23,34')
这种sql执行出来之后,只会去查询12这一条结果。
改用${}
后,就可以避免这种问题。$
是将传入的数据直接显示生成在sql中
<select id="queryByMap" resultMap="ListResultMap">
select * from user where id in (${ids})
</select>
执行sql:
select * from user where id in (12,23,34)
网友评论