invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法

今天碰到个问题,解决了很久才搞定,来记录下,希望可以帮助到大家
一直报错:invalid comparison: java.util.ArrayList and java.lang.String,一直没有考虑是我后来添加的
and ascriptionId != ’ ’ 所带来的问题.
下面错误源码:

这是一个根据list集合的查找数据的 sql,在接收list的时候加了判断 list != ‘ ’ “”,引起了集合与Stirng类型的比较,故报错

<select id="userlistPage" parameterType="page" resultType="pd">
...
<if test="ascriptionId != null and ascriptionId != ''">
        and u.ascriptionId in
        <foreach collection="pd.ascriptionId" index="index" item="item" open="('" separator="','" close="')">${item}</foreach>
...
</if>
  </select>

解决方案: ①将判断条件改为 : list.size >0

<select id="userlistPage" parameterType="page" resultType="pd">
...
<if test="ascriptionId != null and ascriptionId >0 ">
        and u.ascriptionId in
        <foreach collection="pd.ascriptionId" index="index" item="item" open="('" separator="','" close="')">${item}</foreach>
...
</select>

②甚至可以考虑这样:

<select id="userlistPage" parameterType="page" resultType="pd">
...
<if test="ascriptionId != null">
        and u.ascriptionId in
        <foreach collection="pd.ascriptionId" index="index" item="item" open="('" separator="','" close="')">${item}</foreach>
...
</select>

实际上我就是用②的方式。
另外要说明一点#{}和美元符号的用法区别,我这里简单赘述几句,美元符号是原样输入;而#{}是根据传参的类型决定。
我在这个地方就不能用#{},因为page里面没有那个get方法,总是报错: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘__frch_item_0’ in ‘class com.fh.entity.Page’!

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuchangjie0112/article/details/80688699
文章标签: mybatis配置文件
个人分类: 【bug】 【SSM】
上一篇遍历map的总结
下一篇Tomcat 部署项目的三种方法
想对作者说点什么? 我来说一句
相关热词

没有更多推荐了,返回首页

关闭
关闭
关闭