背景
使用范围查询时候,前端传进来一个id的集合,但这个集合不是我们想的list,而是一个string拼好的,比如"1,2,3,4"这样的一个字符串,我一看这个字符串发现不是和我们写sql时候in()括号这里年的格式一样吗,然后就偷了个懒,直接把字符串拼到了我们的mapper.xml中类似于这样:
<if test="userIds != null and userIds != '' "> userId = (#{userIds})</if>
然后测试发现如果只传一个可以找到的id发现是可以返回数据的,但是如果传一个可以找到的id再传几个不能找到的id,发现就那个有数据的id的数据也没返回,然后因为有sql打印,直接把sql粘出来,再把参数放上去,发现是可以查到对应数据的。
原因
这个原因应该是传字符串的问题,这个字符串可能会有空格
解决办法
这里建议不要像我上边那么些,如果是用in的时候我们尽量的使用这个标签去做,所以需要把传进来的字符串使用逗号做切割,切割成对应数组,这里使用spile这个函数而后面的xml建议改成这样:
<if test="userIds != null and userIds.length > 0 "> and us.user_id in
<foreach collection="userIds" item="userId" index="index" open="(" close=")" separator=",">
#{userId}
</foreach>
</if>