关于java中mybatis返回bean有继承时属性赋值的问题!

问题遇到的现象和发生背景

项目中有个beanA,继承了beanB,A中有个字段是Code,B中有个字段是code,都有各自对应的get、set方法,其中A中Code是private修饰,B中code是public修饰,A无注解,B有@Component注解。

遇到的现象和发生背景,请写出第一个错误信息

mybatis中写的sql是select code from table,返回结果是beanA,结果debug发现,A.getCode为null,对象中code是有值的。

我的解答思路和尝试过的方法

已知mybatis中返回结果不区分大小写。
我开始认为是字段编译顺序问题,c在C前,所以先给code赋值。但是后来写了个测试类验证,测试类中是Code有值,跟现状正好相反,测试场景跟项目中唯一区别是测试的父类没有加@Component注解。
请解惑,这是什么原理?正确的结果应该是什么?

mybatis的反射工具类MetaObject,在调用setValue的时候,只要是你的属性名写对了,就能被正确映射并且赋值,发现数据没有,那就自己去写requestmap,确保属性名绝对正确

img


img

我查看了Component注解的解释和使用,不认为是这个引起的问题。猜想还是在于mybatis与类继承之间的问题。
“项目中有个beanA,继承了beanB,A中有个字段是Code,B中有个字段是code”——首先这个描述应该是A类里面有code和Code两个字段,其中code字段是继承自B类是这个意思吧?
“select code from table 出现:返回的A.getCode为null,对象中code是有值”——这里不是很清楚,code有值的话,getCode不会是null。因为sql不区分大小写,mybatis其实是通过反射获取字段内容(可以看一下mybatis的源码解释),这里是指向的A类中的code字段,而并非是Code字段。
你后面说的写了C测试类来验证我没看明白。。。
继承类的建议是不要使用有大小写会造成歧义的字段名。
以上只是我个人看法,如果还有疑问可以提出来,一起讨论。