在程序中使用mybatis与直接执行sql结果不同?

背景

使用范围查询时候,前端传进来一个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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值