手寫自己的MyBatis框架-SqlSession
我們已經分析了MeBatis 的主要物件和操作流程,應該從哪裡入手?
當我們在psvm 操作的時候,第一個需要的物件是SqlSession。所以我們從應用層的介面SqlSession 入手。
那麼我們先來建立一個package,它是我們手寫的MeBatis ,我們建一個包叫mebatis。
首先我們建立一個自己的SqlSession,叫SqlSession。
根據我們剛才總結的流程圖,SqlSession 需要有一個獲取代理物件的方法,那麼這個代理物件是從哪裡獲取到的呢?是從我們的配置類裡面獲取到的,因為配置類裡面有介面和它要產生的代理類的對應關係。
所以,我們要先持有一個Configuration 物件,叫GPConfiguration,我們也建立這個類。除了獲取代理物件之外,Configuration 裡面還儲存了我們的介面方法(也就是statementId)和SQL 語句的繫結關係。
第二個,我們在SqlSession 中定義的運算元據庫的方法,最後都會呼叫Executor去運算元據庫,所以我們還要持有一個Executor 物件,叫Executor,我們也建立它。
// SqlSession.java
private Configuration configuration;
private Executor executor;
除了這兩個屬性之外,我們還要定義SqlSession 的行為,也就是它的主要的方法。
第一個方法是查詢方法,selectOne(),由於它可以返回任意型別,我們把返回值定義成<T> T 泛型。selectOne()有兩個引數,一個是String 型別的statementId,我們會根據它找到SQL 語句。一個是Object 型別的parameter 引數(可以是Integer 也可以是String 等等,任意型別),用來填充SQL 裡面的佔位符。
它會呼叫Executor 的query()方法,所以我們建立Executor 類,傳入這兩個引數,一樣返回一個泛型。Executor 裡面要傳入SQL,但是我們還沒拿到,先用statementId代替。
// SqlSession.java
public <T> T selectOne(String statementId, Object parameter){
String sql = statementId; // 先用statementId 代替SQL
return executor.query(sql, parameter);
}
// Executor.java
public <T> T query(String sql, Object paramater ) {
return null;
}
第二個方法是獲取代理物件的方法,我們通過這種方式去避免了statementId 的硬編碼。
我們在SqlSession 中建立一個getMapper()的方法,由於可以返回任意型別的代理類,所以我們把返回值也定義成泛型<T> T。我們是根據介面型別獲取到代理物件的,所以傳入引數要用型別Class。
// SqlSession.java
public <T> T getMapper(Class clazz){
return null;
}
相關文章
- 淺析MyBatis(二):手寫一個自己的MyBatis簡單框架MyBatis框架
- 手寫mybatis框架MyBatis框架
- MyBatis sqlSession概要梳理MyBatisSQLSession
- Mybatis原理和SqlSessionMyBatisSQLSession
- Mybatis的核心——SqlSession解讀MyBatisSQLSession
- 自己動手寫 PHP 框架(一)PHP框架
- Mybatis原始碼解析4——SqlSessionMyBatis原始碼SQLSession
- 自己動手寫一個持久層框架框架
- 自己動手寫一個簡單的MVC框架MVC框架
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis
- 手寫mybatis框架-增加快取&事務功能MyBatis框架快取
- Mybatis詳解(二) sqlsession的建立過程MyBatisSQLSession
- 自己動手寫Android資料庫框架Android資料庫框架
- 自己手寫一個SpringMVC框架(簡化)SpringMVC框架
- 自己動手寫DB資料庫框架(增)資料庫框架
- Mybatis環境搭建以及案例 SqlSession物件的方法MyBatisSQLSession物件
- 自己動手寫Web自動化測試框架Web框架
- MyBatis-06-Spring的SqlSession和原始區別MyBatisSpringSQLSession
- Mybatis【2.2】-- Mybatis關於建立SqlSession原始碼分析的幾點疑問?MyBatisSQLSession原始碼
- 如果你想寫自己的Benchmark框架框架
- 自己動手寫Web自動化測試框架(7):框架架構的設計Web框架架構
- 手寫一個自己的PromisePromise
- 自己動手寫PromisePromise
- 模仿vue自己動手寫響應式框架(三) - dom解析Vue框架
- 自己動手寫Web自動化測試框架(1) :概述Web框架
- 從 0 開始手寫一個 Mybatis 框架,三步搞定!MyBatis框架
- 核心技術靠化緣是要不來的——自己動手寫ORM框架ORM框架
- 模仿vue自己動手寫響應式框架(二) - Vue物件建立Vue框架物件
- 自己手寫的JS小工具JS
- 為什麼我要寫自己的框架?框架
- mybatis底層原理學習(一):SqlSessionFactory和SqlSession的建立過程MyBatisSQLSession
- 自己動手寫Web自動化測試框架(6):自動化測試框架的規劃Web框架
- 模仿vue自己動手寫響應式框架(四) - Vue物件構建Vue框架物件
- 閉關修煉180天--手寫持久層框架(mybatis簡易版)框架MyBatis
- 你也可以手寫自己的Promise(一)Promise
- 自己編寫Java Web框架:Takes框架的Web App架構JavaWeb框架APP架構
- 手寫RPC框架RPC框架
- 手寫Spring框架Spring框架