no getter for property named ' frch_item_0'的解决

问题描述

mybatis版本:v3.2.7

当批量分页查询数据,传入一个list参数时,通过mybatis的foreach语法处理, mybatis果断给你报错,十分任性!
代码:

<foreach collection="projectIdList" item="item" open="(" separator="," close=")">
     #{item}
</foreach>

异常:

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_item_0' in 'class xxx'
	at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:380) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:170) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:152) ~[mybatis-3.2.7.jar:3.2.7]
	at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:48) ~[mybatis-3.2.7.jar:3.2.7]

问题解决

可是代码应该没问题啊,别人就是这么写的,为什么就给我报错,难道人善被人欺?
于是研究了一下前人的代码,和自己的‘砖‘做了一下对比,发现,前人也是这么写的,没问题。
只不过前人的projectIdList入参,通过map传递进来的,我直接把list搞进来了,然后mybatis就死给我看了!!!
so,解决方案就是把这个list也让map包装了一下,然后再传进来,问题解决!!!

原因猜测

因为项目的原因,没有时间深挖原因,不过猜测可能是因为mybatis不支持list或优化的不好导致的,如果哪位大神了解,随时欢迎指正!

其他方式

其实对于这个问题,也百度了一下,发现网上的解决办法都是

<foreach collection="projectIdList" item="item" open="(" separator="," close=")">
     '${item}'
</foreach>

不用细看了,就是把# 改成 $ 并加引号。
这个有着明显的注入风险,果断弃用了。
况且,如果要用这种方式,我为啥还用foreach,直接

in ( ${projectIdStr} )

不就ok了?(当然,这里的id已经处理为逗号连接形式了)

转载于:https://my.oschina.net/wywct/blog/1930342

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值