問題:爲何要從新認識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(),引用完仍會執行下面的代碼。試一下
猜測正確