请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

测试问题

测试queryShopCount方法出现一个很奇怪的现象,如果去掉方法中的参数注解@Pram(“shopCondition”),如下第二行的写法:
int queryShopCount(@Param(“shopCondition”) Shop shopCondition);
int queryShopCount(Shop shopCondition);
测试运行就出错,错误提示如下:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘shopCondition’ in ‘class com.imooc.o2o.entity.Shop

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘shopCondition’ in ‘class com.imooc.o2o.entity.Shop

xml文件代码如下:

select count(1)
from tb_shop s
left join tb_area a
on a.area_id=s.area_id
left join tb_shop_category c
on s.shop_category_id=c.shop_category_id


and s.shop_name like %+#{shopCondition.shopName}+%


and s.shop_category_id=#{shopCondition.shopCategory.shopCategoryId}


and s.area_id=#{shopCondition.area.areaId}


and s.enable_status=#{shopCondition.enableStatus}


and s.owner_id=#{shopCondition.owner.userId}


请问这是什么原因呢?

正在回答

插入代码

1回答

翔仔 2020-04-14 01:46:48

你如果没有指明参数值是啥,mybatis就会按照它自己的理解,借助ASM去映射名字,然后去查找类型,就会报这样的异常,上面说的是源码的实现,感兴趣可以了解一下,所以这才是@Param存在的意义

0 回复 有任何疑惑可以回复我~
  • 提问者 慕沐8221787 #1
    为什么只有一个参数,也需要@Param注解呢?不是说一个参数是不需要注解的吗?另外,你回答中提到的ASM
    是什么概念?
    回复 有任何疑惑可以回复我~ 2020-04-14 08:53:12
  • 翔仔 回复 提问者 慕沐8221787 #2
    你的第二个问题,ASM是字节码生成器,具体可以看看这个 https://dinghuiye.online/article/asm-build-mybatis-mapper-class
    第一个问题,因为你的参数名字和类型名字不一致了,所以它解析不出来,而且原因就是因为第二个问题
    回复 有任何疑惑可以回复我~ 2020-04-14 21:59:08
  • 提问者 慕沐8221787 #3
    我把Mybatis文档认真地看了一下,已经找到了答案,但是与老师的解释不一致,谢谢!
    回复 有任何疑惑可以回复我~ 2020-04-14 22:39:36
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信