MyBatis 核心配置檔案詳細內容詳解

Rainbow-Sea發表於2024-05-30

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屬性有兩個值:

  1. 第一個:JDBC: 使用原生的JDBC程式碼來管理事務
    conn.seAutoCommit( false )
    ...事務
    conn.commit( );
  2. 第二個: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. 總結:

  1. mybatis-confg.xml ,也就是MyBatis 的核心配置檔案,主要配置連線資料庫的資訊等(**一般一個資料庫,對應一個這個MyBatis 的核心配置檔案),同樣的與之對應的透過 mybatis-config.xml 核心配置檔案' 所建立的物件:SqlSession FactoryBuilder,SqlSessionFactory 也是一個資料庫相對應上一個物件。
  2. <envrioments> 標籤表示:配置環境(在MyBatis 的核心配置檔案當中,可以配置多個),注意:一般s 結尾表示複數,也就是說MyBatis 的環境可以配置多個資料來源.
  3. transactionManager標籤,作用:配置事務管理器,指定Mybatis具體使用什麼方式去管理事務,該標籤下的屬性有兩個值:
1. 第一個:JDBC: 使用原生的JDBC程式碼來管理事務
                conn.seAutoCommit( false )
                ...事務
                conn.commit( );
2. 第二個:MANAGED
 mybatis 不再負責事務的管理,將事務管理交給其它的JEE(JavaEE)容器來管理。 例如:spring

  1. dataSource 被稱之為 資料來源 ,為程式設計師提供Connection物件,(但凡是給程式設計師提供 Connection連線物件的,都叫做資料來源),dataSource 標籤下的 type="[UNPOOLED|POOLED|JNDI]")必須三選一
- UNPOOLED: 不能使用資料庫連線池技術,每一次請求過來之後,都是建立新的Connection物件。
- POOLED: 使用mybatis 自己實現的資料庫連線池。
- JNDI: 整合其他第三方的資料庫連線池。

連線池優點:每一次獲取連線都從池中拿,效率高。
因為每一次只能從池中拿,所以連線物件的建立數量是可

  1. MyBatis 提供了更加靈活的配置,連線資料庫的資訊可以單獨寫到一個xxx.properties屬性資原始檔中
  2. mapper標籤用來指定SQL對映檔案的路徑,包含多種指定方式,這裡先主要看其中兩種:
<mappers>
  <mapper resource="CarMapper.xml"/>
</mappers>
<mappers>
  <mapper url="file:///d:/CarMapper.xml"/>
</mappers>

9. 最後:

“在這個最後的篇章中,我要表達我對每一位讀者的感激之情。你們的關注和回覆是我創作的動力源泉,我從你們身上吸取了無盡的靈感與勇氣。我會將你們的鼓勵留在心底,繼續在其他的領域奮鬥。感謝你們,我們總會在某個時刻再次相遇。”

在這裡插入圖片描述

相關文章