前言:本文主要闡述mybatis中的核心原理,省略了其他跟核心原理相對來說沒那麼重要的部分。先來一段mybatis的簡單使用**:
public class userdaotest catch (ioexception e)
sqlsession sqlsession = sessionfactory.opensession();
assert.assertnotnull("沒找到資料", user);
}}
上面是我在網上隨便找的一段mybatis的簡單使用步驟,我們就根據上述**來分析一下mybatis的實現過程。
第一步:首先框架肯定需要去獲取使用者配置的檔案(sqlmapconfig.xml)並解析,這裡先寫兩個必要的配置資訊:
了解完兩個基礎的物件之後,我們開始繼續分析,下面就應該是解析使用者配置檔案:
public class sqlsessionfactorybuilder catch (exception e) finally catch (ioexception e)
}} public sqlsessionfactory build(configuration config)
}
第二步:獲取到了sqlsessionfactory,我們就可以直接用sqlsessionfactory.openseession來獲取sqlsession物件。
這一步可以說是mybatis原理中比較重要的一步了,在前面的描述中,我們已經知道了在構建sqlsessionfactory的時候需要configuration 物件,因此sqlsessionfactory就持有了configuration物件,然後在呼叫opensession()的時候,configuration物件也會被當做入參繼續傳遞下去,關鍵**如下圖:
public class defaultsqlsessionfactory implements sqlsessionfactory
public sqlsession opensession()
}
接續跟進opensessionfromdatasource方法:
private sqlsession opensessionfromdatasource(executortype exectype, transactionisolationlevel level, boolean autocommit) catch (exception e) finally
}
我們可以發現在opensessionfromdatasource方法中,configuration物件會產生乙個執行器executor ,並且這個executor 物件是作為的defaultsqlsession的建構函式的入參,進入defaultsqlsession,我們可以看到任意找乙個增刪查改的方法,底層都是呼叫的這個executor物件來執行,
public class defaultsqlsession implements sqlsession
//查詢方法
public listselectlist(string statement, object parameter, rowbounds rowbounds) catch (exception e) finally
}}
繼續跟進去executor.query()方法,找到executor的乙個實現類baseexecutor,可以看到以下**
resulthandler resulthandler) throws sqlexception
ms.getboundsql()的作用就是解析組裝sql,boundsql物件就可以看做成一條已經可以執行的sql;
createcachekey()的作用就是看這次查詢的結果是否已經有過快取,關於mybatis的一級快取和二級快取,篇幅問題就下次在寫吧。。
繼續跟baseexecutor.query(ms, parameter, rowbounds, resulthandler, key, boundsql),找到******executor,
statement stmt = null;
try finally
} 中間省略繼續跟進的過程。。。總之也就是jdbc中過程,最後我們關注到如何把查詢出來的結果集轉換成我們的實體物件的,最後定位到defaultresultsethandler的handleresultsets方法。
public listhandleresultsets(statement stmt) throws sqlexception
if (resultsets != null)
rsw = getnextresultset(stmt);
cleanupafterhandlingresultset();
resultsetcount++;}}
return collapsesingleresultlist(multipleresults);
}
未完待續。。。。 ssh框架基本原理
由ssh構建系統的基本業務流程是 1 在表示層中,首先通過jsp頁面實現互動介面,負責傳送請求 request 和接收響應 response 然後struts根據配置檔案 struts config.xml 將actionservlet接收到的request委派給相應的action處理。2 在業務層...
Spring框架的基本原理
一 spring基本概念 1 struts2是web框架,hibernate是orm框架 2 spring是容器框架,建立bean,維護bean之間的關係 3 spring可以管理web層,持久層,業務層,dao層,spring可以配置各個層的元件,並且維護各個層的關係 二 spring核心原理 1...
Angular框架的基本原理
最近公司在研發新的web平台,對於前端的開發最終選定使用angular框架進行開發,而經過這一段時間的學習與研究,基本可以使用其進行前端業務的開發,在此將angular框架的基本原理知識進行簡單總結,並使用primeng元件庫來實現簡單的應用開發,這裡說的是指angular2以後的版本。1 angu...