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’!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蹉跎之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值