深入理解MyBatis 初始化

2021-08-14 09:01:25 字數 2683 閱讀 7540

我們知道使用mybatis前是需要初始化的,我們來看一段**:

string resource = "mybatis.xml"

; inputstream inputstream = resources.getresourceasstream(resource);

sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream);

sqlsession sqlsession = sqlsessionfactory.opensession();

上述**所經歷的階段:

1.讀取配置檔案並建立sqlsessionfactory

2.獲得sqlsession

3.執行查詢

而mybatis的初始化就在階段1中,更準確的說是在第三行**,根據配置檔案,創建立sqlsessionfactory物件。那就讓我們看一看這一行**究竟發生了什麼。

public sqlsessionfactory build(inputstream inputstream) 

public sqlsessionfactory build(inputstream inputstream, string environment, properties properties) catch (exception e) finally catch (ioexception e)

}}public sqlsessionfactory build(configuration config)

說明:根據傳入的inputstream, environment, properties建立xmlconfigbuilder物件,xmlconfigbuilder.parse()用來將inputstream建立成乙個configuration物件,然後在呼叫build(configuration config)方法返回defaultsqlsessionfactory。

那麼parse()方法是如何實現的呢?

parse()方法原始碼:

public configuration parse() 

parsed = true;

"/configuration")返回乙個xnode 物件

//parseconfiguration(xnode)將配置檔案中配置的資訊解析並設定到configuration物件中

parseconfiguration(parser.evalnode("/configuration"));

return configuration;

} private

void

parseconfiguration(xnode root) catch (exception e)

}

說明:parser.evalnode(「/configuration」)返回乙個xnode 物件,我們看一下evalnode方法,我們發現xnode是取自xpathparser的。

xpathparser.evalnode原始碼:

public xnode evalnode(string expression) 

public xnode evalnode(object root, string expression)

return

new xnode(this, node, variables);

}

xpathparser類:

public

class xpathparser

我們需要關注一下document物件和entityresolver物件。

document物件:包含了xml配置資訊

entityresolver:包含了xml中的dtd資訊

因此,xmlconfigbuilder呼叫parse()方法:會從xpathparser中取出 configuration節點對應的xnode物件,然後解析此xnode節點的子,產生configration物件。

至此,xmlconfigbuilder的parse()就分析完成了。

我們再來看第三行**

//看這裡

sqlsessionfactory sqlsessionfactory = new sqlsessionfactorybuilder().build(inputstream);

//將第三行**改為如下三行**

//第一步建立xmlconfigbuilder

xmlconfigbuilder parser = new xmlconfigbuilder(inputstream, null,null);

//第二步:執行parse()得到代表配置檔案的configuration物件

configuration config = parser.parse();

//根據configuration建立defaultsqlsessionfactory2

sqlsessionfactory = new defaultsqlsessionfactory(config);

mybatis的初始化就是上述過程。

深入理解final變數的初始化

final變數的初始化位置 一是其定義處,也就是說在final變數定義時直接給其賦值,二是在建構函式中。而且在j a1.1以前,只能是在定義時給值。三是在初如化 塊中 或者 static 複製 如下 public class initorder static final int a1 1 final...

初始化 MyBatis初始化之載入初始化

在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...

MyBatis之初始化

mybatis初始化的主要工作是載入並解析mybatis config.xml配置檔案 對映配置檔案以及相關的註解資訊。mybatis初始化的入口是 sqlsessionfactorybuilder build reader reader,string environment,properties ...