<isNotEmpty property="A"> is <if test='A != null and A != "" '>
上述转换适用于字符串。但是如何比较列表以及空检查以检查列表是否为“空”
我尝试了以下内容
<if test='List != null and List.size() > 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的替代工作正常,我对此部分感到困惑
对此的任何解释都会很棒!
答案 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>