mybatis where in 条件大于1000特殊处理

在mybatis中,当 where in 条件大于1000时可以做的特殊处理:

<select id = "queryBranchPage" >
   select  project_id, branch_name from gitlab_branch m
   <where>
       <if test="projectIds != null and projectIds.size() != 0">
           and m.project_id in
             <trim suffixOverrides = "or m.project_id in()">
                   <foreach collection ="projectId" item = "id" index = "index" open="(" colse = ")">
                           <if test="index != 0">
	                           <choose>
                                   <when test="index % 100 === 999">
                                           ) or m.project_id in (
                                   </when>
                                   <otherwise>
                                        ,
                                   </otherwise>
	                           </choose>
                           </if>
                              #{id}
                   </foreach>
             </trim>
       </if>
   </where>
</select>

1.通过trim标签的属性suffixOverrides:去掉后缀匹配上的东西,例子中后缀如果是or m.project_id in()与suffixOverrides属性值刚好匹配,则去掉or m.project_id in()
2.index集合迭代的位置是从0开始, 是为了in条件中开头多余的一个逗号,如果没有,sql则是:m.project_id in(**,**1,2,3…)
3.foreach 元素的属性主要包括:
3.1.item:集合中每一个元素或者该集合的对象,支持对象点属性的方式获取属性#{obj.filed}或者#{value}
3.2.index:循环的下标,从0开始
3.3.open:表示以什么开始
3.4.separator:每次进行迭代之间以什么符号作为分隔符
3.5.colse:表示以什么结束
4.trim标签四个属性及其作用:
4.1.prefix:添加前缀
4.2.prefixOverrides:删除前缀
4.3.suffix:添加后缀
4.4.suffixOverrides:删除后缀
5.sql结果:
当大于999,sql 则是: m.project_id in(1,2,3…998) or m.project_id in(999,1000,…1998) …
当小于999,sql 则是: m.project_id in(1,2,3…)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值