Mybatis报错There is no getter for property named 'id' in 'class java.lang.String'

昨天运行公司项目的一个模块时,后台报了一个错:

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.String'

一看是某个属性没有get方法,可是再一看不对劲啊,java.lang.String,大概意思是String类中属性为id的getter,怎么id属性成String类中的了???

看下查询语句:

SELECT 后面没有字段,我删除了,不影响我们讨论的问题。这个查询只传入了一个参数,是String类型的,并且where标签中增加了一个if test的判空,其实问题就是在这里,当我们传入一个String对象参数,Mybatis会把id当做String对象的一个属性,这很显然是有问题的,String不是我们定义的类。说白了,Mybatis认为id是String类的一个属性,但String中并没有id这个属性。

两种解决方法:

一、if test中的id用_parameter替换,而实际的语句不需要修改and a.id = #{id},因为Mybatis当只传入一个参数时#{ } 中的内容没有要求。

二、在Mapper中给出入参设置名称,例:public ... getById(@Param("id") String id);这样修改后我们前面的写法就不会报错了。

额外一种解决方法:

如果该字段必定不为空的话,可以不使用if标签,这样and a.id = #{id} 这样的写法也不会报错。

希望能帮助到大家,如有问题,请指出,不胜荣幸...

你可能感兴趣的:(Mybatis报错及处理,Mybatis,后台)