mybatis使用in时只查询出第一值的结果问题解决

2019-03-12  本文已影响0人  春苟哈皮

使用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)

上一篇 下一篇

猜你喜欢

热点阅读