日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从 0 开始手写一个 Mybatis 框架,三步搞定!

發布時間:2025/3/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从 0 开始手写一个 Mybatis 框架,三步搞定! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近研究了一下Mybatis,給大家磕叨磕叨,MyBatis框架的核心功能其實不難,無非就是動態代理和jdbc的操作,難的是寫出來可擴展,高內聚,低耦合的規范的代碼。本文完成的Mybatis功能比較簡單,代碼還有許多需要改進的地方,大家可以結合Mybatis源碼去動手完善。

一、Mybatis框架流程簡介

在手寫自己的Mybatis框架之前,我們先來了解一下Mybatis,它的源碼中使用了大量的設計模式,閱讀源碼并觀察設計模式在其中的應用,才能夠更深入的理解源碼。我們對上圖進行分析總結:

mybatis的配置文件有2類

mybatisconfig.xml,配置文件的名稱不是固定的,配置了全局的參數的配置,全局只能有一個配置文件。

Mapper.xml 配置多個statemement,也就是多個sql,整個mybatis框架中可以有多個Mappe.xml配置文件。

通過mybatis配置文件得到SqlSessionFactory

通過SqlSessionFactory得到SqlSession,用SqlSession就可以操作數據了。

SqlSession通過底層的Executor(執行器),執行器有2類實現:

  • 基本實現
  • 帶有緩存功能的實現

MappedStatement是通過Mapper.xml中定義statement生成的對象。

參數輸入執行并輸出結果集,無需手動判斷參數類型和參數下標位置,且自動將結果集映射為Java對象

HashMap,KV格式的數據類型

Java的基本數據類型

POJO,java的對象

二、梳理自己的Mybatis的設計思路

根據上文Mybatis流程,我簡化了下,分為以下步驟:

1.讀取xml文件,建立連接

從圖中可以看出,MyConfiguration負責與人交互。待讀取xml后,將屬性和連接數據庫的操作封裝在MyConfiguration對象中供后面的組件調用。本文將使用dom4j來讀取xml文件,它具有性能優異和非常方便使用的特點。

2.創建SqlSession,搭建Configuration和Executor之間的橋梁

我們經常在使用框架時看到Session,Session到底是什么呢?一個Session僅擁有一個對應的數據庫連接。類似于一個前段請求Request,它可以直接調用exec(SQL)來執行SQL語句。從流程圖中的箭頭可以看出,MySqlSession的成員變量中必須得有MyExecutor和MyConfiguration去集中做調配,箭頭就像是一種關聯關系。我們自己的MySqlSession將有一個getMapper方法,然后使用動態代理生成對象后,就可以做數據庫的操作了。

3.創建Executor,封裝JDBC操作數據庫

Executor是一個執行器,負責SQL語句的生成和查詢緩存(緩存還沒完成)的維護,也就是jdbc的代碼將在這里完成,不過本文只實現了單表,有興趣的同學可以嘗試完成多表。

4.創建MapperProxy,使用動態代理生成Mapper對象

我們只是希望對指定的接口生成一個對象,使得執行它的時候能運行一句sql罷了,而接口無法直接調用方法,所以這里使用動態代理生成對象,在執行時還是回到MySqlSession中調用查詢,最終由MyExecutor做JDBC查詢。這樣設計是為了單一職責,可擴展性更強。

三、實現自己的Mybatis

工程文件及目錄:

首先,新建一個maven項目,在pom.xml中導入以下依賴:

創建我們的數據庫xml配置文件:

然后在數據庫創建test庫,執行如下SQL語句:

創建User實體類,和UserMapper接口和對應的xml文件:

基本操作配置完成,接下來我們開始實現MyConfiguration:

用面向對象的思想設計讀取xml配置后:

接下來實現我們的MySqlSession,首先的成員變量里得有Excutor和MyConfiguration,代碼的精髓就在getMapper的方法里。

緊接著創建Executor和實現類:

MyExecutor中封裝了JDBC的操作:

MyMapperProxy代理類完成xml方法和真實方法對應,執行查詢:

到這里,就完成了自己的Mybatis框架,我們測試一下:

執行結果:

查詢一個不存在的用戶試試:

到這里我們就大功告成了!

總結

以上是生活随笔為你收集整理的从 0 开始手写一个 Mybatis 框架,三步搞定!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久久久久久久免费软件 | 日韩欧美视频在线播放 | av在线视| 最近中文字幕在线mv视频在线 | 国产图片区 | 欧美日韩精品在线观看 | 91黄色小视频 | 蜜桃无码一区二区三区 | 天天综合国产 | 欧洲成人午夜精品无码区久久 | 最新的黄色网址 | 欧美黄色性生活 | 91成人精品一区在线播放 | 久久久久国色av免费观看性色 | 欧美视频亚洲视频 | 欧美大片网站 | 老公吃小头头视频免费观看 | 国产又粗又猛又黄又爽的视频 | 欧美激情一区二区 | 成年女人色毛片 | 波多野吉衣伦理片 | 久久久久久网址 | 韩国黄色一级片 | 国产免费黄色录像 | 97在线观视频免费观看 | 在线观看网站av | 日韩理论片在线观看 | 日本黄网站在线观看 | 免费特黄视频 | 伊人av一区 | 午夜精品一区二区三区免费视频 | 色美av| 风流少妇按摩来高潮 | 成人高清视频免费观看 | 强制憋尿play黄文尿奴 | 国产日韩欧美精品在线观看 | 中文字幕乱码一二三区 | 婷婷中文字幕在线 | 在线观看国产亚洲 | 国产一级二级三级视频 | 亚洲乱码国产乱码精品天美传媒 | 一区二区三区www污污污网站 | 黄色工厂在线观看 | 亚洲成人精品久久 | 日韩精品视频在线播放 | av在线不卡观看 | 18禁免费无码无遮挡不卡网站 | 精品国产欧美日韩 | 成人免费一区二区三区在线观看 | 国产欧美123 | 国产靠逼视频 | 在线污视频 | 91av视频免费观看 | 天天看天天干 | 人人超碰97 | 蜜桃视频日韩 | 张津瑜国内精品www在线 | 自拍偷拍亚洲精品 | 中文字幕有码在线播放 | 国产精品一区二区三区久久 | 国产小视频在线免费观看 | 久久久男人的天堂 | 粉嫩一区 | 亚洲成a人片77777kkkk | 欧美1区2区3区 | 毛片的网站 | 自拍偷拍亚洲精品 | 人妻无码久久一区二区三区免费 | 麻豆精品自拍 | 电影91久久久 | 欧美一区二区三区久久综合 | 视频国产在线 | 日本少妇毛茸茸 | jzzjzz日本丰满少妇 | 国产中文字幕在线免费观看 | 茄子爱啪啪 | 日本国产亚洲 | 少妇做爰免费视看片 | wwwav在线播放 | 少妇裸体挤奶汁奶水视频 | 最新日韩精品 | 日韩欧美视频一区二区三区 | 四色成人av永久网址 | 91丨九色丨蝌蚪丨老版 | 美日韩一区 | jizz中国女人高潮 | 中文字幕123区 | 国产91精品一区二区麻豆亚洲 | bl动漫在线观看 | 欧美第一网站 | 国产乱码精品一区二区三区中文 | 欧美变态口味重另类 | 日产av在线播放 | 日本丰满熟妇videossex一 | 爱爱视频网站免费 | 欧美性受xxxx黑人猛交88 | 国产日韩欧美综合在线 | 日韩欧美中文字幕在线观看 | 成人区人妻精品一区二区网站 |