溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是Mybatis源碼

發(fā)布時(shí)間:2021-09-29 15:39:00 來源:億速云 閱讀:116 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“什么是Mybatis源碼”,在日常操作中,相信很多人在什么是Mybatis源碼問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是Mybatis源碼”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

整體架構(gòu)

什么是Mybatis源碼

這只是MySql的一個(gè)邏輯劃分架構(gòu)。

  • 接口層:通SqlSession類提供對數(shù)據(jù)庫訪問能力,隱藏了后續(xù)復(fù)雜的處理邏輯。

  • 核心處理層:主要負(fù)責(zé)執(zhí)行SQL,并返回結(jié)果。

  • 基礎(chǔ)支撐層:對一些基礎(chǔ)功能進(jìn)行封裝,為核心處理層提供服務(wù)。

代碼結(jié)構(gòu)

什么是Mybatis源碼

Mybatis的代碼結(jié)構(gòu)非常工整,堪稱完美的java編程規(guī)范教科書,當(dāng)我們深入源碼我們會(huì)發(fā)現(xiàn),Mybatis的注釋量相當(dāng)少,那是因?yàn)榛旧衔覀兛梢酝ㄟ^名稱就能明白其中的含義。

Mybatis中的設(shè)計(jì)模式

如果想學(xué)習(xí)設(shè)計(jì)模式在代碼中的應(yīng)用,閱讀Mybatis源碼也是一個(gè)不錯(cuò)的選擇,如:

  • SqlSession使用門面模式

  • 日志模塊使用了適配器模式

  • 數(shù)據(jù)源模塊使用工廠模式

  • 數(shù)據(jù)連接池使用策略模式

  • 緩存模塊使用了裝飾器模式

  • Executor模塊使用了模板方法模式

  • Builder模塊使用了建造者模式

  • Mapper接口使用了代理模式

  • 插件模塊使用責(zé)任鏈模式

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配置文件創(chuàng)SqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }
    }

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

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

Mybatis執(zhí)行流程

什么是Mybatis源碼

  1. new SqlSessionFactoryBuilder().build(inputStream);:讀取mybatis配置文件構(gòu)建SqlSessionFactory 。

  2. sqlSessionFactory.openSession();:獲取sqlSession資源

  3. sqlSession.getMapper(PersonMapper.class);:獲取對應(yīng)mapper

  4. mapper.selectByPrimaryKey(1L);:執(zhí)行查詢語句并返回結(jié)果

  5. 關(guān)閉資源

上圖是Mybatis的執(zhí)行流程,由此我們可以看出Mybatis的核心類有4個(gè),分別是SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SQL Mapper。

  • SqlSessionFactoryBuilde:讀取配置信息(XML文件),創(chuàng)建SqlSessionFactory,建造者模式,方法級(jí)別生命周期;

  • SqlSessionFactory:創(chuàng)建Sqlsession,工廠單例模式,存在于程序的整個(gè)應(yīng)用程序生命周期;

  • SqlSession:代表一次數(shù)據(jù)庫連接,可以直接發(fā)送SQL執(zhí)行,也可以通過調(diào)用Mapper訪問數(shù)據(jù)庫;線程不安全,要保證線程獨(dú)享,方法級(jí)生命周期;

  • SQL Mapper:由一個(gè)Java接口和XML文件組成,包含了要執(zhí)行的SQL語句和結(jié)果集映射規(guī)則。方法級(jí)別生命周期;

Mybatis核心流程三大階段

從上面的執(zhí)行流程可以看出,Mybatis核心流程主要分為以下三個(gè)階段:

  • 初始化階段:讀取XML配置文件和注解中的配置信息,創(chuàng)建配置對象,并完成各個(gè)模塊的初始化的工作;

  • 代理階段:封裝iBatis的編程模型,使用mapper接口開發(fā)的初始化工作;

  • 數(shù)據(jù)讀寫階段:通過SqlSession完成SQL的解析,參數(shù)的映射、SQL的執(zhí)行、結(jié)果的解析過程;

示例源碼

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

spring-boot-student-mybatis工程

Mybatis 源碼中文注釋

https://github.com/xiaolyuh/mybatis

到此,關(guān)于“什么是Mybatis源碼”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI