在mybatis的xml中增加一个list操作是,发现一个错误,如下:
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
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:76)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:399)
at com.sun.proxy.$Proxy31.selectOne(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:165)
在看了半天自己写的sql后,根据网上这篇文章:
https://blog.csdn.net/www_wangzheguilai/article/details/77199234
发现了问题根源,特此记录一下。
因为:
我传输的是一个List<int>
但是我的写法是:
<if test="newOpnScoCardScoList != null and newOpnScoCardScoList.size != '' ">
and (
<foreach collection="newOpnScoCardScoList" item="item" index="index" separator="or" >
t3.New_Opn_Sco_Card_Sco = #{item,jdbcType=INTEGER}
</foreach>
)
</if>
这样导致 muybatis默认该list是List<String> 了,正确写法是
<if test="newOpnScoCardScoList != null and newOpnScoCardScoList.size > 0 ">
and (
<foreach collection="newOpnScoCardScoList" item="item" index="index" separator="or" >
t3.New_Opn_Sco_Card_Sco = #{item,jdbcType=INTEGER}
</foreach>
)
</if>
这样就可以了。
一步一个脚印。。。