1. MyBatis 核心配置檔案詳細內容詳解
@
- 1. MyBatis 核心配置檔案詳細內容詳解
- 2. 測試和學習的準備工作
- 3. environment 標籤
- 4. transactionManager 標籤
- 5. dataSource 標籤
- 6. properties 標籤
- 7. mapper 標籤
- 8. 總結:
- 9. 最後:
關於 MyBatis 這個核心配置檔案mybatis-config.xml
檔名,不是固定的,所放的位置也不是固定的。
只是大家都這麼命名,而位置,將該配置檔案放到 resources 類的根路徑下,移植性更好,使用起來也是更加的方便一些。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mybatis">
<environment id="mybatis">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
mybatis-confg.xml ,也就是MyBatis 的核心配置檔案,主要配置連線資料庫的資訊等(**一般一個資料庫,對應一個這個MyBatis 的核心配置檔案),同樣的與之對應的透過
mybatis-config.xml 核心配置檔案'
所建立的物件:SqlSession FactoryBuilder,SqlSessionFactory 也是一個資料庫相對應上一個物件。
MyBatis 核心配置檔案的標籤,屬性的簡單說明:如下:
-
configuration : 根標籤,表示配置資訊
-
environments : 配置環境(在MyBatis 的核心配置檔案當中,可以配置多個),注意:一般
s
結尾表示複數,也就是說MyBatis 的環境可以配置多個資料來源.- default 屬性:表示預設使用的是哪個環境,default後面填寫的是 environment 的 id,default的值只需要和 environment 的 id 的值保持一致即可 。
-
envrionment:具體的環境變數(主要包括:事務管理的配置+資料來源的配置資訊 )
- id:給當前環境一個唯一的標識,該標識用 environments 的default 後面,用來指定預設環境的選擇。
-
transactionManager:配置事務管理器
- type屬性:指定事務管理器具體使用什麼方式,可選值包括兩個。
- JDBC:使用 JDBC 原生的事務管理機制,底層管理:事務開啟conn.setAutoCommit(false);...處理業務,事務提交 conn.commit( )
- MANAGED:交給其他容器來管理事務,比如:WebLogic,JBOSS,Spring等第三方框架進行事務的管理控制,如果沒有設定第三方的框架管理的話,則就沒有事務上的控制的了,沒有事務(就是隻要執行一條DML語句,則提交一次)
-
dataSource:指定資料來源
- type 屬性:用來指定具體使用的資料庫練級池的策略(也就是設定引數),可選值包括三個:
UNPOOLED:採用傳統的獲取連線的方式,雖然也實現了
javax.sql.DataSource
介面,但是並沒有使用池的思想。
- property 屬性下可以設定:
driver 這是JDBC驅動的Java類全限定名 url 這是資料庫的JDBC URL 地址 usarname 登入資料庫的使用者名稱 password 登入資料庫的密碼 defaultTransactionlsolationLevel 預設的連線事務隔離級別 defaultNetworkTimeout 等待資料庫操作完成的預設網路超時實際(單位:毫秒)
- POOLED:採用傳統的
javax.sql.DataSource
規範中的連線池,MyBatis 中有針對規範的實現。- 在 POOlED 中的設定下的,property 可以是(除了包含 UNPOOLED中之外):
poolMazimunmActiveConnections 在任意時間可存在的活動(正在使用)連線數量,預設值 10 poolMaximumldleConnections 任意時間可能存在的空閒連線數。 其它...
- JNDI:採用伺服器提供的JNDI技術實現,來獲取DataSource 物件,不同的伺服器所能拿到 DataSource 是不一樣,如果不是 web 或者 maven 的 war 工程,JNDI 是不能使用的。
- 在JNDI 下的 property 屬性設定,只有兩個值:
initial_context 這個屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))這是個可選屬性,如果忽略,那麼將會直接從 InitialContext 中尋找 data_source 屬性。 data_source 這是引用資料來源例項位置的上下文路徑。提供了 initial_context 配置時會在其返回的上下文中進行查詢,沒有提供時則直接在 InitialContext 中查詢。
簡單的說就是:就是 Web容器(比如Tomcat)當中上面我們使用了資料庫連線池,我們JNDI就只需要獲取到Tomcat(這層我們使用的資料庫連線池)就可以了,不需要再額外的去,搞個資料庫連線池。
mappers:在mappers 標籤中可以配置多個 SQL 對映檔案的路徑。
mapper:配置某個 SQL 對映檔案的路徑
- resource 屬性:使用相對於類路徑的資源引用方式
- url 屬性:使用完全限定資源定位符(URL)方式
MyBatis 核心配置,可以設定的內容,細節是比較多的,上述只是寫明瞭一些比較常用的,一些設定,更多內容大家可以移步至:✏️✏️✏️https://mybatis.net.cn/configuration.html ,瞭解更多細節,配置。
2. 測試和學習的準備工作
兩個 mybatis,mybatis2 資料庫,分別都有t_car 資料表。
t_car 表結構:
對應上的 CarMapper.xml SQL語句的對映檔案的編寫。
這裡因為是測試,所以我們簡單點,直接將其寫固定好了,測試學習,就新增了一個 insert 插入操作了。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="car">
<insert id="insertCar">
insert into t_car values(null,'888','奧迪',30.0,'2000-11-11','燃油車2')
</insert>
</mapper>
在 pom.xml
檔案當中匯入相關的依賴 jar
包內容。如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rianbowsea</groupId>
<artifactId>mybatis-004-configuration-blog</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!-- 引入 logback的依賴,這個日誌框架實現了slf4j 規範-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
</dependencies>
</project>
為了方便看到,相應的變化,這裡我們需要匯入一個;logback日誌框架資訊,同時配置該 logback 日誌框架的配置,需要注意的是:該檔名,必須為"logback.xml" 並且要在類路徑下。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 控制檯輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--mybatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 日誌輸出級別,logback日誌級別包括五個:TRACE < DEBUG < INFO < WARN < ERROR -->
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
3. environment 標籤
<envrioments> 標籤表示:配置環境(在MyBatis 的核心配置檔案當中,可以配置多個),注意:一般s
結尾表示複數,也就是說MyBatis 的環境可以配置多個資料來源.
既然有多個那麼就有預設的了,在 <envrioments> 標籤 中有一個 defalut 屬性值,它是標識預設使用的環境(也就是哪個資料庫)。
預設環境是什麼意思,當你使用mybatis建立 sqlSessionFactory 物件的時候,沒有指定環境的話,預設使用的就是,這裡 default 指定的資料庫的環境-
其中的一個環境,連線的資料庫是 mybatis
一般一個資料庫會對應上一個SqlSessionFactory物件
一個環境environment 對對應上一個SqlSessionFactory物件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mybatis">
<!-- 其中的一個環境,連線的資料庫是 mybatis -->
<!-- 一般一個資料庫會對應上一個SqlSessionFactory物件-->
<!-- 一個環境environment 對對應上一個SqlSessionFactory物件-->
<environment id="mybatis">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="MySQL123"/>
</dataSource>
</environment>
<!--這是 mybatis 的另一個環境,也就是連線的資料庫是另一個資料庫mybatis2-->
<environment id="mybatis2">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis2"/>
<property name="username" value="root"/>
<property name="password" value="MySQL123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
</configuration>
在Java當中使用預設的 enviroment 環境(也就是資料庫)的編碼方式如下:
// 獲取SqlSessionFactory 物件(採用預設的方式)
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 這種方式就是獲取預設的環境,因為你並沒有指明其對應的環境
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));
public void testEnvironment() throws IOException {
// 獲取SqlSessionFactory 物件(採用預設的方式)
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 這種方式就是獲取預設的環境,因為你並沒有指明其對應的環境
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
// 執行sql語句
int count = sqlSession.insert("car.insertCar"); // 完整的 namespace.id
System.out.println(count);
sqlSession.commit();
sqlSession.close();
}
在Java當中使用 指定的 enviroment 環境(也就是資料庫)的 編碼方式如下:
// 獲取SqlSessionFactory 物件(採用預設的方式)
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 這種方式就是透過環境id來使用指定的環境
SqlSessionFactory sqlSessionFactory2 =
sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"), "mybatis2");
public void testEnvironment() throws IOException {
// 獲取SqlSessionFactory 物件(採用預設的方式)
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 這種方式就是透過環境id來使用指定的環境
SqlSessionFactory sqlSessionFactory2 =
sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"), "mybatis2");
SqlSession sqlSession2 = sqlSessionFactory2.openSession();
// 執行SQL語句
int count2 = sqlSession2.insert("car.insertCar");
sqlSession2.commit();
sqlSession2.close();
}
4. transactionManager 標籤
transactionManager 我在這篇文章:✏️✏️✏️ 初始MyBatis ,詳細步驟執行第一個MyBatis程式,同時對應步驟MyBatis底層剖析-CSDN部落格 進行了更加詳細的講解說明,但為了保證文章的完整性,關於 transactionManager 標籤的內容,這裡稍微簡短一些了。
transactionManager標籤
作用:配置事務管理器,指定Mybatis具體使用什麼方式去管理事務
type屬性有兩個值:
- 第一個:JDBC: 使用原生的JDBC程式碼來管理事務
conn.seAutoCommit( false )
...事務
conn.commit( );- 第二個:MANAGED
mybatis 不再負責事務的管理,將事務管理交給其它的JEE(JavaEE)容器來管理。 例如:spring
大小寫無所謂,不區分大小寫,但是不能不寫其他值,只能是二選一( jdbc;managed)
在mybatis中提供了一個事務管理器介面:Transaction;org.apache.ibatis.transaction;
該介面下有兩大實現類
JdbcTransaction
ManagedTransaction
- 如果type="JDBC",那麼底層會例項化JdbcTransaction物件
- 如果type="MANAGED",那麼底層會例項化ManagedTransaction物件
5. dataSource 標籤
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="MySQL123"/>
</dataSource>
dataSource 配置
dataSource 被稱之為 資料來源
dataSource 作用是什麼 ?
為程式設計師提供Connection物件,(但凡是給程式設計師提供 Connection連線物件的,都叫做資料來源)
我們自己也可以編寫資料來源元件,只要實現 javax.sql.DataSource介面就行了,
實現介面當中所有的方法,這樣就有了自己的資料來源了。比如你可以寫一個屬於自己的資料庫連線池(資料庫連線池就是提供連線物件(Connection)的,所以資料庫連線池就是一個資料來源)
<dataSource type="指定資料來源的型別其實就是指定使用哪個資料來源連線池..."
常見的資料來源元件有哪些呢(常見的資料庫連線池有哪些呢)
阿里巴巴的德魯伊資料庫連線池(druid)
c3p0
dbcp
...
type 屬性用來指定資料來源的型別,就是指定具體使用什麼方式來獲取Connection物件
type的屬性有三個值:必須是三選一
也就是 type="[UNPOOLED|POOLED|JNDI]")
- UNPOOLED: 不能使用資料庫連線池技術,每一次請求過來之後,都是建立新的Connection物件。
- POOLED: 使用mybatis 自己實現的資料庫連線池。
- JNDI: 整合其他第三方的資料庫連線池。
連線池優點:每一次獲取連線都從池中拿,效率高。
因為每一次只能從池中拿,所以連線物件的建立數量是可控
JNDI: 是一套規範,誰實現了這套規範呢?大部分的web容器都實現了JNDI規範
例如:Tomcat,Jetty,WebLogic,WebSphere,這些伺服器(容器)都實現了JNDI規範。
JNDI是:Java命名目錄介面,Tomcat伺服器實現了這個規範。
簡單的說,就是 Web容器(比如Tomcat)當中上面我們使用了資料庫連線池,我們JNDI就只需要
獲取到Tomcat(這層我們使用的資料庫連線池)就可以了,不需要再額外的去,搞個資料庫連線池。
<dataSource type="JNDI">
<property name="initial_context" value="..."/>
<property name="data_source" value="..."
當 type 是 UNPOOLED:
<dataSource type="UNPOOLED">
關於 UNPOOLED 型別,有如下引數設定:
UNPOOLED 不會使用連線池,每一次都會新建JDBC連線物件。
測試程式:我們建立,獲取到兩個資料庫物件,看看是是否是同一個。
當 type 是 POOLED:
<dataSource type="POOLED">
採用傳統的 javax.sql.DataSource
規範中的連線池,MyBatis 中有針對規範的實現。
簡單的說:就是 POOLED 是採用的資料庫連線池的機制的,而這個資料庫連線池是MyBatis 自己實現的。因為採用了資料庫連線池,所以我們可以對其進行一些 UNPOOLED 沒有的,資料庫連線池上的引數設定:
注意:正常使用連線池的話,池中有很多的引數需要設定的,設定好引數,可以讓連線池發揮的更好,事半功倍的效果,具體連線池當中的引數如何配置呢?需要反覆的根據當前業務情況進行測試。
關於 POOLED 型別有如下引數設定:
下面我們簡單測試幾個比較重要的引數設定。
<!-- PooolMaximumActiveConnections 連線池當中最多的正在使用的連線物件的數量上限,
最多有多少個連線可以活動,預設值是10-->
<!--最大連線數,預設是10個-->
<property name="poolMaximumActiveConnections" value="10"/>
<!-- 每隔兩秒列印日誌,並且嘗試獲取連線物件-->
<property name="poolTimeToWait" value="2000"/>
<!-- 強行讓某個連線空間,超時間的設定,等待10,簡單的說就是(沒有多餘連線的時候,等待10秒,就會強制關閉其中的一個連線,給你用)-->
<property name="poolMaximumCheckoutTime" value="10000"/>
<!-- 假設最多的連線數是10個
最多空間的數量是:5個
假設目前已經空閒5個,馬上第6個要空閒了。
假設第6個空閒下來了,此時連線池為了保證最多空閒的數量5個,會真正關閉多餘的空閒的連線物件。
-->
<!-- 最多的空閒數量-->
<property name="poolMaximumIdleConnections" value="5"/>
執行測試:
首先我們測試一下:我們建立,獲取到兩個資料庫物件,看看是是否是同一個。從而判斷出是否使用了資料庫連線池。
二,測試引數當中的配置資訊,
public void testDataSourcePoolMaximumActiveConnections() throws IOException {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// SqlSessionFactoryBuilder物件,一個資料庫一個,不要頻繁建立該物件
SqlSessionFactory sqlSessionFactory =
sqlSessionFactoryBuilder.build(Resources.getResourceAsReader("mybatis-config.xml"),"mybatis");
// 透過sqlSessionFactory物件可以開啟多個會話
// 會話1
for (int i = 0; i < 12; i++) {
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.insert("car.insertCar");
// 不要關閉
}
}
poolMaximumActiveConnections:最大的活動的連線數量。預設值10
poolMaximumIdleConnections:最大的空閒連線數量。預設值5
poolMaximumCheckoutTime:強行迴歸池的時間。預設值20秒。
poolTimeToWait:當無法獲取到空閒連線時,每隔20秒列印一次日誌,避免因程式碼配置有誤,導致傻等。(時長是可以配置的)
當然,還有其他屬性。對於連線池來說,以上幾個屬性比較重要。
最大的活動的連線數量就是連線池連線數量的上限。預設值10,如果有10個請求正在使用這10個連線,第11個請求只能等待空閒連線。
最大的空閒連線數量。預設值5,如何已經有了5個空閒連線,當第6個連線要空閒下來的時候,連線池會選擇關閉該連線物件。來減少資料庫的開銷。
需要根據系統的併發情況,來合理調整連線池最大連線數以及最多空閒數量。充分發揮資料庫連線池的效能。【可以根據實際情況進行測試,然後調整一個合理的數量。】
透過測試得出:UNPOOLED不會使用連線池,每一次都會新建JDBC連線物件。POOLED會使用資料庫連線池。
當 type 是 JNDI:
<dataSource type="JNDI">
JNDI的方式:表示對接JNDI伺服器中的連線池。這種方式給了我們可以使用第三方連線池的介面。如果想使用dbcp、c3p0、druid(德魯伊)等,需要使用這種方式。並且該連線方式必須在 web 專案 下才有效果。關於這一點,我會在後續的內容補上,並附上相關連結,這裡說一聲抱歉。
6. properties 標籤
MyBatis 提供了更加靈活的配置,連線資料庫的資訊可以單獨寫到一個xxx.properties
屬性資原始檔中,假設在類的根路徑下建立 jdbc.properties
檔案,配置如下:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis2
jdbc.username=root
jdbc.passwords=MySQL123
注意:以
properties
字尾的檔案,在編寫其中的內容的時候:無論是開頭,中間,還是結尾都不要加空格,不然空格會被識別到的,容易出錯
我們想要實現的是:
將連線資料庫的資訊,單獨放到
jdbc.properties
檔案中,然後,在mybatis-config.xml
MyBatis 的核心配置檔案中,引入jdbc.properties
檔案當中的資訊。
首先我們需要在:mybatis-config.xml
MyBatis 的核心配置檔案中,引入 該jdbc.properties
檔案,使用:<properties> 標籤。
<properties> 標籤當中有兩個屬性值:分別是 :resource ,url
- resource : 表示從類的路徑下開始尋找相關的配置檔案
- url : 表示從系統路徑下,開始尋找相關的配置檔案
<!--resource , 一定是從類路徑下開始查詢資源-->
<properties resource="jdbc.properties"></properties>
<!-- 從絕對路徑當中載入資源,絕對路徑怎麼寫? file:///路徑,注意是三個 / -->
<properties url="file:///d:/jdbc.properties"></properties>
這裡我們用 resource 類路徑下尋找,可移植性更好
<!--resource , 一定是從類路徑下開始查詢資源-->
<properties resource="jdbc.properties"></properties>
使用 ${對應 jdbc.properties的屬性名}
進行賦值,注意是 $
,不是 #
,和 MyBatis 當中的 SQL 語句的 #{}
不同。
執行測試:
properties 兩個屬性:
resource:這個屬性從類的根路徑下開始載入。【常用的。】
url:從指定的url載入,假設檔案放在d:/jdbc.properties,這個url可以寫成:file:///d:/jdbc.properties。注意是三個斜槓哦。
注意:如果不知道mybatis-config.xml檔案中標籤的編寫順序的話,可以有兩種方式知道它的順序:
- 第一種方式:檢視dtd約束檔案。
- 第二種方式:透過idea的報錯提示資訊。【一般採用這種方式】
7. mapper 標籤
mapper標籤用來指定SQL對映檔案的路徑,包含多種指定方式,這裡先主要看其中兩種:
第一種:resource,從類的根路徑下開始載入【比url常用】
<mappers>
<mapper resource="CarMapper.xml"/>
</mappers>
如果是這樣寫的話,必須保證類的根下有CarMapper.xml檔案。
如果類的根路徑下有一個包叫做test,CarMapper.xml如果放在test包下的話,這個配置應該是這樣寫:
<mappers>
<mapper resource="test/CarMapper.xml"/>
</mappers>
第二種:url,從指定的url位置載入
假設CarMapper.xml檔案放在d盤的根下,這個配置就需要這樣寫:
<mappers>
<mapper url="file:///d:/CarMapper.xml"/>
</mappers>
mapper還有其他的指定方式,後面再看!!!
8. 總結:
- mybatis-confg.xml ,也就是MyBatis 的核心配置檔案,主要配置連線資料庫的資訊等(**一般一個資料庫,對應一個這個MyBatis 的核心配置檔案),同樣的與之對應的透過
mybatis-config.xml 核心配置檔案'
所建立的物件:SqlSession FactoryBuilder,SqlSessionFactory 也是一個資料庫相對應上一個物件。- <envrioments> 標籤表示:配置環境(在MyBatis 的核心配置檔案當中,可以配置多個),注意:一般
s
結尾表示複數,也就是說MyBatis 的環境可以配置多個資料來源.- transactionManager標籤,作用:配置事務管理器,指定Mybatis具體使用什麼方式去管理事務,該標籤下的屬性有兩個值:
1. 第一個:JDBC: 使用原生的JDBC程式碼來管理事務 conn.seAutoCommit( false ) ...事務 conn.commit( ); 2. 第二個:MANAGED mybatis 不再負責事務的管理,將事務管理交給其它的JEE(JavaEE)容器來管理。 例如:spring
- dataSource 被稱之為 資料來源 ,為程式設計師提供Connection物件,(但凡是給程式設計師提供 Connection連線物件的,都叫做資料來源),dataSource 標籤下的 type="[UNPOOLED|POOLED|JNDI]")必須三選一
- UNPOOLED: 不能使用資料庫連線池技術,每一次請求過來之後,都是建立新的Connection物件。 - POOLED: 使用mybatis 自己實現的資料庫連線池。 - JNDI: 整合其他第三方的資料庫連線池。 連線池優點:每一次獲取連線都從池中拿,效率高。 因為每一次只能從池中拿,所以連線物件的建立數量是可
- MyBatis 提供了更加靈活的配置,連線資料庫的資訊可以單獨寫到一個
xxx.properties
屬性資原始檔中- mapper標籤用來指定SQL對映檔案的路徑,包含多種指定方式,這裡先主要看其中兩種:
<mappers> <mapper resource="CarMapper.xml"/> </mappers>
<mappers> <mapper url="file:///d:/CarMapper.xml"/> </mappers>
9. 最後:
“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”