日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手写自己的MyBatis框架-SqlSession

發布時間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手写自己的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 代替SQLreturn 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框架-SqlSession的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。