MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制
前言
MyBatis 是一個流行的持久層框架,它通過使用XML或注解的方式將SQL語句、存儲過程和Java方法進行綁定,從而避免了手寫大量的JDBC代碼和手動設(shè)置參數(shù)與結(jié)果集。以下是 MyBatis 連接數(shù)據(jù)庫的基本步驟和機制:
MyBatis源碼版本:3.5.16
MyBatis-config.xml 示例
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
1. 讀取配置文件
MyBatis 通過 Resources 類讀取配置文件。配置文件通常是 XML 格式,如 mybatis-config.xml。
關(guān)鍵代碼
String resource = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource)
2. 解析配置文件
SqlSessionFactoryBuilder 使用 XMLConfigBuilder 解析配置文件,將 XML 配置轉(zhuǎn)換為 Java 對象。
關(guān)鍵代碼
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
XMLConfigBuilder 源碼片段
private void parseConfiguration(XNode root) {
try {
// issue #117 先讀取屬性
propertiesElement(root.evalNode("properties"));
Properties settings = settingsAsProperties(root.evalNode("settings"));
loadCustomVfsImpl(settings);
loadCustomLogImpl(settings);
typeAliasesElement(root.evalNode("typeAliases"));
pluginsElement(root.evalNode("plugins"));
objectFactoryElement(root.evalNode("objectFactory"));
objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
reflectorFactoryElement(root.evalNode("reflectorFactory"));
settingsElement(settings);
// read it after objectFactory and objectWrapperFactory issue #631
environmentsElement(root.evalNode("environments"));
databaseIdProviderElement(root.evalNode("databaseIdProvider"));
typeHandlersElement(root.evalNode("typeHandlers"));
mappersElement(root.evalNode("mappers"));
} catch (Exception e) {
throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
}
}
XMLConfigBuilder解析XML配置,并生成Configuration對象。
3. 創(chuàng)建 SqlSessionFactory
Configuration 對象包含了所有配置信息,包括環(huán)境配置、數(shù)據(jù)源配置等。SqlSessionFactoryBuilder 使用 Configuration 創(chuàng)建 DefaultSqlSessionFactory。
關(guān)鍵代碼
public SqlSessionFactory build(Configuration config) {
return new DefaultSqlSessionFactory(config);
}
4. 建立數(shù)據(jù)庫連接
DefaultSqlSessionFactory 創(chuàng)建 SqlSession 時,通過 Environment 配置和 DataSource 獲取數(shù)據(jù)庫連接。
DefaultSqlSessionFactory 源碼片段
public SqlSession openSession() {
return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);
}
openSessionFromDataSource 方法中,DataSource 被用于獲取數(shù)據(jù)庫連接。
關(guān)鍵代碼
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level,
boolean autoCommit) {
//環(huán)境配置
final Environment environment = configuration.getEnvironment();
//事務(wù)工廠
final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
//創(chuàng)建事務(wù)
Transaction tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
//創(chuàng)建執(zhí)行器
final Executor executor = configuration.newExecutor(tx, execType);
//返回SqlSession
return new DefaultSqlSession(configuration, executor, autoCommit);
}
5. 數(shù)據(jù)源配置
DataSource 配置在 mybatis-config.xml 文件中,通過 DataSourceFactory 創(chuàng)建具體的數(shù)據(jù)源實例。
關(guān)鍵代碼
// 獲取數(shù)據(jù)源工廠
String type = context.getStringAttribute("type");
Properties props = context.getChildrenAsProperties();
DataSourceFactory factory = (DataSourceFactory) resolveClass(type).getDeclaredConstructor().newInstance();
factory.setProperties(props);
// 獲取數(shù)據(jù)源
DataSource dataSource = factory.getDataSource();
總結(jié)
MyBatis連接數(shù)據(jù)庫的步驟包括:
- 讀取配置文件:通過
Resources類讀取 XML 文件。 - 解析配置文件:使用
XMLConfigBuilder解析 XML,生成Configuration對象。 - 創(chuàng)建 SqlSessionFactory:使用
SqlSessionFactoryBuilder和Configuration創(chuàng)建DefaultSqlSessionFactory。 - 建立數(shù)據(jù)庫連接:
DefaultSqlSessionFactory創(chuàng)建SqlSession,使用DataSource獲取數(shù)據(jù)庫連接。
以上就是MyBatis連接數(shù)據(jù)庫配置的基本步驟和機制的詳細(xì)內(nèi)容,更多關(guān)于MyBatis連接數(shù)據(jù)庫配置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring的循環(huán)依賴、三級緩存解決方案源碼詳細(xì)解析
這篇文章主要介紹了Spring的循環(huán)依賴、三級緩存解決方案源碼詳細(xì)解析,在Spring中,由于IOC的控制反轉(zhuǎn),創(chuàng)建對象不再是簡單的new出來,而是交給Spring去創(chuàng)建,會經(jīng)歷一系列Bean的生命周期才創(chuàng)建出相應(yīng)的對象,需要的朋友可以參考下2024-01-01
Java數(shù)據(jù)結(jié)構(gòu)之對象的比較
比較對象是面向?qū)ο缶幊陶Z言的一個基本特征,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之對象的比較,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02
SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫的過程
SQLite是一個緊湊的庫,啟用所有功能后,庫大小可以小于 750KiB, 具體取決于目標(biāo)平臺和編譯器優(yōu)化設(shè)置, 內(nèi)存使用量和速度之間需要權(quán)衡,這篇文章主要介紹了SpringBoot項目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫,需要的朋友可以參考下2024-07-07
Java使用pdfbox實現(xiàn)給pdf文件加圖片水印
有時候需要給pdf加水印,市面上工具都是收費的要會員,還是自食其力吧;嘗試過 spire.pdf.free 那個超過10頁就不行了!所以本文還是使用了pdfbox,感興趣的可以了解一下2022-11-11
mybatis-plus之如何實現(xiàn)in嵌套sql
這篇文章主要介紹了mybatis-plus之如何實現(xiàn)in嵌套sql問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例
這篇文章主要介紹了Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例,非常具有實用價值,需要的朋友可以參考下2017-05-05

