Mybatis 源碼(一)總攬

總體架構

這只是MySql的一個邏輯劃分架構。java

  • 接口層:通SqlSession類提供對數據庫訪問能力,隱藏了後續複雜的處理邏輯。
  • 核心處理層:主要負責執行SQL,並返回結果。
  • 基礎支撐層:對一些基礎功能進行封裝,爲核心處理層提供服務。

代碼結構

Mybatis的代碼結構很是工整,堪稱完美的java編程規範教科書,當咱們深刻源碼咱們會發現,Mybatis的註釋量至關少,那是由於基本上咱們能夠經過名稱就能明白其中的含義。git

Mybatis中的設計模式

若是想學習設計模式在代碼中的應用,閱讀Mybatis源碼也是一個不錯的選擇,如:github

  • SqlSession使用門面模式
  • 日誌模塊使用了適配器模式
  • 數據源模塊使用工廠模式
  • 數據鏈接池使用策略模式
  • 緩存模塊使用了裝飾器模式
  • Executor模塊使用了模板方法模式
  • Builder模塊使用了建造者模式
  • Mapper接口使用了代理模式
  • 插件模塊使用責任鏈模式

Mybatis 快速入門

public class MybatisTest extends BaseTest {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws IOException {
        String resource = "config/mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            // 1.讀取mybatis配置文件創SqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
    }

    @Test
    // 測試自動映射以及下劃線自動轉化駝峯
    public void quickStart() throws Exception {
        // 2.獲取sqlSession
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            initH2dbMybatis(sqlSession);

            // 3.獲取對應mapper
            PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
            // 4.執行查詢語句並返回結果
            Person person = mapper.selectByPrimaryKey(1L);
            System.out.println(person.toString());
        }
    }
}

Mybatis執行流程

  1. new SqlSessionFactoryBuilder().build(inputStream);:讀取mybatis配置文件構建SqlSessionFactory
  2. sqlSessionFactory.openSession();:獲取sqlSession資源
  3. sqlSession.getMapper(PersonMapper.class);:獲取對應mapper
  4. mapper.selectByPrimaryKey(1L);:執行查詢語句並返回結果
  5. 關閉資源

上圖是Mybatis的執行流程,由此咱們能夠看出Mybatis的核心類有4個,分別是SqlSessionFactoryBuilderSqlSessionFactorySqlSessionSQL Mapperspring

  • SqlSessionFactoryBuilde:讀取配置信息(XML文件),建立SqlSessionFactory,建造者模式,方法級別生命週期;
  • SqlSessionFactory:建立Sqlsession,工廠單例模式,存在於程序的整個應用程序生命週期;
  • SqlSession:表明一次數據庫鏈接,能夠直接發送SQL執行,也能夠經過調用Mapper訪問數據庫;線程不安全,要保證線程獨享,方法級生命週期;
  • SQL Mapper:由一個Java接口和XML文件組成,包含了要執行的SQL語句和結果集映射規則。方法級別生命週期;

Mybatis核心流程三大階段

從上面的執行流程能夠看出,Mybatis核心流程主要分爲如下三個階段:sql

  • 初始化階段:讀取XML配置文件和註解中的配置信息,建立配置對象,並完成各個模塊的初始化的工做;
  • 代理階段:封裝iBatis的編程模型,使用mapper接口開發的初始化工做;
  • 數據讀寫階段:經過SqlSession完成SQL的解析,參數的映射、SQL的執行、結果的解析過程;

示例源碼

https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases數據庫

spring-boot-student-mybatis工程編程

Mybatis 源碼中文註釋

https://github.com/xiaolyuh/mybatis設計模式

相關文章
相關標籤/搜索