1. 程式人生 > >Mybatis的SqlSessionFactory構造過程

Mybatis的SqlSessionFactory構造過程

建立SqlSession的關鍵是先建立SqlSessionFactory,建立SqlSessionFactory需要提供配置檔案和相關的引數,然後可以使用SqlSessionFactoryBuilder去建立SqlSessionFactory,提供Configuration物件作為SqlSessionFactory建構函式入參。步驟如下:

    public SqlSessionFactory build(Configuration config) {
        return new DefaultSqlSessionFactory(config);
    }
  1. 通過XMLConfigBuilder去解析配置的XML檔案,讀出配置引數,並將讀出的資料存入Configuration類中,Mybatis幾乎所有的配置都是存在這裡。
  2. 使用Configuration物件去建立SqlSessionFactory,這只是一個介面,有預設的實現類DefaultSqlSessionFactory

Mybatis是一個複雜的系統,其初始化過程非常複雜,因此把所有初始化引數包裝成一個物件,方便管理引數,同時具有內聚性

對映器的內部組成 一個對映器是由3個部分組成:

  • MappedStatement,它儲存著對映器的一個節點(select|insert|delete|update)。包括許多配置的SQL,SQL的id,快取資訊、resultMap、parameterType等配置資訊
  • SqlSource,是提供BoundSql物件的地方,是MappedStatement的一個屬性,
  • BoundSql,建立SQL和引數的地方。有三個常用屬性:SQL,parameterObject、parameterMappings

在這裡插入圖片描述

parameterObject為引數本身,有三種引數:基本資料型別,POJO,Map或者@param註解的引數

  • 基本資料型別,Mybatis會把引數變為Integer物件傳遞,
  • POJO和Map,那麼parameterObject就是傳入的POJO和Map
  • 多個引數,Mybatis會把parameterObject變為一個Map<String,Object>物件,其中引數被當做Map的value,而key根據是否有@Param註解來分為兩種,如果沒有@Param註解,那麼key為“1”、“2”…,如果有@Param註解,則key為註解中的字串

parameterMappings:是一個list,儲存著parameterMapping,這個物件會描述我們的引數,包括屬性、名稱、表示式、jdbcTypeName、jdbcType、javaType、typeHandler等,一般不去修改它,通過它可以實現Sql和引數的結合,以便PreparedStatement能夠通過它找到parameterObject物件的屬性並設定引數

sql屬性就是我們書寫在對映器裡的一條sql,大多數情況下無需修改它。

SqlSession執行過程 SqlSession是一個介面,通過構造SqlSessionFactory就可以輕易拿到SqlSession,SqlSession介面有許多常用的CRUD方法,呼叫這些方法可以執行相應的CRUD SQL語句,