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


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

果不出其然,我没有写无参数构造器!!!所以程序只能调用带参数构造器,并且我的select查询字段的顺序正好与构造器参数位置顺序对应上了,所以查询出来的数据作为参数按照查询顺序分别传递给了有参数构造器,所以实质上这是一个构造器映射。
本文通过一个实例解析了在未配置显式映射关系下,MyBatis如何利用构造器映射实现数据库列名与对象属性的自动匹配。揭示了在未指定映射规则时,查询字段顺序与构造器参数顺序一致时的数据映射机制。
746

被折叠的 条评论
为什么被折叠?



