在sqlsessionfactorybuilder中存在這樣乙個方法,所有的的build都會呼叫下面的這個方法
public sqlsessionfactory build(inputstream inputstream, string environment, properties properties) catch (exception e) finally catch (ioexception e)
}}
public configuration parse()
parsed = true;
// 此處的去解析configuration配置的**
parseconfiguration(parser.evalnode("/configuration"));
return configuration;
}
private
void
parseconfiguration(xnode root) catch (exception e)
}
url=""/>
private
if (parent
!=null) else else
if (resource ==
null
&& url !=
null
null) else
if (resource ==
null
&& url ==
null
null) else }}
}}
進入到configuration類中,我們可以看到三個方法
/**
* 將指定包下面的指定介面進行載入
*/public
void
} /**
* 載入指定包下面的所有介面
*/public
void
} /**
* 載入指定的介面
*/public
void
}
public
class
private
final configuration config;
private
public
this.config = config;
} @suppresswarnings("unchecked")
public
throw
}try catch (exception e)
} public
boolean
} public
void
// 是否是介面
if (type.isinte***ce())
boolean loadcompleted = false;
try finally }}
} /**
*@since 3.2.2
*/} /**
*@since 3.2.2
*/public
void
// 構建解析過濾器
resolverutil> resolverutil = new resolverutil>();
// 過濾查詢packagename下面所有的supertype類的子類或者實現類
resolverutil.find(new resolverutil.isa(supertype), packagename);
// 將查詢到的所有類進行新增
}} /**
*@since 3.2.2
*/public
void
} }
string resource = type.tostring();
if (!configuration.isresourceloaded(resource))
} catch (incompleteelementexception e) }}
parsependingmethods();
從上述的流程中,我們可以看到乙個loadxmlresource()方法,我們繼續進入到這個方法。
private
void loadxmlresource() catch (ioexception e)
if (inputstream != null)
}}
MyBatis原始碼解析之JdbcType
注意 今天遇到乙個問題。resultcolumn gmt create jdbctype date property gmtcreate resultcolumn gmt modified jdbctype date property gmtmodified 執行出來的時間只有年月日。這個就尷尬了。...
mybatis原始碼解析
最近閱讀了許久的mybatis原始碼,小有所悟。同時也發現網上有許多優秀的mybatis原始碼講解博文。本人打算把自己閱讀過的 覺得不錯的一些博文列出來。以此進一步加深對mybatis框架的理解。其實還有乙個目的是,本人也想寫一系列博文來分享自己對mybatis的理解。然而。個人文筆太差,列出的這些...
mybatis原始碼解析
類列表 sqlsessionfactory 說明 sqlsession物件的工場用於建立sqlsession。sqlsession 說明 執行sql的介面類。configuration 說明 資料庫連線和sql語句配置類。executor 說明資料操作方法介面類 步驟 載入xml檔案到xmlconf...