02、MyBatis XML配置

来源:https://www.cnblogs.com/CSAH/archive/2020/06/12/13111194.html
-Advertisement-
Play Games

MyBatis-全局配置文件 在MyBatis中全局配置文件有著重要的地位,裡面有9類行為信息;如果我們要想將MyBatis運用的熟練,配置全局配置文件是必不可少的步驟,所以我們一定要啃下這一塊硬骨頭。該文章是結合MyBatis配置文件網頁加個人理解做的筆記,如果有的地方寫的不夠好或者有錯誤。懇請大 ...


MyBatis-全局配置文件

  在MyBatis中全局配置文件有著重要的地位,裡面有9類行為信息;如果我們要想將MyBatis運用的熟練,配置全局配置文件是必不可少的步驟,所以我們一定要啃下這一塊硬骨頭。該文章是結合MyBatis配置文件網頁加個人理解做的筆記,如果有的地方寫的不夠好或者有錯誤。懇請大家多多給我指出,因為我也是在摸索中進步。下麵將對9大行為信息和屬性信息配置進行解釋.

1. MyBatis配置

 

註:MyBatis的標簽是有順序的,如果不按照順序會出現The content of element type "configuration" must match 錯誤.標簽的順序為:

 

Eclipse中引入XML的dtd約束文件,方便編寫XML的時候有提示

 

 1)屬性(properties)

  (1)dbconfig.properties 

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root123

 (2)properties屬性 

	<!-- properties:引入外部properties配置文件的內容 -->
	<!-- url:引入網路路徑或者磁碟路徑下的資源 -->
	<!-- resource:引入類路徑下的資源 -->
	<properties resource="dbconfig.properties" ></properties>

(3)使用properties配置mybatis-config.xml

	<!-- properties:引入外部properties配置文件的內容 -->
	<!-- url:引入網路路徑或者磁碟路徑下的資源 -->
	<!-- resource:引入類路徑下的資源 -->
	<properties resource="dbconfig.properties" ></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>

2)設置(settings)   (1)mapUnderscoreToCamelCase

	<!-- settings:包含很多設置項 -->
	<!-- setting:用來選擇設置中各項設置 -->
	<!-- name:設置項名 -->
	<!-- value:設置項取值 -->
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>

3)類型別名(typeAliases)

 

  註意:MyBatis已經為許多常見的 Java 類型內建了相應的類型別名。它們都是大小寫不敏感的,我們在起別名的時候千萬不要占用已有的別名。

 我們目前最新的mybatis推薦使用全限定類名書寫。

	<!-- typeAliases:別名處理器,可以為java類型起別名.別名不區分大小寫 emp 和 Emp是一樣的 -->
	<!-- typeAlias:為java類型起別名  -->
		<!-- type:指定要起別名的類型全類名;預設別名就是類名小寫 -->
		<!-- alias:指定新的別名 -->
	<!-- package:指定一個包名,為該包下所有類批量起別名  -->
	<!-- 批量起別名的情況下,使用@Alias註解為某個類型指定新的別名 如:@Alias("empp") 起別名為empp-->
	<typeAliases>
		<!--  <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/>  -->
		<package name="com.atguigu.mybatis.bean" />
	</typeAliases>

4)類型處理器(typeHandlers)

  無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。

 

  • 日期和時間的處理,JDK1.8以前一直是個頭疼的問題。我們通常使用JSR310規範領導者Stephen Colebourne創建的Joda-Time來操作。1.8已經實現全部的JSR310規範了。

  • 日期時間處理上,我們可以使用MyBatis基於JSR310(Date and Time API)編寫的各種日期時間類型處理器。

  • MyBatis3.4以前的版本需要我們手動註冊這些處理器,以後的版本都是自動註冊的

 

 5)對象工廠(objectFactory)

6)插件(plugins)

  插件是MyBatis提供的一個非常強大的機制,我們可以通過插件來修改MyBatis的一些核心行為。插件通過動態代理機制,可以介入四大對象的任何一個方法的執行。 

7)環境配置(environments)

<!-- environments:配置多種環境;default標簽可以指定使用的環境,可以達到快速切換環境的效果 -->
	<!-- environment 配置一個具體的環境信息;id代表當前環境的唯一標識;必須有兩個標簽transactionManager/type -->
		<!-- transactionManager:事務管理器 -->
			<!-- type:事務管理器的類型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)|自定義事務管理器(實現TransactionFactory介面.type指定為全類名) -->
				<!-- JDBC:使用了 JDBC 的提交和回滾設置,依賴於從數據源得到的連接來管理事務範圍  -->	
				<!-- MANAGED:不提交或回滾一個連接、讓容器來管理事務的整個生命周期(比如 JEE 應用伺服器的上下文) -->
				<!-- 自定義:實現TransactionFactory介面,type=全類名/別名 -->	
		<!-- dataSource:數據源 -->	
			<!-- type:數據源類型;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)|自定義數據源(實現DataSourceFactory介面,type是全類名) -->
				<!-- UNPOOLED:不使用連接池 -->
				<!-- POOLED:使用連接池 -->
				<!-- JNDI: 在EJB 或應用伺服器這類容器中查找指定的數據源 -->
				<!-- 自定義:實現DataSourceFactory介面,定義數據源的獲取方式 -->
	<!-- 實際開發中我們使用Spring管理數據源,併進行事務控制的配置來覆蓋上述配置 -->
	<environments default="development">
		<environment id="test">
			<transactionManager type="JDBC" />
			<dataSource type="">	
				<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>

		<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>

8)資料庫廠商標識(databaseIdProvider)

  MyBatis 可以根據不同的資料庫廠商執行不同的語句.

 (1)添加select

	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" >
		select * from tbl_employee where id = #{id}
	</select>
	
	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="mysql" >
		select id,email from tbl_employee where id = #{id}
	</select>
	
	<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="oracle">
		select * from tbl_employee where id = #{id}
	</select>

(2)添加databaseIdProvider

	<!-- databaseIdProvider:持多資料庫廠商 -->
		<!-- type="DB_VENDOR":VendorDatabaseIdProvider -->
		<!-- type:得到資料庫廠商的標識(驅動getDatabaseProductName()),mybatis就能根據資料庫廠商標識來執行不同的sql -->
	<databaseIdProvider type="DB_VENDOR">
		<!-- 為不同的資料庫廠商起別名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>

(3)配置properties(資料庫鏈接信息)

#Mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root123

#Oracle
orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:orcl
orcl.username=scott
orcl.password=123456

(4)配置environments

	<environments default="dev_mysql">
		<environment id="dev_mysql">
			<transactionManager type="JDBC"></transactionManager>
			<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>
	
		<environment id="dev_oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${orcl.driver}" />
				<property name="url" value="${orcl.url}" />
				<property name="username" value="${orcl.username}" />
				<property name="password" value="${orcl.password}" />
			</dataSource>
		</environment>
	</environments>

9)映射器(mappers)

 

 (1)mybatis-config.xml

	<!-- !!!!!!!!!非常重要!!!!!!!!!!!! -->
	<!-- 將我們寫好的sql映射文件<EmployeeMapper.xml>一定要註冊到全局配置文件中 -->
	<!-- mappers:將sql映射註冊到全局配置中 -->
		<!-- mapper:註冊一個sql映射 -->
			<!-- resource(使用相對於類路徑的資源引用):引用類路徑下的sql映射文件  org/mybatis/builder/AuthorMapper.xml-->
			<!-- url(使用完全限定資源定位符):引用網路路徑或者磁碟路徑下的sql映射文件 file:///var/mappers/AuthorMapper.xml -->
			<!-- class(使用映射器介面實現類的完全限定類名):引用(註冊)介面 org.mybatis.builder.AuthorMapper -->
				<!-- 存在sql映射文件:映射文件名必須和介面同名,需配置文件與介面文件同一目錄下(com.atguigu.mybatis.dao.EmployeeMapper.java)和(com.atguigu.mybatis.dao.EmployeeMapper.xml -->
				<!-- 不存在sql映射文件:所有的sql都是利用註解寫在介面上(com.atguigu.mybatis.dao.EmployeeMapperAnnotation) -->
		<!-- package:批量註冊sql映射 -->
	<mappers>
		<!-- <mapper resource="com/batis/mapper/EmployeeMapper.xml" /> --> 
		<!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
		<package name="com.atguigu.mybatis.dao"/>
	</mappers>

(2)select註解

public interface EmployeeMapperAnnotation {
	@Select("select * from tbl_employee where id=#{id}")
	public Employee getEmpById(Integer id);
}

參考文檔:https://mybatis.org/mybatis-3/zh/configuration.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 好不好找是個相對概念,如果你要跟幾年前相比,那麼一定是「相對不好找」。原因所學的知識過時 用 Vue 模仿一個餓了麽就能找工作的時代一去不復返。 但是為什麼現在一堆大廠喊著招聘難呢? 那是因為候選人技術和招聘者的要求出現了明顯的脫鉤。 我們現在把前端工程師的時代分為三種:史前時代、1.0時代、2.0 ...
  • ❝ 最近想學習一下TypeScript語法,但是只是看官方文檔又有些乏味,還是通過項目在實踐中學習比較有趣,所以在這裡記錄一下我的學習歷程,與Vue項目結合開發。(官方文檔 請戳 >>) ❞ 項目搭建 通過腳手架搭建 1. 通過Vue CLI 3 創建vue項目 vue create vue-typ ...
  • 本文主要介紹 24 中 es6 方法,這些方法都挺實用的,本本請記好,時不時翻出來看看。 1.如何隱藏所有指定的元素 const hide = (el) => Array.from(el).forEach(e => (e.style.display = 'none')); // 事例:隱藏頁面上所有 ...
  • 一、前言 DDD(領域驅動設計)的一些介紹網上資料很多,這裡就不繼續描述了。 自己使用領域驅動設計摸滾打爬也有2年多的時間,出於對知識的總結和分享,也是對自我理解的一個公開檢驗,介於博客園這個平臺也算是對DDD的推廣盡了一份綿薄之力。 一開始接觸這個東西是在2014年,真的覺得像是發現了一片新大陸一 ...
  • 責任鏈模式 (Chain of Responsibility Pattern) 責任鏈模式相信很多人在工作中也接觸過。 javax.servlet.Filter struts的攔截器 SpringMVC的攔截器 那麼,接下來我們來進行更加深入的、直觀的瞭解。 講解重點 責任鏈示例代碼 鏈條與鏈條之間 ...
  • 策略模式用於演算法的自由切換和擴展,實現了演算法定義和演算法分離的使用 模式動機 要完成一項任務,可以有多種不同的方式,例如人們外出旅游時可以選擇多種不同的出行方式,如自行車、坐汽車、坐高鐵或乘飛機等,每一種方式稱為一個策略,我們可以根據環境或者條件的不同選擇不同的策略來完成該任務。 在實際的軟體開發中, ...
  • 前言 首先給大家說聲對不起,最近屬實太忙了,白天上班,晚上加班,回家還要收拾家裡,基本每天做完所有事兒都是凌晨一兩點了,沒有精力再搞其他的了. 好了,進入正題,讓我們來聊聊JVM篇最後一個章節 JVM性能調優.童鞋們隨便打開一個大廠的招聘崗位JD,應該都會有JVM調優相關的描述,其實招聘方不一定要求 ...
  • 1 import cv2 2 import shutil 3 import os 4 5 path='D:\\PythonProject\\fangWen' 6 # 視頻文件堆 7 save_path='D:\\PythonProject\\11\\720與1280' 8 # 要移到的位置 9 sr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...