
上圖是DefaultSqlsessio中的類中,可以看到執行查詢結果的是否,是Configuration中獲取的MapperStatement物件,那麼什麼時候向Configuration中註冊這個的呢?答案是掃描Mapper介面時候,這其實是第二篇中沒有分析的,現在單獨拿出來分析一下,

上面這段程式碼是MapperRegistry這個類中註冊的Mapper的代理工廠,如果對於Mapper的載入過程不清楚的,可以看之前分析的
mybatis-plus原始碼解析(二)----基於@MapperScan註解掃描載入Mapper, 這裡是程式碼中的物件是MapperAnnotaionBuilder,可以看出是的通過註解的方式註冊MapperStatement物件,下面看一下MapperAnnotaionBuilder這個物件,是怎麼解析

首先可以看到初始化這個這個類的時候,預設會解析的註解有八種,分別是@Select, @Insert @Update,@Delete等,接下來主要看一下parse函式的解析過程

如果當前類沒有載入過,則首先載入器xml的資源,然後將這個資源加入到已經載入的快取中去,然後是用MapperBuilderAssistant設定當前名稱空間,接著處理快取和快取引用,最重要的就是是parseStatement,主要解析註解屬性。生成SqlSource,並組裝成MapperStatement的,注入的configuraion。

這個方法首先獲取引數型別和sql語法驅動類,並且註解屬性構造出SqlSource,
這裡可以看出MapperStatementId其實類全名+方法的名組成的,接下來Mapper介面的方法上可以@Optional這個註解來選擇使用key生成器,以及管理快取更新策略等。

在看一下@ResultMap這個註解的作用,主要是對映結果Map的,這些做完了,這些做完,接下來最重要的是MapperBuilderAssistant類呼叫addMappedStatement方法,向Configuration中註冊MapperStatement,

這裡處理MapperStatement很簡單,只是呼叫了MappedStatement.Builder這個建造者構造MapperStatement,並向Configuration中註冊。
此處本來一直用一張圖來說明的這個流程,但是好像暫時沒有找到好用的畫圖工具。以後再補上。
總結:
今天主要分析mybatis中環境配置中,MapperSatement的註冊的主要過程。
下一次主要mybatis處理查詢結果集的型別轉換。