zoukankan      html  css  js  c++  java
  • mybatis中的动态语句中多条件or如何书写

    1.说明

      sql如下:

    SELECT t.contract_id FROM `t_plm_contract_monitor` t WHERE 1=1 ANd (t.whole_id_one in ( 77 ) or t.whole_id_five in ( 77 ) or t.whole_id_six in ( 505602294 ))
    

      说明:

    t.whole_id_one,
    t.whole_id_two,
    t.whole_id_three,
    t.whole_id_four,
    t.whole_id_five,
    t.whole_id_six

    这些参数可能存在,也可能不存在,就要动态的平装语句了。

    2.做法【部分代码进行说明】

              <if test="(model.wholeIdOneList != null and model.wholeIdOneList.size()> 0) or (model.wholeIdTwoList != null and model.wholeIdTwoList.size()> 0) or
                       (model.wholeIdThreeList != null and model.wholeIdThreeList.size()> 0) or (model.wholeIdFourList != null and model.wholeIdFourList.size()> 0) or
                       (model.wholeIdFiveList != null and model.wholeIdFiveList.size()> 0) or (model.wholeIdSixList != null and model.wholeIdSixList.size()> 0)">
                        and (
                    </if>
                    <if test="model.wholeIdOneList != null and model.wholeIdOneList.size()> 0">
                        t.whole_id_one in
                        <foreach collection="model.wholeIdOneList" open="(" close=")" item="departmentId" separator=",">
                            #{departmentId,jdbcType=BIGINT}
                        </foreach>
                    </if>
                    <choose>
                        <when test="(model.wholeIdOneList == null or model.wholeIdOneList.size()==0) and (model.wholeIdTwoList != null and model.wholeIdTwoList.size()> 0)">
                            t.whole_id_two in
                            <foreach collection="model.wholeIdTwoList" open="(" close=")" item="departmentId" separator=",">
                                #{departmentId,jdbcType=BIGINT}
                            </foreach>
                        </when>
                        <when test="(model.wholeIdOneList != null and model.wholeIdOneList.size()> 0) and (model.wholeIdTwoList != null and model.wholeIdTwoList.size()> 0)">
                            OR t.whole_id_two in
                            <foreach collection="model.wholeIdTwoList" open="(" close=")" item="departmentId" separator=",">
                                #{departmentId,jdbcType=BIGINT}
                            </foreach>
                        </when>
                    </choose>

    。。。。。。。

      首先:根据值是否存在,将是否有这段逻辑的最外层的括号加进来

           然后,使用test进行判断list,如果前面的都不存在条件,第n个存在,则不需要加上or连接符

                      如果已经不是第一项了,则需要加上or。

    3.对choose的说明

      在比较规范的标签里,存在when和otherwise。

           但是有些场景下是不需要的,则可以不写otherwise。经过验证是没有问题的。



  • 相关阅读:
    SYSTEM32 下的几乎所有文件的简单说明
    Windows2000 下管理员账户真的不安全
    Windows2000 下管理员账户真的不安全
    SYSTEM32 下的几乎所有文件的简单说明
    看看你电脑里面有多少垃圾文件浪费内存
    巧妙利用三招保护局域网中的 IP 地址
    Sun推出OpenSolaris 为技术立异注入生机
    高质量C /C编程指南附录B :C /C试题和答案
    高质量C /C编程指南第8章 C 函数的初级特性
    俄罗斯邮政将迁徙到Linux 有关机构已入手入手测试Linux
  • 原文地址:https://www.cnblogs.com/juncaoit/p/12342555.html
Copyright © 2011-2022 走看看