MyBatis中无效的列类型,invalid comparison:java.util.ArrayList and java.lang.String 两大坑
使用Mybatis,入参是一个对象,这个对象有一个属性是map类型的。在动态sql中,我想把这个map里的value值给对应的条件赋值。
xml文件:
如此这样写,总是会报无效的列类型。网上查阅得知,无效的列类型是因为值为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 .........