MyBatis报错分析There is no getter for property named 'XXX' in 'class XXX'
前言
今天遇到一个比较常见的问题,但因为出错原因不止一种,所以还是可以总结一下的。
问题描述
当我们使用Mybatis时可能会经常看到类似这样的报错信息There is no getter for property named ‘XXX’ in ‘class XXX’,意思是没有找到对应字段的getter方法。这个报错很大可能是在使用动态SQL中的<if>标签中的test判断时发生的,因为这里判断非空默认调的是对应字段的Getter方法。
问题分类
如果在Mapper中我们传入的参数是自定义对象类型,而属性‘XXX’是对象的属性时,一般就是因为实体类中变量名和Mapper中不一致导致的,这个时候就要检查是否是变量名拼写错误或是没有加@Data,@Getter等注解同时又没有自己添加Getter方法。
如果传入的参数是String,或是Integer这一类的且只有一个的时候,不应该使用变量名而应该使用_parameter代替变量名,这是因为此时如果使用变量名,并不是在你定义的对象里找Getter方法,而是在String或Integer里找,当然是找不到的。