【mybatis源碼學習】mybatis的sql語句映射

1、重要的接口和類

org.apache.ibatis.scripting.LanguageDriver //語言驅動
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver //xml語言驅動,Configuration默認的語言驅動(在new configuration對象時,注入的語言驅動)
org.apache.ibatis.scripting.defaults.RawLanguageDriver//未加工的語言驅動sql

org.apache.ibatis.mapping.SqlSource //將mapper.xml中的sql語句解析成該對象
org.apache.ibatis.scripting.xmltags.DynamicSqlSource //動態sql的實現類,內部依賴了sql樹sqlNode
org.apache.ibatis.scripting.defaults.RawSqlSource//不徹底的RawSqlSource
org.apache.ibatis.builder.StaticSqlSource//靜態的sqlSourcesapache

org.apache.ibatis.scripting.xmltags.SqlNode //動態sql節點app

 

2、sql樹

一、sql語句的構建,是基於建造者模式。

org.apache.ibatis.scripting.xmltags.XMLScriptBuilder//構建sql語句ui

二、sql樹

 

3、重要接口的做用

一、LanguageDriver

  • 製造:SqlSource3d

  • 製造:ParameterHandlerxml

二、SqlSource

  • 製造:BoundSql對象

三、SqlNode

  • 處理本身類型的sql節點,並根據當前請求的參數生成本身類型sql片斷,拼接至DynamicContextblog

四、DynamicContext

  • 處理當前請求,將不一樣類型SqlNode處理完的sql片斷,拼接成一個完整的sql語句接口

4、生成sql語句

第一階段

在項目初始化的時候,解析mapper.xml文件ip

基於構建者模式,使用XMLStatementBuilder生成MappedStatement

MappedStatement依賴DynamicSqlSource或RawSqlSource(依賴LanguageDriver生成)

 

第二階段

在項目運行過程當中的時候,從MappedStatement中獲取DynamicSqlSource或RawSqlSource

基於構建者模式,使用SqlSourceBuilder生成StaticSqlSource,再從StaticSqlSource中生成BoundSql

相關文章
相關標籤/搜索