構建SqlSessionFactory 的過程


1 SqlSessionFactory 的核心功能是創建 SqlSession 接口,而 SqlSessionFactory 是通過 SqlSessionFactoryBuilder 去構建。

構建步驟1)XMLConfigBuilder 解析配置的XML文件,讀出配置參數,然后將配置數據存放到 Configuration 類中。Mybatis 幾乎所有的配置都在 Configuration  類中。

2)使用 Configuration  去創建 SqlSessionFactory ,Mybatis 的 SqlSessionFactory 是一個接口,而不是實現類。mybatis 提供了默認的 SqlSessionFactory  實現類,org.apache.ibatis.session.defaults.DefaultSqlSessionFactory。因此大多數情況下我們不需要自己去創建 SqlSessionFactory  的實現類。

 

2 構建 Configuration 它的作用如下

  • 讀入配置文件,包括基礎配置的XML 文件和映射器的XML 文件
  • 初始化基礎配置和重要的類對象,比如Mybatis 別名、映射器、ObjectFactory 和 typeHandler 對象等
  • 提工單例,為后續創建 SessionFactory 服務並提供配置參數。
  • 執行一些對象方法,初始化一些配置信息

Configuration 對象是單例的,是通過 XMLConfigBuilder 去構建的。

 

3 映射器的內部組成,是由3部分組成的

  • MappedStatement,他保存映射器的節點(select | insert | delete | update),和SQL 語句、緩存、resultMap、parameterType、resultType
  • SqlSource,它是提供 BoundSql 對象的地方,他是 MappedStatement 的一個屬性
  • BoundSql,他是建立 SQL 和參數的地方。3個常用屬性:SQL、parameterObject、parameterMappings

對於參數和SQL主要適用對象是 BoundSql 對象。

  • parameterObject 是參數本身,我們可以傳遞POJO、Map、簡單對象、@Param等
  • 傳遞簡單對象(int/String/float/double),mybatis會將其轉換成為包裝對象。比如我們傳遞一個 int 他會把參數轉換成 Integer 對象
  • 如果傳遞的是 POJO 或者 Map 那么 parameterObject  就是你傳入的 POJO 或者 Map不變。
  • 傳遞多個參數,沒有使用 @Param 那么 mybatis會把 parameterObject  變為一個 Map<String, Object> 對象,其鍵值的關系是按照順序來的,類似於{"1":p1,"2":p2...,"param1":p1,"param2":p2...},所以在編寫SQL的時候可以使用#{param1} 或 #{1} 去引用參數
  • 傳遞多個參數,並使用 @Param 注解, mybatis會把 parameterObject  變為一個 Map<String, Object> 對象,只是把鍵值換成了 @Param 注解的值。比如,@Param("key1") String p1, @Param("key2") String p2,那么這個 parameterObject  對象就是{"key1":p1,"key2":p2}

 

4 構建 SqlSessionFactory,有Configuration 對象,構建 SqlSessionFactory 就很方便。

sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputstream)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM