源碼地址: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,否知會拿不到實體類的屬性