MyBatis数据库列名和封装结果集对象的属性名不同名并且没有配置结果集映射也能正确完成数据库和结果集对象之间的映射

学MyBatis的Mapper映射时,一个奇怪的问题困扰了我好些天,我明没有配置数据库和封装结果集对象之间的映射关系,并且数据库列名和封装结果集对象的属性名不同名,但是让我很惊讶,它们居然能完美一一映射!

下面是我实际的程序:

MyBatis数据库列名和封装结果集对象的属性名不同名并且没有配置结果集映射也能正确完成数据库和结果集对象之间的映射
MyBatis数据库列名和封装结果集对象的属性名不同名并且没有配置结果集映射也能正确完成数据库和结果集对象之间的映射
我直接用select * 查询,但是上面的程序却能完美映射,没有配置结果集映射,并且数据库列名和封装结果集对象的属性名不同名(当然后来我又知道了驼峰匹配,但是这里不是驼峰匹配导致的)。
后背感觉有些发凉。。。。
直到我今天学到了构造器映射,我才突然想起起那几天的“灵异bug”,茅塞顿开
!我马上去检查我的User类的构造器。
MyBatis数据库列名和封装结果集对象的属性名不同名并且没有配置结果集映射也能正确完成数据库和结果集对象之间的映射

果不出其然,我没有写无参数构造器!!!所以程序只能调用带参数构造器,并且我的select查询字段的顺序正好与构造器参数位置顺序对应上了,所以查询出来的数据作为参数按照查询顺序分别传递给了有参数构造器,所以实质上这是一个构造器映射。