Mybatis 参数List是否包含某个值

前言

 mybatis 是国内主流的数据访问层映射框架,但有时过滤条件的判断让人头大,今天就来研究一下传参对象里包含list<T>,且 list 的值与库里无映射

需求样例

  List<T>    [0,1,2,3] ----->[null,1,2,3]
  当含有List含有0,in(0)必定查不出来 ,库里映射null
  总之字段需要转化怎么处理?
  修改库成本太大!

解决方案

 方案一: 利用list.contains() 函数 泛型一致,不然判断不生效
 <if test="paramInfo.markIds != null and paramInfo.markIds.size > 0">
     <choose>
        <when test="paramInfo.markIds.contains(0L)">
          and (mark_id is null or mark_id in
            <foreach collection="paramInfo.markIds" item="markId"  open="(" separator="," close=")">
                #{markId }
            </foreach>
          )
        </when>
         <otherwise>
             and mark_id in
             <foreach collection="paramInfo.markIds" item="markId"  open="(" separator="," close=")">
                 #{markId}
             </foreach>
         </otherwise>
     </choose>

 </if>

方案二:
   对象加额外字段markZero
   利用用Java代码处理,当包含值时存入该字段
   对于sql语句做双重判断
<if test="paramInfo.markIds != null and paramInfo.markIds.size > 0">
     <choose>
        <when test="paramInfo.markZero==0">
          and (mark_id is null or mark_id in
            <foreach collection="paramInfo.markIds" item="markId"  open="(" separator="," close=")">
                #{markId }
            </foreach>
          )
        </when>
         <otherwise>
             and mark_id in
             <foreach collection="paramInfo.markIds" item="markId"  open="(" separator="," close=")">
                 #{markId}
             </foreach>
         </otherwise>
     </choose>

 </if>
   
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值