我們知道使用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 ...