ibatis到mybatis迁移

时间:2017-05-13 05:53:36

标签: syntax mybatis ibatis spring-mybatis

<isNotEmpty property="A"> is <if test='A != null and A != "" '>

的ibatis转换

上述转换适用于字符串。但是如何比较列表以及空检查以检查列表是否为“空”

我尝试了以下内容

<if test='List != null and List.size() &gt; 0'>
<if test='List != null and List.isNotEmpty()'>(because isEmpty() worked fine)
<if test='List != null and !(List.isEmpty())'>
<if test='List != null and !List.isEmpty()'>

但是如果我使用isEmpty()和null检查isNotEmpty的替代工作正常,我对此部分感到困惑

对此的任何解释都会很棒!

2 个答案:

答案 0 :(得分:0)

这是ONGL。操作数是java表达式。

为达到目的,最后一次似乎是最好的:

<if test='List != null and !List.isEmpty()'>

或null安全的util方法,例如:

<if test='org.apache.commons.collections4.CollectionUtils.isNotEmpty(List)'>

需要使用类完全限定名来替换import语句。

答案 1 :(得分:0)

您可以在myBatis中以多种方式验证条件列表是否为空。

从下面选择符合您要求的合适答案。

基本检查

<if test="list != null and list.size()>0">
    <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
    </foreach>
</if>

如果您在某些 SQL where statements 中执行相同操作,则可以执行以下操作。

WHERE 
    <choose>
        <when test="list==null || list.isEmpty()">
            1 = 0 <!-- a test returning false, to adapt depending on you DB vendor -->
        </when>
        <otherwise>
            ID IN <foreach item="item" collection="list" open="(" separator="," close=")">#{item}</foreach>
        </otherwise>
    </choose>

使用动态SQL

WHERE <*condition1*>
<dynamic>
<isNotEmpty prepend="AND" property="list">
    yourTbl.pk_ID IN            
    <iterate property="list" open="(" close=")" conjunction=",">                    
        #list[]#                    
    </iterate>
</isNotEmpty>
</dynamic>