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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuchangjie0112/article/details/80688699

今天碰到个问题,解决了很久才搞定,来记录下,希望可以帮助到大家
一直报错: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’!

阅读更多
想对作者说点什么?
相关热词

博主推荐

换一批

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