MyBatis02-mybatis-config.xml配置文件講解

mybatis-config.xml 是 MyBatis 的核心配置文件,用于配置整個 MyBatis 框架的全局行為,比如環境(數據源)、事務、類型別名、插件、Mapper 映射等。

示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 映入外部的properties文件 --><properties resource="db.properties"/><!-- 開啟Mybatis對標準日志的視線 --><settings><setting name="logImpl" value="SLF4J"/></settings><environments default="development"><!-- 每一個environment對應一個SqlSessionFactory --><environment id="development"><!-- 事務管理器 --><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 執行XxxMapper.xml文件的路徑 --><!-- resource路徑自動會從根路徑下開始查找資源 --><mappers><mapper resource="CarMapper.xml"/></mappers>
</configuration>

一、xml配置文件的開頭:

1、任意的xml文件的首行,都是如下的配置:

<?xml version="1.0" encoding="UTF-8" ?>

?

2、xml文件中根標簽的名字

3、dtd是對xml文件的約束:能有什么標簽,標簽的順序,標簽的屬性,有哪些子標簽......

二、<environments>:環境標簽

可以配置多個環境一個環境對應一個sqlsessionFactory對象

在java中創建sqlSessionFactory的時候,可以指定環境的id,表明,用哪一個數據庫創建的sqlSessionFactory:

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 兩種方式創建sqlSessionFactory
// 1、沒有指明具體的environment中的id,則用默認的environment
SqlSessionFactory sqlSessionFactory1 = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));// 2、指明具體的environment中的id
SqlSessionFactory sqlSessionFactory2 = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), 

三、Mybatis的事務管理器

<transactionManager>標簽:

1、作用:配置事務管理器。指定mybatis具體使用什么方式去管理事務。

2、type屬性有兩個值:

????????第一個:JDBC:使用原生的JDBC代碼來管理事務。?

????????第二個:MANAGED:mybatis不再負責事務的管理,將事務管理交給其它的JEE(JavaEE)容器來管理。例如:spring

3、大小寫無所謂。不區分大小寫。但是不能寫其他值。只能是二選一: jdbc、managed

4、在mybatis中提供了一個事務管理器接口:Transaction 該接口下有兩個實現類:

  • JdbcTransaction
  • ManagedTransaction

如果type="JDBC",那么底層會實例化JdbcTransaction對象。

如果type="MANAGED",那么底層會實例化ManagedTransaction。

四、dataSource配置

3-1、基本配置介紹

1、dataSource被稱為數據源。

2、dataSource作用是什么?

為程序提供Connection對象

【注意】:

????????但凡是給程序提供Connection對象的,都叫做數據源。

3、數據源實際上是一套規范(接口)。

JDK中有這套規范:javax.sql.DataSource(這個數據源的規范,這套接口實際上是JDK規定的。)

4、我們自己也可以編寫數據源組件,只要實現javax.sql.DataSource接口就行了。實現接口當中所有的方法。這樣就有了自己的數據源。

比如你可以寫一個屬于自己的數據庫連接池(數據庫連接池是提供連接對象的,所以數據庫連接池就是一個數據源)。

5、常見的數據源組件有哪些呢【常見的數據庫連接池有哪些呢】?

阿里巴巴的德魯伊連接池:druid

c3p0

dbcp

....

6、type屬性用來指定數據源的類型,就是指定具體使用什么方式來獲取Connection對象:

type屬性有三個值:必須是三選一。

type="[UNPOOLED|POOLED|JNDI]"

  • UNPOOLED:不使用數據庫連接池技術。每一次請求過來之后,都是創建新的Connection對象
  • POOLED:使用mybatis自己實現的數據庫連接池
  • JNDI:集成其它第三方的數據庫連接池。

3-2、JNDI

JNDI是一套規范,大部分web容器都實現了這個規范:例如Tomcat、Jetty、WebLogic、WebSphere。這些服務器(容器)都實現了JNDI規范。

所以,可以把對應的連接池,配置到服務器(容器)中,如:druid配置到Tomcat中,然后Tomcat會給druid提供一個上下文的名稱,將上下文的名稱配到對應的<datasource>位置即可。

使用 <dataSource type="JNDI"> 就是告訴 MyBatis:別自己創建數據庫連接了,去應用服務器(Tomcat/GlassFish/WebLogic)拿現成的連接池資源

?

3-3、type = "POOLED"和UNPOOLED對比

測試代碼:

    @Testpublic void testType() throws Exception{SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));// SqlSessionFactory可以創建多個SqlSession!SqlSession sqlSession = sqlSessionFactory.openSession();Object selectById = sqlSession.selectOne("selectById", 12);System.out.println(selectById);sqlSession.commit();sqlSession.close();// 第二次創建SqlSession sqlSession2 = sqlSessionFactory.openSession();Object selectById2 = sqlSession2.selectOne("selectById", 12);System.out.println(selectById2);sqlSession2.commit();sqlSession2.close();}

情況一:type = "UNPOOLED"?

兩個connection對象不一樣!

情況二:type = "POOLED"?

?同一個connection對象!

五、property標簽

在 MyBatis 的 mybatis-config.xml 配置文件中,<properties> 標簽用于引入外部屬性文件或者XML 中內聯配置參數,這些參數可以被用于整個配置文件中的占位符(${})替換,例如數據庫連接、分頁插件參數等。


一句話理解:

<properties> 就是給 MyBatis 提供參數值的地方,支持從外部 .properties 文件讀取,也可以直接在 XML 中寫死鍵值對,用于 ${xxx} 占位符替換。


4-1、用法示例 1:引入外部屬性文件

文件結構

src/
├── mybatis-config.xml
└── db.properties

db.properties 內容:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mydb
jdbc.username=root
jdbc.password=123456

mybatis-config.xml 內容:

<configuration><!-- 映入外部的properties文件 --><properties resource="db.properties"/><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments></configuration>

resource 路徑是 classpath 相對路徑
示例:resource="db.properties" 表示類路徑下的 db.properties?

【備注】:

?

不建議!


4-2、用法示例 2:在 XML 中內聯寫屬性

<configuration><properties><property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/><property name="jdbc.url" value="jdbc:mysql://localhost:3306/mydb"/><property name="jdbc.username" value="root"/><property name="jdbc.password" value="123456"/></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments></configuration>

4-3、屬性優先級(默認行為):

如果你同時指定了外部文件(resourceurl)和內聯屬性(<property> 子標簽),那么:

  • 內聯屬性優先,會覆蓋外部文件中相同的屬性值。


4-4、常見屬性用途

位置用途
<dataSource>數據庫連接參數
插件(如分頁插件)配置插件行為
<settings>配置全局行為開關

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88609.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88609.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88609.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

合上電腦不關機

在Debian 系統上&#xff0c;如何實現合上電腦不關機的效果&#xff1f; 可以修改配置文件&#xff1a; sudo vim /etc/systemd/logind.conf1.找到 HandleLidSwitch &#xff0c;將其值改為 ignore &#xff08;處理蓋子開關為忽略&#xff09; 2.將 LidSwitchIgnoreInhibited …

服務器深夜告警?可能是攻擊前兆!

凌晨三點&#xff0c;刺耳的告警鈴聲把你從夢中驚醒&#xff1a;服務器CPU 100%&#xff0c;內存耗盡&#xff01;你手忙腳亂地登錄服務器&#xff0c;發現某個進程瘋狂占用資源。是程序Bug&#xff1f;還是業務突增&#xff1f;排查半天&#xff0c;最后在角落的日志里發現蛛絲…

重學前端003 --- CSS 顏色

文章目錄文檔聲明head顏色模型div根據在這里 Freecodecamp 實踐&#xff0c;記錄筆記總結。 文檔聲明 在文檔頂部添加 DOCTYPE html 聲明 <!DOCTYPE html>head title 元素為搜索引擎提供了有關頁面的額外信息。 它還通過以下兩種方式顯示 title 元素的內容&#xff1a…

學弟讓我幫忙寫一個學生管理系統的后端,我直接上科技

&#x1f4dd;個人主頁&#xff1a;哈__ 期待您的關注 目錄 一、飛算AI簡介 二、系統開發 2.1 需求提出 2.2 系統模塊的設計 2.3 數據庫表格設計 2.4 接口規范設計 2.5 源碼生成 三、總結 學弟這兩天有一個小組合作的任務&#xff0c;應該是培訓吧要寫一個學生管理…

《P3038 [USACO11DEC] Grass Planting G》

題目描述 給出一棵有 n 個節點的樹&#xff0c;有 m 個如下所示的操作&#xff1a; 將兩個節點之間的 路徑上的邊 的權值均加一。 查詢兩個節點之間的 那一條邊 的權值&#xff0c;保證兩個節點直接相連。 初始邊權均為 0。 輸入格式 第一行兩個整數 n,m&#xff0c;含義…

NestJS

文章的地址 NestJShttps://equinox-primrose-ceb.notion.site/NestJS-22d4b8031e0f80b39fc7fe1ff111f802 不產生測試的.spec.ts文件的配置 "generateOptions": {"spec": false }創建模型 nest g m xx 創建服務 nest g s xx 創建處理 nest g c xx CRU…

vue入門學習教程

一、介紹 vue是一款用于構建用戶界面的 JavaScript 框架。基于標準 HTML、CSS 和 JavaScript 構建&#xff0c;并提供了一套聲明式的、組件化的編程模型&#xff0c;幫助你高效地開發用戶界面。 二、使用和安裝 方法1&#xff1a;在html代碼中直接使用<script>導入&…

C++類對象多態基礎語法【超詳細】

文章目錄前言1. 虛函數1.1 現象1.2 多態1.3 析構函數1.4 override和final1.5 重載、隱藏、重寫對比2. 抽象類2.1 抽象類特性2.2 抽象類的應用場景3. 多態實現的底層原理4. 靜態綁定和動態綁定5. 總結前言 多態是面向對象三大特性之一&#xff0c;也是細節最多的語法之一。學習…

Flask 入門到實戰(3):用 SQLAlchemy 優雅操作數據庫

深入理解 Flask ORM&#xff1a;用 SQLAlchemy 優雅操作數據庫一、前言&#xff1a;什么是 ORM&#xff1f;為什么要用它&#xff1f; 傳統數據庫操作要寫 SQL&#xff0c;比如&#xff1a; SELECT * FROM users WHERE id 1;而使用 ORM 后&#xff0c;你可以這樣寫&#xff1a…

源表=電源+數字表?一文看懂SMU源表 2025-04-14

源表(Source Meter Unit, SMU)廣泛用于半導體器件、材料、醫療、發光器件與光通信等行業,測量器件的伏安(I-V)特性曲線、絕緣材料的電阻值(電阻率)、電容的絕緣電阻(漏電流)、光電器件的暗電流或者L-I-V等。 源表的名稱已經清晰的告訴我們,它包含了高精度電源輸出和…

單片機STM32F103:DMA的原理以及應用

STM32F103系列微控制器&#xff08;基于ARM Cortex-M3內核&#xff09;集成了**DMA&#xff08;Direct Memory Access&#xff0c;直接內存訪問&#xff09;**控制器&#xff0c;用于在存儲器與外設、存儲器與存儲器之間高效傳輸數據&#xff0c;減少CPU的干預&#xff0c;從而…

Webview 中可用的 VS Code 方法

在 VS Code Webview 的 HTML 中&#xff0c;不能直接調用 VS Code 的 API&#xff08;如 vscode.window.showInformationMessage&#xff09;&#xff0c;但可以通過 acquireVsCodeApi() 獲取一個受限的 vscode 對象&#xff0c;用于與插件主程序通信。以下是詳細說明和示例&am…

Qt:布局管理器Layout

目錄 布局管理器 QVBoxLayout QHBoxLayout QGirdLayout QFormLayout Spacer 布局管理器 在以往的界面操作上&#xff0c;都是程序員手動拖動控件來布局&#xff0c;這種方式有一些不足之處&#xff0c;比如不能很好的把握控件之間的距離&#xff0c;以及控件的大小&…

【Java編程動手學】深入剖析Java網絡編程:原理、協議與應用

文章目錄一、引言二、計算機網絡基礎1、計算機網絡的概念2、網絡地址的重要性三、套接字編程&#xff1a;網絡通信的基石1、套接字的概念2、TCP通信編程示例四、TCP通信編程&#xff1a;可靠的數據傳輸1、TCP協議的特點2、實際應用中的TCP通信五、UDP通信編程&#xff1a;高效的…

vue3.2 前端動態分頁算法

文章目錄背景思路頁面情況核心代碼小結效果背景 1. 后臺接口只是動態返回一個數組的數據&#xff0c;前端需要根據數據量的大小判斷是否需要分頁&#xff0c;頁面高度固定2. 頁面根據頁數大小有不同的展示a. 只有一頁 頭部 內容 統計 尾部b. 多頁i. 第一頁 頭部 內容 尾…

UC瀏覽器PC版自2016年后未再更新不支持vue3

win uc瀏覽器&#xff0c;點擊頁面觸發異常。UC瀏覽器PC版自2016年后未再更新&#xff08;最新版本停留在Chromium 50內核&#xff09;。其內置內核版本較低&#xff08;如Trident/Blink舊版&#xff09;&#xff0c;無法支持Vue 3等現代前端框架的語法特性&#xff08;如ES6、…

亞古數據:澳大利亞公司的ABN和ACN號碼是什么?

在跨國商業的迷宮中&#xff0c;了解目標市場的公司注冊細節是一項不可或缺的技能。對于與中國企業有業務往來的朋友們來說&#xff0c;澳大利亞這片充滿機遇的土地上&#xff0c;兩個縮寫——ABN與ACN&#xff0c;如同解鎖合作之門的密鑰&#xff0c;顯得尤為重要。今天&#…

LangChain框架 Prompts、Agents 應用

目錄 (Prompts)提示作用 Prompts 常見操作 基礎 PromptTemplate 使用 Few-shot 提示模板 ChatPromptTemplate (對話提示模板) (Agents)代理作用 Agents 常見操作 基礎 Agent 使用 自定義工具 Agent 高級應用示例 帶記憶的對話代理 使用本地模型的代理 結構化輸出代…

模擬實現unordered_map

1.定義unordered_map 是 C 標準庫中的哈希表容器&#xff0c;特點是無序存儲、平均 O (1) 時間復雜度的插入 / 查找 / 刪除操作。其核心原理是通過哈希函數將關鍵字映射到哈希桶&#xff08;bucket&#xff09;&#xff0c;再通過鏈表或紅黑樹處理哈希沖突。2.實現原理1. 哈希表…

史上最詳細Java并發多線程(面試必備,一篇足矣)

第一章&#xff1a;線程基礎 1.1 線程與進程 進程&#xff1a;系統資源分配的基本單位&#xff0c;擁有獨立的內存空間 線程&#xff1a;CPU調度的基本單位&#xff0c;共享進程內存空間 關系&#xff1a;一個進程可包含多個線程&#xff0c;線程切換成本遠低于進程 1.2 線程的…