成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

教你手寫Mybatis框架

antyiwei / 2908人閱讀

摘要:前言嗨,小伙伴們,這篇博文將帶大家手寫,讓大家對的核心原理以及工作流程有更加深刻的理解。模塊顧名思義,就是框架配置類,用于解析配置文件加載相關(guān)環(huán)境。配置模塊這里的對框架的配置使用了簡單的,主要原因還是簡單易懂然后節(jié)省時間。

前言

(????)??嗨,小伙伴們,這篇博文將帶大家手寫mybatis,讓大家對mybaits的核心原理以及工作流程有更加深刻的理解。在上篇Spring-Mybatis運行機制概括以及上上篇MyBatis原理概括發(fā)布后,由于本人事情較多導致這篇博文卻遲遲沒出來,這里需要跟大家深感抱歉。但是,這篇如果你看了,我想你應該會覺得這一切都是值得的,因為以后在面試過程中或者在同事面前就可以好好裝裝啦,哈哈。
嗯哼,廢話不多說,咱們直接進入主題。

成果

這里先給大家看看如果你們看了這篇博文之后,能達到什么樣的成果。

public class Entry {
    public static void main(String[] args) {
        MtConfiguration configuration = new MtConfiguration("mybatis-config.properties");
        MtSqlSessionFactoryBuilder sqlSessionFactoryBuilder = new MtSqlSessionFactoryBuilder(configuration);
        MtSqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build();
        MtSqlSession sqlSession = sqlSessionFactory.openSession();
        PersonDao personDao = sqlSession.getMapper(PersonDao.class);
        Person person = personDao.queryPersonById(1l);
        System.out.println(person);
    }
}

了解Mybatis使用的同學們,能看出這跟你們常用的Mybatis有什么區(qū)別嗎?區(qū)別還是有的,只是很像有木有。
然后再讓大家看看這個仿真版的Mybatis框架由哪些部分組成,下面是框架的代碼目錄。

從上面的圖中可以看到涵蓋了executor、plugin、typehandler等基礎組件。然后再看下是如何使用的。

有沒有發(fā)現(xiàn)使用過程中跟原生Mybatis使用方式基本一致。最后就是大家應該比較關(guān)心的部分了,那就是源代碼能提供嗎???答案是肯定!
handwritten_mybatis_framework 希望喜歡的小伙伴能star哦。

解析
有些小伙伴可能會有疑問,怎么才能寫出這樣的框架呢?這個怎么回答呢,其實寫出來只需要你對Mybatis的工作原理有大致的了解,知道那些模塊是做什么的又是怎么實現(xiàn)的,然后畫個流程圖,然后定義需要哪些類和接口去實現(xiàn),最后只需要將這些定義好的類和接口填空就可以了。
那么現(xiàn)在我們來看看這個仿真Mybatis是怎么工作的,當然需要申明的是這個框架僅僅只是作為了解Mybatis運行原理的一個代碼練習,有些地方的代碼可能只是為了演示這樣的效果,并不一定完全跟原生一樣。比如Mybatis需要解析XML,而這里我們投了個懶,直接上properties。這樣我們就可以重點關(guān)注Myabtis的業(yè)務流程啦。

接下來對框架的每個部分進行一個簡單的說明,具體還請小伙伴去看代碼好好了解然后有什么問題直接在評論區(qū)或者私信我就可以了,我保證看到就回復,哈哈。

1.configuration模塊

顧名思義,就是框架配置類,用于解析配置文件加載相關(guān)環(huán)境。這里代碼里對配置文件的初始化主要有以下這么一個流程。

    public MtConfiguration(String configLocation){
        this.configLocation = configLocation;
        init();
    }

    private void init(){
        try {
            //記載配置文件,這里使用properties代替xml解析
            loadConfigProperties();
            //初始化數(shù)據(jù)源信息
            initDataSource();
            //解析并加載mapper文件
            loadMapperRegistory();
            //解析加載plugin
            initPluginChain();
            //解析加載typeHandler
            initTypeHandler();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }

可以看到實例類的時候調(diào)用init方法進行初始化,分別加載配置信息、初始化數(shù)據(jù)源信息、解析并加載mapper文件、解析加載plugin、解析加載typeHandler這幾個步驟。具體如何進行小伙伴們可以看下代碼實現(xiàn),代碼寫得簡單,相信你們一看就懂。

2.session模塊

這個模塊用于用戶與框架交互的入口。包括常用的sqlSession、sqlSessionFactory以及sqlSessionFactoryBuilder。這幾個類完全是仿照Mybatis的,只是類實現(xiàn)會相對簡單很多。至于每個類用來干嘛,這個我在之前的文章中有講述,這里就不多做贅述啦,只是簡單引導講解框架信息。

3.Mapper映射模塊

這個模塊主要用來注冊我們的mapper映射文件的。

這里需要說明下MapperData這個類,這個類主要記錄sql語句和sql語句返回類型信息的。然后MapperRegistory用來保存方法與MapperData的映射關(guān)系,這樣我們執(zhí)行某個方法是就能找到對應的Sql語句和對應的返回類型了。這個過程可以結(jié)合Mybatis解析mapper.xml的過程去理解。

public class MapperData {
    private String sql;
    private Class type;

    public MapperData(String sql, Class type) {
        this.sql = sql;
        this.type = type;
    }

    public String getSql() {
        return sql;
    }

    public void setSql(String sql) {
        this.sql = sql;
    }

    public Class getType() {
        return type;
    }

    public void setType(Class type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "MapperData{" +
                "sql="" + sql + """ +
                ", resultType=" + type +
                "}";
    }
}
4.Executor執(zhí)行模塊

這個模塊主要用于執(zhí)行SQL語句并且結(jié)合各種handler處理,然后這里只是寫了一簡單的執(zhí)行器類。

5.handler模塊

這里模仿Mybatis執(zhí)行SQL時的過程,stamentHandler用于處理語句集、parameterHandler用于處理參數(shù)、resultHandler用于處理結(jié)果映射。

6.plugin模塊

這里模仿Myabtis插件的工作原理實現(xiàn)的,也就是說這里和原生Mybatis的plugin基本一樣,不過這里我又偷了個懶,目前只能實現(xiàn)對executor的攔截。哈哈,別怪我。

7.typeHandler模塊

這里模仿Mybatis類型處理的機制,用于javaType到jdbcType的映射處理以及jdbcType到javaType的映射處理,當然這只是演示這樣的一種效果,具體實現(xiàn)其實沒有像Mybatis那樣復雜。你們看代碼應該也能看出來。

8.配置模塊

這里的對框架的配置使用了簡單的properties,主要原因還是簡單易懂然后節(jié)省時間。

使用

本地使用的話其實就跟項目入口文件那樣,拉下代碼,修改數(shù)據(jù)源信息,導入數(shù)據(jù)庫,pom依賴下載然后運行就跟遠程Mybatis那樣使用就可以了,最后剩下的你們就可以自由發(fā)揮修改代碼,相信你們能做得更好。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71269.html

相關(guān)文章

  • 開源框架解析,手寫MyBatis細節(jié)思路

    摘要:基本綱要組成動態(tài)配置配置核心源碼分析源碼解析源碼解析源碼解析源碼解析手寫框架是什么本質(zhì)是一種半自動的框架,前身是其源于和的組合,除了和映射關(guān)系之外,還需要編寫語句映射三要素映射規(guī)則快速入門加入的依賴添加的配置文件場景介紹編寫實體類接口以及文 showImg(https://segmentfault.com/img/bVblrnC); Mybatis基本綱要 Mybatis組成 · 動態(tài)...

    paulli3 評論0 收藏0
  • 解密Mybatis,手寫Mybatis框架(一)

    摘要:核心流程三大階段縷清思路也就是核心流程之后,我們就開始寫代碼了,詳見下節(jié) Mybatis快速入門 步驟: 1.加入mybatis的依賴 2.添加Mybatis的配置文件 3.場景介紹 4.編寫實體類丶mapper接口及mapper.xml文件 5.編寫測試代碼 demo: public class TUser { private Integer id; priva...

    SunZhaopeng 評論0 收藏0
  • 從手把手教你整合最優(yōu)雅SSM框架:SpringMVC + Spring + MyBatis的文章加入

    摘要:看我這邊文章的人,請先去,完全學習完了,理解了,再過來我這邊看看吧,反正我是剛從轉(zhuǎn)來的小白,有可以改良的請告訴我哈首先是它最后沒有做層開始先把先回顧一下它最后做到包下的先這是他寫的第一個方法,我把它稍微改成自己熟悉的寫法,效果都是一樣的然 看我這邊文章的人,請先去http://blog.csdn.net/qq598535...,完全學習完了,理解了,再過來我這邊看看吧,反正我是剛從ph...

    Berwin 評論0 收藏0
  • 解密Mybatis,手寫Mybatis框架(二)

    摘要:三大巨頭結(jié)果集再通過反射機制映射到對象上面,便做好了數(shù)據(jù)的映射關(guān)于映射具體內(nèi)容可查閱資料及源碼到這我們已經(jīng)完成了一個簡易的框架了通過手寫一個簡單的框架,我們就可以看得懂源碼了,學習框架設計的思路并且增強我們的內(nèi)功 簡化版Mybatis實現(xiàn)思路 1.創(chuàng)建SqlSessionFactory實例. 2.實例化過程中,加載配置文件創(chuàng)建configuration對象. 3.通過factory創(chuàng)...

    chuyao 評論0 收藏0
  • 后端API從入門到放棄指北

    摘要:菜鳥教程框架中文手冊入門目標使用搭建通過對數(shù)據(jù)增刪查改沒了純粹占行用的拜 后端API入門學習指北 了解一下一下概念. RESTful API標準] 所有的API都遵循[RESTful API標準]. 建議大家都簡單了解一下HTTP協(xié)議和RESTful API相關(guān)資料. 阮一峰:理解RESTful架構(gòu) 阮一峰:RESTful API 設計指南 RESTful API指南 依賴注入 D...

    Jeffrrey 評論0 收藏0

發(fā)表評論

0條評論

antyiwei

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<