Mybatis动态SQL的另一个常见使用场景是对集合进行遍历(尤其是在构建 IN 条件语句的时候),可以将List、Set、数组等类型的数据作为参数。但是当List作为参数时,判断空需要特别注意。
例如:
<if test="struIds != null and struIds !='' ">
AND RELATION_ID IN
<foreach collection="struIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
上面的mapper将会报错,信息如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
解决办法是:应该将判断集合是否为空的代码尽量放在程序里,如果非要让Mybatis来处理的话,可以参考下面的方式:
<if test="struIds != null and struIds.size() > 0">
OR RELATION_ID IN
<foreach collection="struIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
或
<if test="struIds != null and struIds.size > 0">
OR RELATION_ID IN
<foreach collection="struIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
References:
1.How can I skip query if where_in clause is empty in MyBatis 3?
2.mybatis 3 foreach
最新评论
网飞没问题, 迪士尼+有解决方案么?
pp助手是安卓手机用的,根本下载用不来苹果
已解决
这样的话数据库里的结构为{"attachment":{"content":"xxx"}}, 要怎么才能变成{"content":"xxx"},从而使结构保持一致?
赞! make test不过的坑都写到的,谢谢楼主~
谢谢你
用了root用户还是一直502是怎么回事呢
student id 是空的