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

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

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

當(dāng)MyBatis框架所提供的這些類型處理器不能夠滿足需求時(shí),還可以通過自定義的方式對(duì)類型處理器進(jìn)行擴(kuò)展。自定義類型處理器可以通過實(shí)現(xiàn)TypeHandler接口或者繼承BaseTypeHandle類來定義。元素就是用于在配置文件中注冊(cè)自定義的類型處理器的。它的使用方式有兩種,具體如下。
(1)注冊(cè)一個(gè)類的類型處理器
<typeHandlers>
<!--以單個(gè)類形式配置-->
<typeHandler handler="com.ssm.type.UsertypeHandlerl" />
</typeHandlers>上述代碼中,子元素的handler屬性用于指定在程序中自定義的類型處理器類。
(2)注冊(cè)一個(gè)包中所有的類型處理器
<typeHandlers>
<!--注冊(cè)一個(gè)包中所有的typeHandlers,系統(tǒng)在啟動(dòng)時(shí)會(huì)自動(dòng)掃描包下的使用文件-->
<package name="com.ssm.type" />
</typeHandlers>在上述代碼中,子元素的name屬性用于指定類型處理器所在的包名,使用這種方式后,系統(tǒng)會(huì)在啟動(dòng)時(shí)自動(dòng)掃描com.ssm.type包下所有的文件,并把它們作為類型處理器。
objectFactory元素
MyBatis框架每次創(chuàng)建結(jié)果對(duì)象的新實(shí)例時(shí),都會(huì)使用一個(gè)對(duì)象工廠(ObjectFactory)的實(shí)例來完成。MyBatis中默認(rèn)的ObjectFactory的作用就是實(shí)例化目標(biāo)類,既可以通過默認(rèn)構(gòu)造方法實(shí)例化,也可以在參數(shù)映射存在的時(shí)候通過參數(shù)構(gòu)造方法來實(shí)例化。
在通常情況下,我們使用默認(rèn)的ObjectFactory即可。MyBatis中默認(rèn)的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory來提供服務(wù)的,大部分場(chǎng)景下都不用配置和修改。如果想覆蓋ObjectFactory的默認(rèn)行為,那么可以通過自定義ObjectFactory實(shí)現(xiàn)。
plugins元素
MyBatis允許在已映射語句執(zhí)行過程中的某一點(diǎn)進(jìn)行攔截調(diào)用(通過插件來實(shí)現(xiàn))。<plugins>元素的作用就是配置用戶所開發(fā)的插件。關(guān)于插件的使用,本書不做詳細(xì)講解,有興趣的讀者請(qǐng)查找官方文檔等資料自行學(xué)習(xí)。
environments元素
<environments>元素用于在配置文件中對(duì)環(huán)境進(jìn)行配置。MyBatis的環(huán)境配置實(shí)際上就是數(shù)據(jù)源的配置,可以通過<environments>元素配置多種數(shù)據(jù)源,即配置多種數(shù)據(jù)庫。
【示例】使用<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中,可以配置兩種類型的事務(wù)管理器,分別是JDBC和MANAGED。
- JDBC:此配置直接使用JDBC的提交和回滾設(shè)置,依賴從數(shù)據(jù)源得到的連接來管理事務(wù)的作用域。
- MANAGED:此配置從來不提交或回滾一個(gè)連接,而是讓容器來管理事務(wù)的整個(gè)生命周期。在默認(rèn)情況下,它會(huì)關(guān)閉連接,但一些容器并不希望這樣,為此可以將closeConnection屬性設(shè)置為false來阻止它默認(rèn)的關(guān)閉行為。
注意:如果項(xiàng)目中使用Spring+MyBatis,就沒有必要在MyBatis中配置事務(wù)管理器,因?yàn)閷?shí)際開發(fā)中會(huì)使用Spring自帶的管理器來實(shí)現(xiàn)事務(wù)管理。
對(duì)于數(shù)據(jù)源的配置,MyBatis框架提供了UNPOOLED、POOLED和JNDI三種數(shù)據(jù)源類型。
- UNPOOLED:配置此數(shù)據(jù)源類型后,在每次被請(qǐng)求時(shí)會(huì)打開和關(guān)閉連接。它對(duì)沒有性能要求的簡(jiǎn)單應(yīng)用程序是一個(gè)很好的選擇。
- POOLED:此數(shù)據(jù)源利用“池”的概念將JDBC連接對(duì)象組織起來,避免在創(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)使用類路徑引入
<mappers>
<mapper resource="com/ssm/mapper/UserMapper.xml" />
</mappers>(2)使用本地文件路徑引入
<mappers>
<mapper url=file:"http:///D:/com/ssm/mapper/UserMapper.xml" />
</mappers>(3)使用接口類引入
<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如何讀取application.properties配置文件
這篇文章主要介紹了SpringBoot如何讀取application.properties配置文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java實(shí)現(xiàn)文件點(diǎn)擊沒反應(yīng)的方法
jsp頁面鏈接,點(diǎn)擊訪問action用IO流去下載服務(wù)器上的文件,問題是任憑怎么點(diǎn)擊都沒反應(yīng),日志也不報(bào)錯(cuò)。這篇文章給大家介紹Java實(shí)現(xiàn)文件點(diǎn)擊沒反應(yīng)的方法,需要的朋友參考下吧2018-07-07
分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證
這篇文章主要為大家介紹分析xxljob登入功能集成OIDC的統(tǒng)一認(rèn)證的詳解說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
SpringSecurity的@EnableWebSecurity注解詳解
這篇文章主要介紹了SpringSecurity的@EnableWebSecurity注解詳解,@EnableWebSecurity是開啟SpringSecurity的默認(rèn)行為,它的上面有一個(gè)Import注解導(dǎo)入了WebSecurityConfiguration類,就是往IOC容器中注入了WebSecurityConfiguration這個(gè)類,需要的朋友可以參考下2023-11-11
Java實(shí)現(xiàn)隊(duì)列的三種方法集合
這篇文章主要介紹了Java實(shí)現(xiàn)隊(duì)列的三種方法集合,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java的Struts框架簡(jiǎn)介與環(huán)境配置教程
這篇文章主要介紹了Java的Struts框架與其環(huán)境配置教程,Struts框架是Java注明的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-11-11
SpringBoot配置Access-Control-Allow-Origin教程
文章介紹了三種配置Spring Boot跨域訪問的方法:1. 使用過濾器;2. 在WebConfig配置文件中設(shè)置;3. 通過注解配置,作者分享了個(gè)人經(jīng)驗(yàn),并鼓勵(lì)讀者支持腳本之家2025-03-03

