MyBatis报错分析There is no getter for property named 'XXX' in 'class XXX'

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里找,当然是找不到的。