MyBatis中无效的列类型,invalid comparison:java.util.ArrayList and java.lang.String 两大坑

    使用Mybatis,入参是一个对象,这个对象有一个属性是map类型的。在动态sql中,我想把这个map里的value值给对应的条件赋值。

   xml文件:

MyBatis中无效的列类型,invalid comparison:java.util.ArrayList and java.lang.String 两大坑

MyBatis中无效的列类型,invalid comparison:java.util.ArrayList and java.lang.String 两大坑

如此这样写,总是会报无效的列类型。网上查阅得知,无效的列类型是因为值为null,所致。但我所传值taacountid不为null,何故。于是像一只无头苍蝇寻找答案。

寻找错误的时候修改为:<if test = " ...... properties.taacountid !=  ‘’ "   后,又报:invalid comparison :java.util.ArrayList and ......无效的比较异常。

找答案的时候,却又遇到了各种问题,明明最开始的时候,就已经接触到了问题的关键点(是因为值为null所致)。所以网上寻找答案的时候,要仔细思考,聪明的类比。

总结:

1,使用mybatis,当入参为对象,对象中有个map类型的属性。获取该map的value作为动态sql的条件时,该map只要有一个键值对为null,就会报异常。(当入参直接是map时,未尝试)

2,xml配置文件中,谨慎书写 :<if test = " xxx  != ‘’ " ...........   容易报invalid comparison:java.util.ArrayList .........