久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何理解Mybatis源碼

共計(jì) 2638 個(gè)字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“如何理解 Mybatis 源碼”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

為什么糾結(jié)?

因?yàn)槊嬖嚨臅r(shí)候,面試官很喜歡問(wèn):你看過(guò)什么框架源碼?JDK 源碼也行。

這時(shí)候,如果回答沒(méi)有看過(guò),雖然沒(méi)讓你立馬回去等通知。但也許,你在面試官心中的印象就大打折扣了。

如果回答看過(guò),并且還能較為流利地說(shuō)上一番,那面試官或許會(huì)在心里贊嘆:小伙子可以呀!(PS:很多面試官自己也沒(méi)看過(guò),或者看過(guò)很多也忘了)。

總之,你要是能說(shuō)上個(gè) 123,那給面試官的印象就會(huì)杠杠滴好。何愁工作? 何愁加薪?

為什么煩?

大部分人的情況是:源碼不是沒(méi)有看過(guò),而是每次只看得下一部分。為什么只看得下一部分呢? 通常有下面三種原因:

缺乏技術(shù)支撐。看源碼是需要技術(shù)支撐的,不是隨便一個(gè)小白也能看懂的。沒(méi)有一些技術(shù)支撐,你頂多看看一小段,然后就看不下去,于是就放棄了。

缺乏正確心態(tài)。看源碼確實(shí)挺無(wú)聊的,如果大家心態(tài)沒(méi)放好,把它當(dāng)做一種任務(wù)去做,肯定覺(jué)得無(wú)聊,而且很容易放棄。

缺乏足夠時(shí)間。確實(shí)很忙,經(jīng)常看了一部分后,天天加班,沒(méi)時(shí)間看,忙完后又忘了之前正在看的某某源碼。

個(gè)人建議

對(duì)于一般 java 程序員來(lái)說(shuō),閱讀源碼之前到底需要些什么技能呢?

個(gè)人建議,以下基礎(chǔ)知識(shí)必須會(huì)一些:

會(huì)設(shè)計(jì)模式:包括單例模式、工廠模式、代理模式、裝飾器模式、責(zé)任鏈模式、模板方法模式等。

會(huì)猜測(cè):大膽的猜測(cè),在看源碼的時(shí)候,多站在高層次想想,如果你是 Mybatis 的設(shè)計(jì)者,你會(huì)怎么設(shè)計(jì)?

會(huì)挑重點(diǎn)看:別被沒(méi)寫參數(shù)校驗(yàn)、類型校驗(yàn)等問(wèn)題卡在那里。

會(huì)畫圖:流程圖、類圖等,找一些在線畫圖工具,媒體畫完就保存下來(lái),如果中途一段時(shí)間不看了,再回頭看看這些圖,也能快速繼續(xù)。

Mybatis 源碼分析

今天,我們就來(lái)看看 Mybatis 源碼的閱讀,具體舉個(gè)例子來(lái)看看:

案例和疑問(wèn)

從我們最初的 demo 中開(kāi)始:

public static void main(String[] args) { String resource =  mybatis-config.xml  InputStream inputStream = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); User user = sqlSession.selectOne(com.tian.mybatis.mapper.UserMapper.selectById , 1); System.out.println(user); } catch (Exception e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } sqlSession.close(); } }

關(guān)于獲取數(shù)據(jù)流 inputStream,這個(gè)我們就不討論了,我們主要關(guān)注重點(diǎn)。

對(duì)于上面 demo,我們可以分成五個(gè)步驟:

第一步,創(chuàng)建一個(gè)工廠類 sqlSessionFactory。

配置文件的解析就是在這里完成的。包括 mybatis-config.xml 和我們的 Mapper.xml 映射器文件。這一步我們關(guān)心的內(nèi)容是:解析的時(shí)候做了什么? 產(chǎn)生了什么對(duì)象,解析的結(jié)果放在哪里的。因?yàn)檫@將意味著,我們后面使用的時(shí)候去哪里獲取這項(xiàng)配置項(xiàng)內(nèi)容。

第二步,通過(guò) SqlSessionFactory 創(chuàng)建一個(gè) SqlSession。

那么問(wèn)題來(lái)了,SqlSession 中定義了各種增刪改查的 API,是給客戶端調(diào)用,返回的是什么實(shí)現(xiàn)類? 除了 SqlSession 以外,我們還創(chuàng)建了什么對(duì)象,創(chuàng)建了什么環(huán)境?

第三步,獲取到一個(gè) Mapper 對(duì)象。

問(wèn)題來(lái)了 UserMapper.java 是一個(gè)接口,并沒(méi)有為它創(chuàng)建實(shí)現(xiàn)類,那又是怎么被實(shí)例化的呢? 我們使用的這個(gè) Mapper 對(duì)象到底是什么對(duì)象呢? 為什么要從 SqlSession 里去獲取呢? 為什么傳進(jìn)去一個(gè)接口,然后還要用一個(gè)接口去接收呢?

第四步,調(diào)用接口方法。

問(wèn)題是我們的接口沒(méi)有實(shí)現(xiàn)類,為什么就可以直接調(diào)用它的方法呢? 那它調(diào)用的是誰(shuí)的方法呢? 是如何把 SQL 給關(guān)聯(lián)起來(lái)的呢? 是如何獲取到數(shù)據(jù)的呢?

第五步,關(guān)閉相關(guān)資源。

開(kāi)始源碼分析過(guò)程

由于涉及到內(nèi)容較多,下面就用幾張圖來(lái)展示整個(gè)流程。我們可以通過(guò)這幾張圖來(lái)快速翻閱 Mybatis 的源碼。

第一步

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

這一句代碼的整個(gè)流程如下:

根據(jù) inputStream,解析配置文件,創(chuàng)建出一個(gè) DefaultSqlSessionFactory 默認(rèn)的 SqlSessionFactory   實(shí)現(xiàn)類。構(gòu)建出一個(gè)工廠類,這個(gè)工廠類專門用來(lái)創(chuàng)建 SqlSession 對(duì)象的。

第二步

SqlSession sqlSession = sqlSessionFactory.openSession();

獲取 SqlSession 的整個(gè)流程如下:

第三步

User user = sqlSession.selectOne(com.tian.mybatis.mapper.UserMapper.selectById , 1);

第三步和第四步就是這行代碼畫的。

這一步是返回一個(gè)映射器代理類,映射器代理類專門用來(lái)給 UserMapper 接口和 UserMapper.xml 綁定的代理類。創(chuàng)建出來(lái)的代理類就可以實(shí)例化了,然后就可以調(diào)用 UserMapper 接口的方了。

第四步:調(diào)用代理對(duì)象執(zhí)行 SQL 的整個(gè)過(guò)程。

第五步,關(guān)閉資源。

“如何理解 Mybatis 源碼”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計(jì)2638字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 成武县| 新和县| 望城县| 杨浦区| 四会市| 乌拉特后旗| 揭阳市| 锦屏县| 德庆县| 崇信县| 两当县| 子长县| 临高县| 清涧县| 芜湖市| 延长县| 称多县| 上思县| 防城港市| 西盟| 阜新市| 南靖县| 吉隆县| 和田县| 张家口市| 东阿县| 昭苏县| 河津市| 海伦市| 翼城县| 淳化县| 盐边县| 息烽县| 广东省| 南召县| 景德镇市| 康平县| 长兴县| 青铜峡市| 湖南省| 财经|