【Mybatis學習】Mybatis的解析和運行簡要介紹

Mybatis運行原理簡要分析

1.SqlSessionFactory的構建

SqlsessionFactory主要用來創建SqlSession,爲了構建SqlsessionFactory,需要提供配置文件以及相關參數。
構建主要分爲2步:
  1. 解析配置文件並生成Configuration對象。
  2. 通過Configuration創建SqlSessionFactory。

1.1構建Configuration

它的作用如下:
  1. 讀取配置文件,包括基礎配置的XML和映射器的文件。
  2. 初始化基礎配置信息,如properties全局參數、settings設置、typeAliases別名、typeHandler類型處理器、ObjectFactory對象、plugin插件、environment環境、Mapper引射器、數據庫標識。
  3. 提供單例,爲後續創建SessionFactory服務並提供配置的參數。
  4. 執行一些重要的對象方法,初始化配置信息。

1.2映射器的組成

一般由3部分組成。
  1. MappedStatement,保存映射器的一個節點(select/insert/delete/update)。包括配置的SQL、SQL的id、緩存信息、resultMap、resultType、parameterType、languageDriver等。
  2. SqlSource,提供BoundSql對象的地方,是上面部分的一個屬性。是一個接口,用來組裝SQL。
  3. BoundSql,用於建立SQL和參數。
其中BoundSql提供3個主要的屬性:
  1. parameterMappings:一個List用來描述參數信息,比如屬性、名稱、表達式、javaType、jdbcType、typeHandler等。並與PreparedStatment結合來設置參數。
  2. paeameterObject:用於傳遞簡單對象、POJO、Map、@Param註解的參數。傳遞簡單對象,如int、String、double,將他們包裝爲對應的對象傳遞;POJO、Map報出不變;傳遞多個參數是,如有@Param註解則變爲Map<String,Object>對象,類似於如下所示,可以使用#{param1}或者#{1}去引用第一個參數。
    {"1":p1,"2":p2,...,"param1":p1,"param2":p2,...}
    如果使用@Param註解,則會把註解中的字段作爲Map對象中的key。

  3. sql,即在映射器中編寫的每條SQL。

1.3構建SqlSessionFactory

		String resource = "mybatis.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);

2.SqlSession的運行

2.1映射器的動態代理

Mapper映射過程不僅利用了動態代理模式,還有命令模式。

2.2SqlSession的對象

通過執行以下4個步驟來完成數據庫操作和結果返回。
  1. Executor執行器,調度以下3種對象來執行對應的SQL。
  2. StatementHandler使用數據庫的Statement/PreparedStatement執行操作。
  3. ParameterHandler用於SQL對參數的處理。
  4. ResultHandler封裝數據集Result並返回。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章