源码地址:https://github.com/mybatis/mybatis-3/
仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/13-resultMap
ResultMap解析
分为两部分:解析和使用
1.解析
-
解析XML的时候单独解析所有的resultMap标签,封装成ResultMap对象存入configuration中
-
解析XML中的SQL语句,封装MappedStatement对象,这里会根据SQL的返回类型是resultMap还是resultType做处理。如果是resultMap,就从configuration中取出ResultMap对象设置到MappedStatement中;如果是resultType,就将其封装成一个ResultMap对象设置到MappedStatement中。
2.使用
- 执行完的结果集会被ResultSetWrapper包装,有两个属性mappedColumnNamesMap和unMappedColumnNamesMap,其实就是如果执行的这个SQL如果是resultMap,mappedColumnNamesMap有值;如果是resultType,那么unMappedColumnNamesMap有值。
- 做结果集映射,如果是resultMap,执行的是DefaultResultSetHandler#applyPropertyMappings方法,根据resultMap的映射一个个设置值;如果是resultType,执行的是DefaultResultSetHandler#applyAutomaticMappings方法,进行自动映射,这里metaObject.findProperty(propertyName, true);
使用驼峰要设置为true,否知会拿不到实体类的属性