问题描述:
前几天执行mybatis时报Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String异常,记了笔记,今天同事又出现同样异常,这里记录一下
delTraceDTO.startTime这里是一个List<String>集合,我们通常在mybatis中做字符串判断经常会写成
<if test="delTraceDTO.name != null and delTraceDTO.name!= ''" ></if> 假设name是一个String字段,结果由于自己粗心大意,马马虎虎,写顺手了,抡了一个集合就上去判空了,结果就悲剧了
<if test="delTraceDTO.startTime != null and delTraceDTO.startTime != ''" >
and DATE_FORMAT(create_time, '%Y-%m-%d') in
<foreach collection="delTraceDTO.startTime" item="item" open="(" close=")" separator="," >
#{item}
</foreach>
</if>
异常信息:
Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
### The error may exist in file [D:\shop-2\jdyshop\entity\target\classes\mapper\mdc\TraceMapper.xml]
### The error may involve com.jdy2018.shop.entity.dao.mdc.TraceMapper.delTraceGoods
### The error occurred while executing an update
### Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.ArrayList and java.lang.String
正确写法:
<if test="delTraceDTO.startTime != null and delTraceDTO.startTime.size() > 0" >