精品欧美激情精品一区,亚洲自拍的二区三区,亚洲综合精品一区二区,国产伦精品一区二区三区视频免费


學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

MyBatis的執(zhí)行流程詳解

來(lái)源:北大青鳥總部 2023年02月21日 14:21

摘要: 說(shuō)到MyBatis執(zhí)行流程,估計(jì)80%的程序員可能每天都沉浸在一個(gè)接口方法、一條SQL快樂(lè)的coding中,但是作為一個(gè)勵(lì)志成為優(yōu)秀工程師的程序猿,僅僅停留在這個(gè)層面還遠(yuǎn)遠(yuǎn)不夠,它根本滿足不了我們對(duì)技術(shù)的渴望。

說(shuō)到流程這個(gè)事兒,大家可能最先想到的就是富士康的流水線,標(biāo)準(zhǔn)化的分工讓每道工序都如絲一般潤(rùn)滑,所以才成就了富士康"世界工廠"的名號(hào)。



想當(dāng)年猿小二也是眾多流水線工人中的一員,每天成百上千次的重復(fù)著同一個(gè)動(dòng)作;突然有一天猿小二頓悟了,他認(rèn)為我不能在這里浪費(fèi)青春,我要去改變世界,于是他決定學(xué)習(xí)Java,沒(méi)想到這可一發(fā)不可收拾,學(xué)起Java來(lái),如久旱逢甘霖,如魚得水一樣的輕松順暢。

但是好景不長(zhǎng),最近他就在學(xué)習(xí)MyBatis這里遇到了點(diǎn)小麻煩,總是搞不清楚,MyBatis是怎么一個(gè)接口、一個(gè)映射文件(寫sql)就可以操作數(shù)據(jù)庫(kù)了呢?它的執(zhí)行流程到底是怎么樣的呢?帶著這樣的疑問(wèn),猿小二開始了他的探索....

說(shuō)到MyBatis執(zhí)行流程,估計(jì)80%的程序員可能每天都沉浸在一個(gè)接口方法、一條SQL快樂(lè)的coding中,也可能他們都在忙著陪女朋友(可能性不大,因?yàn)槌绦騿T沒(méi)有女朋友),也可能是沒(méi)有時(shí)間研究;也可能覺(jué)得使用起來(lái)很簡(jiǎn)單,不就是加載配置文件,執(zhí)行SQL嗎,soeasy;但是作為一個(gè)勵(lì)志成為優(yōu)秀工程師的程序猿,僅僅停留在這個(gè)層面還遠(yuǎn)遠(yuǎn)不夠,它根本滿足不了我們對(duì)技術(shù)的渴望。



核心流程介紹

我們都知道MyBtis是對(duì)JDBC的簡(jiǎn)易封裝,它的出現(xiàn)某種程度了是為了消除所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的封裝問(wèn)題;不管怎樣,JDBC的那一套還是不會(huì)變的,只是做了抽象、封裝、歸類等;所以想要理解MyBatis的執(zhí)行流程,那就不得不先回顧一下JDBC的執(zhí)行流程。


JDBC執(zhí)行六部走

  1. 注冊(cè)驅(qū)動(dòng)

  2. 獲取Connection連接

  3. 執(zhí)行預(yù)編譯

  4. 執(zhí)行SQL

  5. 封裝結(jié)果集

  6. 釋放資源

以上就是JDBC操作數(shù)據(jù)的流程步驟,然后我看下MyBatis的執(zhí)行流程圖。



MyBatis執(zhí)行八步走

上面流程就是MyBatis內(nèi)部核心流程,咱們來(lái)一步步解釋下,根據(jù)圖中步驟,我們可以將這個(gè)執(zhí)行流程分成了8個(gè)步驟。

1.讀取MyBatis的核心配置文件。mybatis-config.xml為MyBatis的全局配置文件,用于配置數(shù)據(jù)庫(kù)連接、屬性、類型別名、類型處理器、插件、環(huán)境配置、映射器(mapper.xml)等信息,這個(gè)過(guò)程中有一個(gè)比較重要的部分就是映射文件其實(shí)是配在這里的;這個(gè)核心配置文件最終會(huì)被封裝成一個(gè)Configuration對(duì)象


2.加載映射文件。映射文件即SQL映射文件,該文件中配置了操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句,映射文件是在mybatis-config.xml中加載;可以加載多個(gè)映射文件。常見(jiàn)的配置的方式有兩種,一種是package掃描包,一種是mapper找到配置文件的位置。


<!-- 使用包路徑,掃描包下所有的接口,這種方式比較方便 -->

<package name="com.mybatis.demo"/>
<!-- resource:使用相對(duì)路徑的資源引用-->
<!-- url:使用絕對(duì)類路徑的資源引用-->
<!-- class:使用映射器接口實(shí)現(xiàn)類的完全限定類名-->
<mapper resource="xxx.xml"/>


3.構(gòu)造會(huì)話工廠獲取SqlSessionFactory。這個(gè)過(guò)程其實(shí)是用建造者設(shè)計(jì)模式使用SqlSessionFactoryBuilder對(duì)象構(gòu)建的,SqlSessionFactory的最佳作用域是應(yīng)用作用域。

// 2. 創(chuàng)建SqlSessionFactory對(duì)象實(shí)際創(chuàng)建的是DefaultSqlSessionFactory對(duì)象
SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(inputStream);


4.創(chuàng)建會(huì)話對(duì)象SqlSession。由會(huì)話工廠創(chuàng)建SqlSession對(duì)象,對(duì)象中包含了執(zhí)行SQL語(yǔ)句的所有方法,每個(gè)線程都應(yīng)該有它自己的 SqlSession 實(shí)例。SqlSession的實(shí)例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請(qǐng)求或方法作用域。

// 3. 創(chuàng)建SqlSession對(duì)象實(shí)際創(chuàng)建的是DefaultSqlSession對(duì)象
SqlSession sqlSession = builder.openSession();


5.Executor執(zhí)行器。是MyBatis的核心,負(fù)責(zé)SQL語(yǔ)句的生成和查詢緩存的維護(hù),它將根據(jù)SqlSession傳遞的參數(shù)動(dòng)態(tài)地生成需要執(zhí)行的SQL語(yǔ)句,同時(shí)負(fù)責(zé)查詢緩存的維護(hù)

    • SimpleExecutor -- SIMPLE 就是普通的執(zhí)行器。

    • ReuseExecutor -執(zhí)行器會(huì)重用預(yù)處理語(yǔ)句(PreparedStatements)

    • BatchExecutor --它是批處理執(zhí)行器


6.MappedStatement對(duì)象。MappedStatement是對(duì)解析的SQL的語(yǔ)句封裝,一個(gè)MappedStatement代表了一個(gè)sql語(yǔ)句標(biāo)簽,如下:

<!--一個(gè)動(dòng)態(tài)sql標(biāo)簽就是一個(gè)`MappedStatement`對(duì)象-->
<select id="selectUserList" resultType="com.mybatis.User">
select * from t_user
</select>


7.輸入?yún)?shù)映射。輸入?yún)?shù)類型可以是基本數(shù)據(jù)類型,也可以是Map、List、POJO類型復(fù)雜數(shù)據(jù)類型,這個(gè)過(guò)程類似于JDBC的預(yù)編譯處理參數(shù)的過(guò)程,有兩個(gè)屬性 parameterType和parameterMap

8.封裝結(jié)果集??梢苑庋b成多種類型可以是基本數(shù)據(jù)類型,也可以是Map、List、POJO類型復(fù)雜數(shù)據(jù)類型。封裝結(jié)果集的過(guò)程就和JDBC封裝結(jié)果集是一樣的。也有兩個(gè)常用的屬性resultType和resultMap。

我們?cè)賮?lái)看一下這個(gè)完整的執(zhí)行步驟,代碼如下:

/**
* Mybatis測(cè)試
*/
public class MybatisTest {
public static void main(String[] args) throws Exception {
// 1.加載配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
// 2. 創(chuàng)建SqlSessionFactory對(duì)象實(shí)際創(chuàng)建的是DefaultSqlSessionFactory對(duì)象
SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(inputStream);
// 3. 創(chuàng)建SqlSession對(duì)象實(shí)際創(chuàng)建的是DefaultSqlSession對(duì)象
SqlSession sqlSession = builder.openSession();
// 4. 創(chuàng)建代理對(duì)象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 5. 執(zhí)行查詢語(yǔ)句
List<User> users = mapper.selectUserList();
// 6. 釋放資源
sqlSession.close();
inputStream.close();
}
}


通過(guò)分析Mybatis的執(zhí)行流程,我們可以發(fā)現(xiàn)它和JDBC基本大同小異,比較明顯的地方就是:

  1. 注冊(cè)驅(qū)動(dòng)獲取鏈接的部分都抽取到了核心配置文件mybatis-config.xml中。

  2. sql語(yǔ)句抽取到了映射文件mapper.xml中。


至于其他的部分,如執(zhí)行sql預(yù)編譯、執(zhí)行查詢、封裝結(jié)果集等都是抽取到了其他的類中來(lái)完成這些操作。通過(guò)對(duì)JDBC執(zhí)行步驟來(lái)對(duì)比分析MyBatis的執(zhí)行的流程,總體上來(lái)看它們的執(zhí)行步驟基本是一樣的,所以大家是不是覺(jué)得MyBatis這個(gè)框架其實(shí)也挺簡(jiǎn)單的,總結(jié)下其實(shí)就是:

  • 加載解析配置文件(核心配置文件和映射文件)

  • 處理參數(shù)

  • 執(zhí)行查詢

  • 封裝結(jié)果集


標(biāo)簽: mybatis
熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開班
報(bào)名優(yōu)惠
免費(fèi)試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接
精品欧美激情精品一区,亚洲自拍的二区三区,亚洲综合精品一区二区,国产伦精品一区二区三区视频免费
欧美日韩国产综合久久| 亚洲一区二区三区四区五区黄 | 亚洲图片欧美一区| 国产在线麻豆精品观看| 国产精品二区在线| 一卡二卡3卡四卡高清精品视频| 日韩视频一区二区三区在线播放| 最新欧美精品一区二区三区| 精东粉嫩av免费一区二区三区 | 国产三级精品在线| 肉色丝袜一区二区| 91蜜桃网址入口| 中文字幕中文字幕在线中一区高清| 欧美成人精品3d动漫h| 亚洲一区二区在线免费看| 国产成人精品亚洲777人妖| 免费成人av网站| 欧美一级在线视频| 亚洲一区二区美女| 99国产精品国产精品毛片| 一区二区三区四区国产| 久久久久国产精品麻豆| 日本va欧美va欧美va精品| 成人欧美一区二区三区黑人免费| 色综合久久88色综合天天| 中文字幕高清不卡| 国产在线不卡一区| 女女同性女同一区二区三区91| 欧美一区二区三区性视频| 亚洲一二三区不卡| 51精品国产人成在线观看| 欧美在线你懂的| 亚洲日本韩国一区| 成人av网站在线| 色婷婷综合久久久久中文一区二区| 国产日本欧洲亚洲| 国产在线播精品第三| 日韩免费电影一区二区| 久久久亚洲国产美女国产盗摄 | 亚洲国产精品欧美一二99| 91视频在线看| 欧美日韩精品一区二区三区 | 亚洲一区二区免费视频软件合集| 国产亚洲一二三区| 国产在线精品免费| 亚洲一卡二卡区| 亚洲欧美在线视频| 99久久精品费精品国产一区二区| 欧洲精品一区二区| 亚洲综合激情网| 国产成人免费电影| 日韩视频一区二区| 久久激五月天综合精品| 日韩电影天堂视频一区二区| 久久久久久久久久久久久女国产乱| 激情另类小说区图片区视频区| 视频一区视频二区视频三区视频四区国产| 久久久精品天堂| 丁香一区二区三区| 欧美色图一区二区三区| 亚洲成人在线网站| 精品久久精品久久| 国产性天天综合网| 成人午夜视频福利| 欧美理论片在线| 蜜桃久久av一区| 天天好比中文综合网| 亚洲日本在线看| 99久热re在线精品996热视频| 欧美一区二区三区免费视频| 麻豆国产91在线播放| 亚洲欧美影院| 一区二区三区日韩精品视频| 激情伦成人综合小说| 国产色产综合色产在线视频| 成人精品免费网站| 欧美一区二区三区四区五区| 精品亚洲成a人在线观看| 色欲综合视频天天天| 亚洲地区一二三色| 日韩精品一线二线三线| 亚洲欧美精品午睡沙发| 国产麻豆乱码精品一区二区三区| 久久伊人中文字幕| 成a人片国产精品| 日韩欧美一区二区免费| 国产成人亚洲综合色影视| 欧美日韩中字一区| 久久国产精品无码网站| 色菇凉天天综合网| 蜜臀99久久精品久久久久久软件| 一区二区成人国产精品| 香蕉乱码成人久久天堂爱免费| 视频一区国产精品| 亚洲成人动漫一区| 亚洲一区二区三区免费看| 亚洲成人在线免费| 亚洲在线不卡| 日韩av电影免费观看高清完整版 | 欧美tickle裸体挠脚心vk| 国产99精品视频| 日韩欧美中文一区二区| 风间由美性色一区二区三区| 日韩精品中文字幕一区二区三区 | 成人丝袜18视频在线观看| 日韩免费看的电影| 成人91在线观看| 久久久久一区二区三区四区| 91色porny在线视频| 国产欧美视频一区二区三区| 国产精品日韩一区二区免费视频| 国产精品无码永久免费888| 国产综合第一页| 亚洲视频一区二区在线观看| 欧美日韩一区二区视频在线| 亚洲一卡二卡三卡四卡无卡久久| 一区二区三区在线观看www| 日本美女一区二区| 欧美老女人第四色| 成人听书哪个软件好| 久久精品免视看| 精品国产91亚洲一区二区三区www| 亚洲欧美一区二区三区极速播放| 日韩中文不卡| 免费亚洲电影在线| 欧美一区二区三区视频在线观看 | 国产精选一区二区三区| 日韩欧美另类在线| caoporen国产精品| 亚洲人一二三区| 亚洲精品欧洲精品| 精品在线播放午夜| 日韩欧美的一区| 成人综合色站| 亚洲制服丝袜av| 在线免费观看不卡av| 福利一区二区在线观看| 久久九九影视网| 欧美高清性xxxxhd| 日韩电影一区二区三区| 欧美美女网站色| 97超碰在线播放| 一区二区三区日本| 欧美羞羞免费网站| 成人的网站免费观看| 国产精品久久久久9999吃药| 日韩三级电影| 国模大尺度一区二区三区| 久久精品亚洲精品国产欧美| 麻豆传媒一区二区| 美国毛片一区二区三区| 精品久久久久一区二区国产| 狠狠色综合一区二区| 天堂成人免费av电影一区| 91精品国产91久久久久久最新毛片 | 久久久久久久久久美女| 欧美性天天影院| 经典一区二区三区| 国产日韩综合av| 亚洲va韩国va欧美va精四季| 韩国精品免费视频| 欧美激情一区二区三区不卡| 午夜午夜精品一区二区三区文| 国产一区二区三区免费| 欧美激情中文字幕一区二区| 亚洲欧洲精品一区二区| 国产成人自拍在线| 中文字幕一区二区视频| 欧美综合一区二区三区| 91手机在线观看| 爽爽淫人综合网网站| 欧美一区二区女人| 久久av一区二区三区亚洲| 久久精品国产亚洲5555| 国产欧美一区二区在线| 中国人体摄影一区二区三区| 不卡电影免费在线播放一区| 一区二区三区四区高清精品免费观看| 欧美日韩免费电影| 国产一区二区自拍| 裸体在线国模精品偷拍| 中文字幕的久久| 欧美三级中文字幕在线观看| 国产欧美日韩一区| 久久99精品国产.久久久久| 中文在线资源观看网站视频免费不卡| 正在播放久久| 91gao视频| 美女性感视频久久| 国产精品理伦片| 欧美日本精品一区二区三区| 精品蜜桃传媒| 国产精品自拍网站| 一区二区三区高清在线| 欧美成人综合网站| 一区二区三区四区欧美日韩| 99热国产免费| 韩国av一区二区三区四区 | 国产亚洲一区二区三区四区| 91九色最新地址|