mybatis源碼初探-----從新認識oop(一)

問題:爲何要從新認識oop?最近老是會發現這樣的問題:(1)如何準確的命名一個對象?(2)如何把握系統結構sql

分析:對象是這樣解釋的:由一組屬性和一系列的行爲構成的一個基本單位數據庫

由此來看對象有兩個重要特徵:屬性和行爲mybatis

(1)針對於第一個問題,如何準肯定義一個對象?生活中有一個經典例子app

人(object)函數

姓名,性別,年齡.....(property)oop

吃飯,睡覺......(action)ui

對象 ‘人’ 有這麼多屬性,有這麼多行爲。反過來來講有這些行爲屬性特徵的東西叫作 ‘人’this

一般的,先有對象,再蒐集屬性和行爲較爲順遂。可是總會遇到,根據一系列行爲和屬性去概括總結創造對象這種狀況,那麼如何科學的概括,如何命名將成爲一個問題,由於咱們將要創造新的詞語並賦予它特定的含義。3d

舉個例子xml

某對象

兩棲動物,綠色(property)

跳(action)

概括爲 青蛙(object)

(2)如何把握分層結構,該怎麼分層,如何分層

好比

男,女

大人,小孩

又好比mybatis執行流程

那麼咱們如何科學把握這個分層標準

begin

1,引入jar包 mybatis和數據庫驅動包

2,新建數據表

3,新建三個類,bean,dao,xml

4,test

以下

未看源碼以前  當前來看 mybatis執行分爲以下幾步

1,加載數據庫配置文件生成sqlSession

2,sqlSession加載dao類

3,執行dao類的方法

到此 產生如下問題

1,第三步dao類的方法執行後獲得結果集。目前來看它和jdbc沒有任何關係,它是如何和數據庫交互的?

2,dao類是個接口,沒有實現方法,它是如何 接口.方法 就能執行xml的sql語句?

3,它是如何自動關聯bean的?

帶着以上三個問題開始閱讀源碼

打開SqlSessionFactory

發現SqlSessionFactory是個接口,有兩個實現類 DefaultSqlSessionFactory和SqlSessionManager

uml類圖以下

回到使用的第一步

new SqlSessionFactoryBuilder().build(reader);

因此應當找到SqlSessionFactoryBuilder

打開SqlSessionFactoryBuilder

一路跟進來到了這個地方

實例化了XMLConfigBuilder一個並返回了DefaultSqlSessionFactory實例

所以

SqlSession sqlSession = sqlSessionFactory.openSession();
userDao interObject=sqlSession.getMapper(userDao.class);

執行的是DefaultSqlSessionFactory的行爲

繼續打開XMLConfigBuilder

發現XMLConfigBuilder繼承自BaseBuilder

暫停一下,仔細觀察XMLConfigBuilder繼承自BaseBuilder,BaseBuilder有個參數爲Configuration類型的構造方法,但是檢查下子類沒有Configuration類型的構造方法,並且編譯器沒有報錯?wtf?發生了什麼事?

驗證一下這個想法

仔細閱讀源碼,發現

ok,從這裏將get到至少兩個知識點

1,父類如果有有參的構造方法,那麼繼承的子類必須顯式 super一下,若父類如果沒有參的構造方法,會隱式的super

2,

this這裏是什麼?咱們知道 this.變量,this.函數,this表明的是對象,可是在這個地方很明顯對象還未建立,那麼它是什麼?百度查到this也能夠表明引用,那麼就很好解釋了,這裏的this表示本類的引用,進入testA();又去引用testA(String name, String pass);按照這個猜測testA(),引用完仍會執行下面的代碼。試一下

猜測正確

相關文章
相關標籤/搜索