国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Mybatis源碼解析(一)(2015年06月11日)

2019-11-15 00:33:39
字體:
來源:轉載
供稿:網友
Mybatis源碼解析(一)(2015年06月11日)

一、簡介

先看看Mybatis的源碼結構圖,Mybatis3.2.7版本包含的包共計19個,其他版本可能會少。

clipboard

每個基于 MyBatis 的應用都是以一個 SqlsessionFactory 的實例為中心的,SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得,而 SqlSessionFactoryBuilder 則可以從 xml 配置文件或一個預先定制的 Configuration 的實例構建出 SqlSessionFactory 的實例。獲取SqlSessionFactory 之后便可以獲取SqlSession,SqlSession中包含了一系列操作數據庫的增刪查改的方法。

所以Mybatis的三個重要核心就是:SqlSessionFactoryBuilder 、SqlSessionFactory 、SqlSession

二、源碼解析

1、SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 、SqlSessionFactory 、SqlSession這三個類都位于session包下,這是SqlSessionFactoryBuilder類結構圖

clipboard[1]

類中的9個build方法都是為了創建并返回SqlSessionFactory對象,根據參數類型,實際上可以分為三類方法

1.以Configuration對象為參數的創建

2.以InputStream對象為參數的創建

3.以Reader對象為參數的創建

但實際上最重要的是以Configuration對象的build方法,因為以InputStream、Reader對象為參數的build方法最后都是通過讀取xml配置文件,創建Configuration對象,并調用以Configuration對象為參數的build方法,最終返回DefaultSqlSessionFactory對象,以下是源碼

public SqlSessionFactory build(Reader reader, String environment, PRoperties properties) {    SqlSessionFactory var5;    try {        XMLConfigBuilder e = new XMLConfigBuilder(reader, environment, properties);        var5 = this.build((Configuration)e.parse());    } catch (Exception var14) {        throw ExceptionFactory.wrapException("Error building SqlSession.", var14);    } finally {        ErrorContext.instance().reset();        try {            reader.close();        } catch (IOException var13) {            ;        }    }    return var5;}
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {    SqlSessionFactory var5;    try {        XMLConfigBuilder e = new XMLConfigBuilder(inputStream, environment, properties);        var5 = this.build((Configuration)e.parse());    } catch (Exception var14) {        throw ExceptionFactory.wrapException("Error building SqlSession.", var14);    } finally {        ErrorContext.instance().reset();        try {            inputStream.close();        } catch (IOException var13) {            ;        }    }    return var5;}
public SqlSessionFactory build(Configuration config) {    return new DefaultSqlSessionFactory(config);}

2、SqlSessionFactory

SqlSessionFactory是一個接口,其實真實干活的事它的實現類DefaultSqlSessionFactory,SqlSessionFactory顧名思義它是一個SqlSession的工廠類,其作用主要也是向外提供SqlSession,還有一個作用就是可以獲取Configuration對象

public interface SqlSessionFactory {    SqlSession openSession();    SqlSession openSession(boolean var1);    SqlSession openSession(Connection var1);    SqlSession openSession(TransactionIsolationLevel var1);    SqlSession openSession(ExecutorType var1);    SqlSession openSession(ExecutorType var1, boolean var2);    SqlSession openSession(ExecutorType var1, TransactionIsolationLevel var2);    SqlSession openSession(ExecutorType var1, Connection var2);    Configuration getConfiguration();}

提供8中獲取SqlSession的方法,涉及的參數主要有:自定義連接、事物隔離級別、ExecutorType(Statement類型【普通、預處理、批處理】)

這里需要注意的是openSession方法不是默認自動提交事物的。

3、SqlSession

SqlSession同樣是一個接口,實際干活的也是它的實現類DefaultSqlSession,這是它的類結構圖

clipboard[2]

從圖中我們可以看出,SqlSession的作用主要是提供數據庫的一些基本操作。


上一篇:java中的遞歸方法

下一篇:SSH免登陸

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兰县| 台江县| 会同县| 宝清县| 惠东县| 新津县| 乌鲁木齐市| 天水市| 弋阳县| 淳安县| 厦门市| 鄄城县| 阜城县| 泗洪县| 会泽县| 河源市| 扎鲁特旗| 庆城县| 临澧县| 集安市| 叙永县| 永宁县| 广灵县| 灌南县| 天台县| 海丰县| 射洪县| 姜堰市| 嘉兴市| 安图县| 乌鲁木齐县| 板桥市| 景德镇市| 阿尔山市| 辛集市| 沁阳市| 廉江市| 邹城市| 祥云县| 南投市| 祥云县|