关于mybatis和mysql的in查询

mysql的in查询缺陷:

比如说你的数据库的字段有‘1,2,3’,‘1,2’,‘1,3’,‘2,3’,‘1’,‘2’,‘3’

现在你的查询条件是‘2,3’,你会发现,不仅‘2,3’的被查出来,‘1,3’的也被查出来了

刚开始想到了一个办法,就是过来一个字段先拆成任意组合,比如说‘1,2,3’就拆成‘1,2,3’,‘1,2’,‘1,3’,‘2,3’,‘1’,‘2’,‘3’,然后查询条件由in变成=,这样当选项太多的时候效率太差。

另外一个从纯理论角度考虑的方法是:


这种方法我刚想出来的时候感觉妙极了,但是小组长说不适合我们系统

最后比较合理的处理方法就是,过来‘1,2,3’,我们拆成‘1’,‘2’,‘3’,再分别like。

用mybatis实现就是:

在service层中,把过来的‘1,2,3’拆分成数组:

String status = (String) paramMap.get("status");
		String openBusinessType = (String) paramMap.get("openBusinessType");
		String[] statusIn = null;
		String[] openBusinessTypeIn = null;
		if(StringUtils.isNotBlank(status)){
			statusIn = StringUtil.getArrayBySplitStr(status);
		}
		if(StringUtils.isNotBlank(openBusinessType)){
			openBusinessTypeIn = StringUtil.getArrayBySplitStr(openBusinessType);
		}
		paramMap.put("statusIn", statusIn);
		paramMap.put("openBusinessTypeIn", openBusinessTypeIn);

然后在mapper中:

<if test="openBusinessType !=null and openBusinessType!='' ">
	       PAI.OPEN_BUSINESS_TYPE IN 
	          <foreach item="item" index="index" collection="openBusinessTypeIn" open="(" separator="," close=")">
	          	#{item}
	          </foreach>
	    </if>
就酱。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值