There is no getter for property named 'xxx' in 'class java.lang.Long'

本文详细描述了在使用MyBatis进行查询时遇到的参数类型不匹配问题,包括异常解析、解决方案以及避免相关误区的经验分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Do not go gentle into that good night

这是昨天加班的时候遇到的一个问题,之前似乎遇到过不过可能当时没这么在意;

开发环境:

Eclipse 4.3  
jdk1.7.0_72  
apache-maven-3.0.4
apache-tomcat-7.0.53
spring-mvc-4.0
spring-beans-4.0
mybatis-3.2.8

问题是这样的,当时我想使用一个查询语句,方法入参是个Long类型的ID,通过入参查询得到一个结果集;
结果在查询的时候抛了下面的异常:
08:59:54.415 [http-bio-8097-exec-6] ERROR PLATFORMERROR - ( MyExceptionHandler, 24 ) 后台程序运行异常,e.getMessage:nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'cfgDetailId' in 'class java.lang.Long'e.getCause:org.apache.ibatis.reflection.ReflectionException: *
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'cfgDetailId' in 'class java.lang.Long'
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75) ~[mybatis-spring-1.2.2.jar:1.2.2]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371) ~[mybatis-spring-1.2.2.jar:1.2.2]
at com.sun.proxy.$Proxy20.selectList(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:198) ~[mybatis-spring-1.2.2.jar:1.2.2]
at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:119) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63) ~[mybatis-3.2.8.jar:3.2.8]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) ~[mybatis-3.2.8.jar:3.2.8]
at com.sun.proxy.$Proxy114.queryOfferBankMappingByCfgDeitalId(Unknown Source) ~[na:na]
at com.jfbank.cicada.service.offermanager.impl.OfferManagerServiceImp.queryMngByPrimaryKey(OfferManagerServiceImp.java:176) ~[OfferManagerServiceImp.class:na]
at com.jfbank.cicada.controller.offer.manager.OfferManagerController.drawNumPlanEdit(OfferManagerController.java:100) ~[OfferManagerController.class:na]

看到这个异常的第一反应是自己在mapper中接收参数的变量写错了,来回查看了一遍发现没问题,于是又想是否是bean中配置的getsetter名称的问题,再看无果后无奈上网一查,发现果然有人遇到了相同的问题,不过他们的入参大部分是String类型的;
有人提到这个问题引发的原因是因为Mybatis默认采用ONGL表达式读值导致的;

解决方案很简单,在java代码中使用@Param 标签指定传入参数名称即可;

public String queryMethodName(@Param(value="varName") Long varName);

至于其他哥们儿说的什么用“parameter_“代替变量名什么的个人感觉不太靠谱,而且我也确实试过发现没用;所以还是这样解决比较好;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值