MyBatis配置文件元素示例詳解
MyBatis配置文件元素
使用MyBatis框架進(jìn)行開(kāi)發(fā),需要?jiǎng)?chuàng)建MyBatis的核心配置文件,該配置文件包含重要的元素,熟悉配置文件中各個(gè)元素的功能十分重要。
在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<contiguration>元素內(nèi)配置。
MyBatis配置文件中的主要元素如下所示。
<configuration> <!-- 屬性 --> <properties/> <!-- 設(shè)置 --> <settings/> <!-- 類(lèi)型命名 --> <typeAliases/> <!-- 類(lèi)型處理器 --> <typeHandlers/> <!-- 對(duì)象工廠(chǎng) --> <objectFactory/> <!-- 插件 --> <plugins/> <!-- 配置環(huán)境 --> <environments> <!-- 環(huán)境變量 --> <environment> <!-- 事務(wù)管理器 --> <transactionManager/> <!-- 數(shù)據(jù)源 --> <dataSourse/> </environment> </environments> <!-- 數(shù)據(jù)庫(kù)廠(chǎng)商標(biāo)識(shí) --> <databaseIdProvider/> <!-- 映射器 --> <mappers/> </configuration>
在MyBatis的配置文件中包含多個(gè)元素,這些元素在配置文件中分別發(fā)揮著不同的作用。開(kāi)發(fā)人員需要熟悉的是元素各個(gè)子元素的配置。
注意:<configuration>的子元素必須按照由上到下的順序進(jìn)行配置,否則MyBatis在解析XML配置文件的時(shí)候會(huì)報(bào)錯(cuò)。
properties元素
<properties>是一個(gè)配置屬性的元素,通過(guò)外部配置來(lái)動(dòng)態(tài)替換內(nèi)部定義的屬性。
【示例】配置數(shù)據(jù)庫(kù)的連接等屬性,具體方式如下。
步驟01 在項(xiàng)目的src目錄下創(chuàng)建一個(gè)名稱(chēng)為db.properties的配置文件,代碼如下所示。
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/db_mybatis jdbc.username=root jdbc.password=root
步驟02 在MyBatis配置文件mybatis-config.xml中配置<properties/>屬性,具體如下。
<properties resource="db.properties" />
完成上述配置,dataSource中連接數(shù)據(jù)庫(kù)的4個(gè)屬性(driver、url、username和password)值將會(huì)由db.properties文件中對(duì)應(yīng)的值來(lái)動(dòng)態(tài)替換。這樣就為配置提供了靈活性。另外,還可以通過(guò)配置<properties>元素的子元素<property>以及通過(guò)方法參數(shù)傳遞的方式來(lái)獲取屬性值。由于使用properties配置文件來(lái)配置屬性值可以方便地在多個(gè)配置文件中使用這些屬性值,并且方便維護(hù)和修改,因此在實(shí)際開(kāi)發(fā)中最常用。
settings元素
<settings>元素主要用于改變MyBatis運(yùn)行時(shí)的行為,例如開(kāi)啟二級(jí)緩存、開(kāi)啟延遲加載等。<settings>元素中的常見(jiàn)配置及其描述如下表所示。

<settings>元素中的常見(jiàn)配置在配置文件中的使用方式如下。
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="true"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
</settings>typeAliases元素
<typeAliases>元素用于為配置文件中的Java類(lèi)型設(shè)置一個(gè)簡(jiǎn)短的名字,即設(shè)置別名。別名的設(shè)置與XML配置相關(guān),其使用的意義在于減少全限定類(lèi)名的冗余。使用<typeAliases>元素配置別名的方法如下:
<!--定義別名-->
<typeAliases>
<typeAlias type="user" type="com.ssm.po.User"/>
</typeAliases><typeAliases>元素的子元素中的type屬性用于指定需要被定義別名的類(lèi)的全限定名;alias屬性的屬性值“user”就是自定義的別名,可以代替“com.ssm.po.User”使用在MyBatis文件的任何位置。如果省略alias屬性,MyBatis會(huì)默認(rèn)將類(lèi)名首字母小寫(xiě)后的名稱(chēng)作為別名。
當(dāng)POJO類(lèi)過(guò)多時(shí),還可以通過(guò)自動(dòng)掃描包的形式自定義別名,具體示例如下。
<!--使用自動(dòng)掃描包來(lái)定義別名-->
<typeAliases>
<package name="com.ssm.po"/>
</typeAliases><typeAliases>元素的子元素<package>中的name屬性用于指定要被定義別名的包,MyBatis會(huì)將所有com.ssm.po包中的POJO類(lèi)以首字母小寫(xiě)的非限定類(lèi)名作為它的別名。
注意:上述方式的別名只適用于沒(méi)有使用注解的情況。如果在程序中使用了注解,那么別名為其注解的值,具體如下。
@Alias(value = "user")
public class User{
//user的屬性和方法
}除了可以使用<typeAliases>元素自定義別名外,MyBatis框架還默認(rèn)為許多常見(jiàn)的Java類(lèi)型(如數(shù)值、字符串、日期和集合等)提供相應(yīng)的類(lèi)型別名,如下表所示。

提示 :
表中所列舉的別名可以在MyBatis中直接使用,但由于別名不區(qū)分大小寫(xiě),因此在使用時(shí)要注意重復(fù)定義的覆蓋問(wèn)題。
typeHandler元素
MyBatis在預(yù)處理語(yǔ)句(Prepared Statement)中設(shè)置一個(gè)參數(shù)或者從結(jié)果集(Resultset)中取出一個(gè)值時(shí),都會(huì)用其框架內(nèi)部注冊(cè)了的typeHandler(類(lèi)型處理器)進(jìn)行相關(guān)處理。typeHandler的作用就是將預(yù)處理語(yǔ)句中傳入的參數(shù)從javaType(Java類(lèi)型)轉(zhuǎn)換為jdbcType(JDBC類(lèi)型),或者從數(shù)據(jù)庫(kù)取出結(jié)果時(shí)將jdbcType轉(zhuǎn)換為javaType。
為了方便轉(zhuǎn)換,MyBatis框架提供了一些默認(rèn)的類(lèi)型處理器,如下表所示。

當(dāng)MyBatis框架所提供的這些類(lèi)型處理器不能夠滿(mǎn)足需求時(shí),還可以通過(guò)自定義的方式對(duì)類(lèi)型處理器進(jìn)行擴(kuò)展。自定義類(lèi)型處理器可以通過(guò)實(shí)現(xiàn)TypeHandler接口或者繼承BaseTypeHandle類(lèi)來(lái)定義。元素就是用于在配置文件中注冊(cè)自定義的類(lèi)型處理器的。它的使用方式有兩種,具體如下。
(1)注冊(cè)一個(gè)類(lèi)的類(lèi)型處理器
<typeHandlers>
<!--以單個(gè)類(lèi)形式配置-->
<typeHandler handler="com.ssm.type.UsertypeHandlerl" />
</typeHandlers>上述代碼中,子元素的handler屬性用于指定在程序中自定義的類(lèi)型處理器類(lèi)。
(2)注冊(cè)一個(gè)包中所有的類(lèi)型處理器
<typeHandlers>
<!--注冊(cè)一個(gè)包中所有的typeHandlers,系統(tǒng)在啟動(dòng)時(shí)會(huì)自動(dòng)掃描包下的使用文件-->
<package name="com.ssm.type" />
</typeHandlers>在上述代碼中,子元素的name屬性用于指定類(lèi)型處理器所在的包名,使用這種方式后,系統(tǒng)會(huì)在啟動(dòng)時(shí)自動(dòng)掃描com.ssm.type包下所有的文件,并把它們作為類(lèi)型處理器。
objectFactory元素
MyBatis框架每次創(chuàng)建結(jié)果對(duì)象的新實(shí)例時(shí),都會(huì)使用一個(gè)對(duì)象工廠(chǎng)(ObjectFactory)的實(shí)例來(lái)完成。MyBatis中默認(rèn)的ObjectFactory的作用就是實(shí)例化目標(biāo)類(lèi),既可以通過(guò)默認(rèn)構(gòu)造方法實(shí)例化,也可以在參數(shù)映射存在的時(shí)候通過(guò)參數(shù)構(gòu)造方法來(lái)實(shí)例化。
在通常情況下,我們使用默認(rèn)的ObjectFactory即可。MyBatis中默認(rèn)的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory來(lái)提供服務(wù)的,大部分場(chǎng)景下都不用配置和修改。如果想覆蓋ObjectFactory的默認(rèn)行為,那么可以通過(guò)自定義ObjectFactory實(shí)現(xiàn)。
plugins元素
MyBatis允許在已映射語(yǔ)句執(zhí)行過(guò)程中的某一點(diǎn)進(jìn)行攔截調(diào)用(通過(guò)插件來(lái)實(shí)現(xiàn))。<plugins>元素的作用就是配置用戶(hù)所開(kāi)發(fā)的插件。關(guān)于插件的使用,本書(shū)不做詳細(xì)講解,有興趣的讀者請(qǐng)查找官方文檔等資料自行學(xué)習(xí)。
environments元素
<environments>元素用于在配置文件中對(duì)環(huán)境進(jìn)行配置。MyBatis的環(huán)境配置實(shí)際上就是數(shù)據(jù)源的配置,可以通過(guò)<environments>元素配置多種數(shù)據(jù)源,即配置多種數(shù)據(jù)庫(kù)。
【示例】使用<environments>元素進(jìn)行環(huán)境配置的示例如下。
<environments default="development">
<environment id="development">
<!--使用JDBC的事務(wù)管理-->
<transactionManager type="JDBC" />
<!--配置數(shù)據(jù)源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/db_mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>在上述示例代碼中,<environments>元素是環(huán)境配置的根元素,它包含一個(gè)default屬性,該屬性用于指定默認(rèn)的環(huán)境ID。<environment>是<environments>元素的子元素,它可以被定義多個(gè),其id屬性用于表示所定義環(huán)境的ID值。在<environment>元素內(nèi),包含事務(wù)管理和數(shù)據(jù)源的配置信息,其中<transactionManager>元素用于配置事務(wù)管理,它的type屬性用于指定事務(wù)管理的方式,即使用哪種事務(wù)管理器;<dataSource>元素用于配置數(shù)據(jù)源,它的type屬性用于指定使用哪種數(shù)據(jù)源。
在MyBatis中,可以配置兩種類(lèi)型的事務(wù)管理器,分別是JDBC和MANAGED。
- JDBC:此配置直接使用JDBC的提交和回滾設(shè)置,依賴(lài)從數(shù)據(jù)源得到的連接來(lái)管理事務(wù)的作用域。
- MANAGED:此配置從來(lái)不提交或回滾一個(gè)連接,而是讓容器來(lái)管理事務(wù)的整個(gè)生命周期。在默認(rèn)情況下,它會(huì)關(guān)閉連接,但一些容器并不希望這樣,為此可以將closeConnection屬性設(shè)置為false來(lái)阻止它默認(rèn)的關(guān)閉行為。
注意:如果項(xiàng)目中使用Spring+MyBatis,就沒(méi)有必要在MyBatis中配置事務(wù)管理器,因?yàn)閷?shí)際開(kāi)發(fā)中會(huì)使用Spring自帶的管理器來(lái)實(shí)現(xiàn)事務(wù)管理。
對(duì)于數(shù)據(jù)源的配置,MyBatis框架提供了UNPOOLED、POOLED和JNDI三種數(shù)據(jù)源類(lèi)型。
- UNPOOLED:配置此數(shù)據(jù)源類(lèi)型后,在每次被請(qǐng)求時(shí)會(huì)打開(kāi)和關(guān)閉連接。它對(duì)沒(méi)有性能要求的簡(jiǎn)單應(yīng)用程序是一個(gè)很好的選擇。
- POOLED:此數(shù)據(jù)源利用“池”的概念將JDBC連接對(duì)象組織起來(lái),避免在創(chuàng)建新的連接實(shí)例時(shí)需要初始化和認(rèn)證的時(shí)間。這種方式使得并發(fā)Web應(yīng)用可以快速地響應(yīng)請(qǐng)求,是當(dāng)前流行的處理方式。
- JNDI:此數(shù)據(jù)源可以在EJB或應(yīng)用服務(wù)器等容器中使用。容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個(gè)JNDI上下文的引用。
mappers元素
在配置文件中,<mappers>元素用于指定MyBatis映射文件的位置,一般可以使用以下4種方法引入映射器文件,具體如下所示。
(1)使用類(lèi)路徑引入
<mappers>
<mapper resource="com/ssm/mapper/UserMapper.xml" />
</mappers>(2)使用本地文件路徑引入
<mappers>
<mapper url=file:"http:///D:/com/ssm/mapper/UserMapper.xml" />
</mappers>(3)使用接口類(lèi)引入
<mappers>
<mapper class="com.ssm.mapper.UserMapper" />
</mappers>(4)使用包名引入
<mappers>
<package name="com.ssm.mapper" />
</mappers>到此這篇關(guān)于MyBatis配置文件元素的文章就介紹到這了,更多相關(guān)MyBatis配置文件元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot啟動(dòng)后運(yùn)行代碼的幾種方法
在開(kāi)發(fā)SpringBoot應(yīng)用時(shí),有時(shí)需要在應(yīng)用啟動(dòng)后執(zhí)行一些特定的代碼,例如監(jiān)控目錄變化、初始化數(shù)據(jù)等,然而,直接在啟動(dòng)時(shí)運(yùn)行代碼可能會(huì)遇到@Autowired服務(wù)未初始化的問(wèn)題,因此需要找到合適的時(shí)機(jī)來(lái)執(zhí)行這些代碼,所以本文給大家介紹了SpringBoot啟動(dòng)后運(yùn)行代碼的幾種方法2025-06-06
java 非對(duì)稱(chēng)加密算法RSA實(shí)現(xiàn)詳解
這篇文章主要介紹了java 非對(duì)稱(chēng)加密算法RSA實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Java棧的應(yīng)用之括號(hào)匹配算法實(shí)例分析
這篇文章主要介紹了Java棧的應(yīng)用之括號(hào)匹配算法,結(jié)合實(shí)例形式分析了Java使用棧實(shí)現(xiàn)括號(hào)匹配算法的相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-03-03
java通過(guò)poi解析word入門(mén)的操作方法
Apache POI 是一個(gè)處理Miscrosoft Office各種文件格式的開(kāi)源項(xiàng)目,可以使用POI在Java程序中對(duì)Miscrosoft Office各種文件進(jìn)行讀寫(xiě)操作,本文給大家介紹java通過(guò)poi解析word入門(mén)的操作方法,感興趣的朋友一起看看吧2024-08-08
Java分析Lambda表達(dá)式Stream流合并分組內(nèi)對(duì)象數(shù)據(jù)合并
Lambda表達(dá)式,基于Lambda所帶來(lái)的函數(shù)式編程,又引入了一個(gè)全新的Stream概念,用于解決集合類(lèi)庫(kù)既有的弊端,Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡(jiǎn)潔緊湊2022-12-12
servlet之session工作原理簡(jiǎn)介_(kāi)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了servlet之session工作原理簡(jiǎn)介,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07

