欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis 全局配置文件詳解

 更新時間:2024年06月20日 09:49:35   作者:花落隨風輕飄舞  
MyBatis的全局配置文件定義了MyBatis的全局行為,本文主要介紹了MyBatis 全局配置文件詳解,具有一定的參考價值,感興趣的可以了解一下

1 MyBatis 全局配置文件

MyBatais 全局配置文件所有配置項如下所示,配置項只能按照如下順序進行設(shè)置

<?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> <!--配置-->
    <properties/> <!--屬性-->
    <settings/> <!--全局配置參數(shù)-->
    <typeAliases/> <!--類型別名-->
    <typeHandlers/> <!--類型處理器-->
    <objectFactory/><!--對象工廠-->
    <plugins/><!--創(chuàng)建-->
    <environments default=""><!--環(huán)境配置-->
        <environment id=""><!--環(huán)境變量-->
            <transactionManager type=""/><!--事務(wù)管理器-->
            <dataSource type=""/><!--數(shù)據(jù)源-->
        </environment>
    </environments>
    <databaseIdProvider type=""/><!--數(shù)據(jù)庫廠商標識-->
    <mappers/><!--映射器-->
</configuration>

2 properties 元素

mysql.properties 配置文件

url=jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
name=root
password=123456
driver=com.mysql.cj.jdbc.Driver

通過 properties 元素導入 mysql.properties 配置文件,會在當前配置文件所在目錄下查找 mysql.properties 配置文件

<properties resource="mysql.properties" />

此外,也可以用 properties 元素的 url 屬性來指定屬性文件的 URL

<!-- 指定一個網(wǎng)絡(luò)上的屬性文件 -->
<properties url="http://example.com/jdbc.properties" />

<!-- 指定一個位于本地文件系統(tǒng)中的屬性文件 -->
<properties url="file:///path/to/config.properties" />

如果屬性在不只一個地方進行了配置,那么 MyBatis 將按照如下順序來加載:

  • 在 properties 元素體內(nèi)指定的屬性首先被讀取
<properties>
    <!--property子元素定義-->
    <property name="database.driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="database.url" value="jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
    <property name="database.username" value="root"/>
    <property name="database.password" value="123456"/>
</properties>
  • 然后根據(jù) properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據(jù) url 屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性
  • 最后讀取作為方法參數(shù)傳遞的屬性,并覆蓋已讀取的同名屬性
// 加載數(shù)據(jù)庫配置文件
is = Resources.getResourceAsStream("msyql.properties");
Properties properties = new Properties();
properties.load(is);

// 獲取加密信息
String username= properties.getProperty("database.username");
String password= properties.getProperty("database.password");
 
// 解密用戶名和密碼,并重置屬性
properties.setProperty("database.username", CyperTool.decodeByBase64(username));
properties.setProperty("database.password", CyperTool.decodeByBase64(password));

3 setting 設(shè)置

setting 設(shè)置是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會改變 MyBatis 的運行時行為。但是大部分情況下使用默認值便可以運行,所以在大部分情況下不需要大量配置,只需要修改一些常用的規(guī)則即可。常用規(guī)則有自動映射、駝峰命名映射、級聯(lián)規(guī)則、是否啟動緩存、執(zhí)行器類型等。

<settings>
    <!--緩存配置的全局開關(guān):如果這里設(shè)置成false,那么即便在映射器中配置開啟也無濟于事 -->
    <setting name="cacheEnabled" value="true" />
    <!--延時加載的全局開關(guān) -->
    <setting name="lazyLoadingEnabled" value="false" />
</settings>
屬性名含義簡介有效值默認值
cacheEnabled是否使用緩存是整個工程中所有映射器配置緩存的開關(guān),即是一個全局緩存開關(guān)true | falsetrue
lazyLoadingEnabled是否開啟延遲加載控制全局是否使用延遲加載。當有特殊關(guān)聯(lián)關(guān)系需要單獨配置時,可以使用 fetchType 屬性來覆蓋此配置true | falsefalse
aggressiveLazyLoading是否按需加載屬性開啟時,不論調(diào)用什么方法加載某個對象,都會加載該對象的所有屬性,關(guān)閉后只會按需加載true | falsefalse
multipleResultSetsEnabled是否允許單一語句返回多結(jié)果集即 Mapper 配置中一個單一的 sql 配置是否能夠返回多個結(jié)果集true | falsetrue
useColumnLabel使用列標簽代替列名設(shè)置是否使用列標簽代替列名true | falsetrue
useGenerateKeys是否支持 JDBC 自動生成主鍵設(shè)置之后,將會強制使用自動生成主鍵的策略true | falsefalse
autoMappingBehavior指定 MyBatis 自動映射字段或?qū)傩缘姆绞?/td>有三種方式,NONE 時將取消自動映射;PARTIAL 時只會自動映射沒有定義結(jié)果集的結(jié)果映射;FULL 時會映射任意復雜的結(jié)果集NONE, PARTIAL, FULLPARTIAL
autoMappingUnknownColumnBehavior設(shè)置當自動映射時發(fā)現(xiàn)未知列的動作有三種動作,NONE 時不做任何操作;WARNING 時會輸出提醒日志;FALLING 時會拋出 SqlSessionException 異常表示映射失敗NONE, WARNING, FALLINGNONE
defaultExecutorType設(shè)置默認的執(zhí)行器有三種執(zhí)行器,SIMPLE 為普通執(zhí)行器;REUSE 執(zhí)行器會重用處理語句;BATCH 執(zhí)行器將重用語句并執(zhí)行批量更新SIMPLE, REUSE, BATCHSIMPLE
defaultStatementTimeout設(shè)置超時時間該超時時間即數(shù)據(jù)驅(qū)動連接數(shù)據(jù)庫時,等待數(shù)據(jù)庫回應(yīng)的最大秒數(shù)任意正整數(shù)
defaultFetchSize設(shè)置驅(qū)動的結(jié)果集為了防止從數(shù)據(jù)庫查詢出來的結(jié)果過多,而導致內(nèi)存溢出,可以通過設(shè)置 fetchSize 參數(shù)來控制結(jié)果集的數(shù)量任意正整數(shù)
safeRowBoundsEnabled允許在嵌套語句中使用分頁,RowBound,即行內(nèi)嵌套語句如果允許在 sql 的行內(nèi)嵌套語句中使用分頁,就設(shè)置該值為 falsetrue | falsefalse
safeResultHandlerEnabled允許在嵌套語句中使用分頁,ResultHandler,即結(jié)果及處理如果允許對 sql 的結(jié)果集使用分頁,就設(shè)置該值為 falsetrue | falsetrue
mapUnderscoreToCamelCase是否開啟駝峰命名規(guī)則映射表名數(shù)據(jù)庫中的字段名稱與工程中 Java 實體內(nèi)的映射是否采用駝峰命名規(guī)則校驗true | falsefalse
localCacheScopeMyBatis 利用本地緩存機制防止循環(huán)引用和加速重復嵌套查詢默認值為 SESSION,這種情況下會緩存一個會話中執(zhí)行的所有查詢。若設(shè)置為 STATEMENT,一級緩存僅對當前執(zhí)行的語句有效。這意味著每次語句執(zhí)行完畢后,緩存就會被清空SESSION | STATEMENTSESSION
jdbcTypeForNullJDBC 類型的默認設(shè)置當沒有參數(shù)提供特定的 JDBC 類型時,為空值指定 JDBC 類型。某些驅(qū)動需要指定列的 JDBC 類型,多數(shù)情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER常用 NUL、VARCHAR、OTHEROTHER
lazyLoadTriggeerMethods指定哪個對象的方法觸發(fā)一次延遲加載配置需要觸發(fā)延遲加載的方法的名字,該方法就會觸發(fā)一次延遲加載一個逗號分隔的方法名稱列表

equals, clone,

hashCode, toString

defaultScriptingLanguage動態(tài) sql 默認語言指定動態(tài) sql 生成的默認語言一個類型的的別名或者一個類的全類名

org.apache.ibatis.

scripting.xmltargs.

XMLLanguageDriver

callSettersOnNulls是否在空值情況下調(diào)用 Set 方法指定當結(jié)果集中的值為 null 時是否調(diào)用映射對像的 setter (map 對象為 put)方法,這對于有 Map.keySet() 依賴或 null 值初始化是有用的。注意基本類型不能設(shè)置為 nulltrue | falsefalse
returnInstanceForEmptyRow返回空實體集對象當返回行的所有列都是空時,MyBatis 默認返回 null。當開啟這個設(shè)置時,MyBatis 會返回一個空實例。此外,從 MyBatis 3.4.2 開始,它也適用于嵌套的結(jié)果集true | falsefalse
logImpl日志實現(xiàn)指定 MyBatis 所用日志的具體實現(xiàn),為指定時將自動查找SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
proxyFactory代理工廠指定 MyBatis 創(chuàng)建具有延遲加載能力的對象所用到的代理工具CGLIB | JAVASSISTJAVASSIST
vfsImplvfs 實現(xiàn)指定 vfs 的實現(xiàn)自定義 VFS 實現(xiàn)類的全類名,以逗號分割
useActualParamName使用方法簽名允許使用方法簽名中的名稱作為語句參數(shù)名稱。要使用該特性,工程必須采用 Java8 編譯,并且加上 -parameters 選項(從 MyBatis 3.4.1 版本開始)true | false

false

configurationFactory配置工廠指定提供配置實例的類。返回的配置實例用于加載反序列化的懶加載參數(shù)。這個類必須有一個簽名的靜態(tài)配置 getconfiguration() 方法(從 MyBatis 3.2.3 版本開始)一個類型別名或者一個類的全類名

4 typeAlianses 別名處理器

typeAliases 可以給類設(shè)置別名,這樣當我們需要使用類時,可以不用每次都寫那么復雜的全類名 (com.pojo.User)

<!--設(shè)置別名-->
<typeAliases>
    <!--對類單獨進行別名設(shè)置  -->
    <typeAlias alias="user" type="com.pojo.User"></typeAlias>
    <typeAlias alias="student" type="com.pojo.Student"></typeAlias>
</typeAliases>

批量給類設(shè)置別名,為包中的每一個類設(shè)置別名,設(shè)置規(guī)則是:獲取類名稱,將其第一個字母變?yōu)樾?/strong>

<!--設(shè)置別名-->
<typeAliases>
    <!-- 對包進行掃描,可以批量進行別名設(shè)置,設(shè)置規(guī)則是:獲取類名稱,將其第一個字母變?yōu)樾?-->
    <package name="com.pojo1"/>
    <package name="com.pojo2"/>
    <package name="com.pojo3"/>
</typeAliases>

通過 @Alias 注解設(shè)置別名

@Alias("user")
public class User {
    省略......
}

需要注意的是,MyBatis 已經(jīng)為某些類定義了別名,此外,別名對大小寫不敏感。對此,為某些類定義別名時,不能占用已有別名

5 typeHandler 類型處理器

在 typeHandler 類型處理器中,包含 javaType 和 jdbcType 兩種類型,其中 javaType 用來定義 Java 類型,jdbcType 用來定義數(shù)據(jù)庫類型,而 typeHandler 的作用就是對 javaType 和 jdbcType 兩種類型進行轉(zhuǎn)換,如下圖所示:

下圖是 MyBatis 已經(jīng)定義好的部分類型處理器,當然,我們也可以自定義類型處理器,此處不做介紹

6 objectFacotry 對象工廠(了解)

objectFacotry 表示為對象工廠。對象工廠我們只需了解即可,因為到時候與 Spring 整合后,都會由 Spring 來管理。我們知道,在 JDBC 中查詢的結(jié)果會保存在一個結(jié)果集中,而 MyBatis 也是這樣,它會使用其定義的對象工廠 DefaultObjectFactory 來將查詢的結(jié)果保存在結(jié)果集中。

7 plugins 插件(了解)

plugins 插件是 MyBatis 提供的一個非常強大的機制。通過插件,我們可以在不修改 MyBatis 核心代碼的情況下,對其核心行為進行修改。利用動態(tài)代理機制,插件能夠介入到四大對象(Mapper Interface、Mapped Statement、Parameter Map 和 ResultSet Handler)的任何一個方法的執(zhí)行過程中。

8 environments 運行環(huán)境

environments 標簽用于指定當前運行環(huán)境,在 MyBatis 中可以配置多種環(huán)境,比如開發(fā)、測試和生產(chǎn)環(huán)境。每種環(huán)境使用一個 environment 標簽進行配置并指定唯一標識符,可以通過 environments 標簽中的 default 屬性指定一個環(huán)境的標識符來快速的切換環(huán)境,environment  標簽里面分為兩個可配置的標簽:事務(wù)管理 (transactionManager)、數(shù)據(jù)源 (DataSource)。而在我們的日常開發(fā)中,這些都會交給 Spring 來管理,不用在全局配置中編寫。

transactionManager

transactionManager 配置事務(wù)管理器類型,type = JDBC | MANAGED | 自定義(type=全類名或別名)

  • JDBC 使用 JdbcTransactionFactory 工廠生成的 JdbcTransaction 對象實現(xiàn),以 JDBC 的方式進行數(shù)據(jù)庫的提交、回滾等操作,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍
  • MANAGED 使用 ManagedTransactionFactory 工廠生成的 ManagedTransaction 對象實現(xiàn),它的提交和回滾不需要任何操作,而是把事務(wù)交給容器進行處理,默認情況下會關(guān)閉連接,如果不希望默認關(guān)閉,只要將其中的 closeConnection 屬性設(shè)置為 false 即可
  • 自定義的事務(wù)管理類型需要實現(xiàn) TransactionFactory 接口

DataSource

在 MyBatis 中,數(shù)據(jù)庫是通過 PooledDataSourceFactory、UnpooledDataSourceFactory 和 JndiDataSourceFactory 三個工廠類來提供,前兩者分別產(chǎn)生 PooledDataSource 和 UnpooledDataSource 類對象,第三個則會根據(jù) JNDI 的信息獲得外部容器實現(xiàn)的數(shù)據(jù)庫連接對象,總之,它們最后都會生成一個實現(xiàn)了 DataSource 接口的數(shù)據(jù)庫連接對象。

type = UNPOOLED | POOLED | JNDI | 自定義

UNPOOLED

UNPOOLED 采用非數(shù)據(jù)庫池的管理方式,每次請求都會新建一個連接,所以性能不是很高,使用這種數(shù)據(jù)源的時候,UNPOOLED 類型的數(shù)據(jù)源可以配置以下屬性:

  • driver:數(shù)據(jù)庫驅(qū)動名
  • url:數(shù)據(jù)庫連接 URL
  • username:用戶名
  • password:密碼
  • defaultTransactionIsolationLevel:默認的事務(wù)隔離級別,如果要傳遞屬性給驅(qū)動,則屬性的前綴為 driver

POOLED

        POOLED 采用連接池的概念將數(shù)據(jù)庫鏈接對象 Connection 組織起來,可以在初始化時創(chuàng)建多個連接,使用時直接從連接池獲取,避免了重復創(chuàng)建連接所需的初始化和認證時間,從而提升了效率,所以這種方式比較適合對性能要求高的應(yīng)用中。除了 UNPOOLED 中的配置屬性之外,還有以下幾個修改連接池的配置:

  • poolMaximumActiveConnections:用于設(shè)置連接池中允許的最大活躍連接數(shù)。超過這個數(shù)量的連接將會被阻塞,直到有連接被釋放為止,默認值為 10

  • poolMaxmumIdleConnections:用于設(shè)置連接池中允許的最大空閑連接數(shù)。當連接池中的連接數(shù)量超過這個值時,多余的連接將會被釋放,默認值為 5

  • poolMaxmumCheckoutTime:用于設(shè)置連接在連接池中的最大使用時間。超過這個時間的連接將會被強制回收,默認值為 20000 毫秒(即 20 秒)

  • poolTimeToWait:用于設(shè)置從連接池中獲取連接時的最大等待時間。如果在這個時間內(nèi)無法獲取到連接,將會拋出超時異常,默認值為 20000 毫秒(即 20 秒)

JNDI

數(shù)據(jù)源 JNDI 的實現(xiàn)是為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源,然后放置一個 JNDI 上下文的引用。這種數(shù)據(jù)源只需配置兩個屬性:

  • initial_context:用來在 InitialContext 中尋找上下文??蛇x,如果忽略,data_source 屬性將會直接從 InitialContext 中尋找
  • data_source:引用數(shù)據(jù)源實例位置上下文的路徑。當提供 initial_context 配置時,data_source 會在其返回的上下文進行查找,否則直接從 InitialContext 中查找

9 databaseIdProvider 數(shù)據(jù)庫廠商(了解)

databaseIdProvider 元素主要是為了支持不同廠商的數(shù)據(jù)庫,這個元素不常用。

<!--數(shù)據(jù)庫廠商標示 -->
<databaseIdProvider type="DB_VENDOR">
    <property name="Oracle" value="oracle"/>
    <property name="MySQL" value="mysql"/>
    <property name="DB2" value="d2"/>
</databaseIdProvider>

以下是 databaseIdProvider 中的屬性介紹:

  • Type:DB_VENDOR,使用 MyBatis 提供的 VendorDatabaseIdProvider 解析數(shù)據(jù)庫廠商標識。也可以實現(xiàn) DatabaseIdProvider 接口來自定義
  • Property-name:數(shù)據(jù)庫廠商標識
  • Property-value:為數(shù)據(jù)庫廠商標識起一個別名,方便 SQL 語句使用 databaseId 屬性引用

設(shè)置了以上配置,我們就可以在自己的 sql 語句中使用屬性 databaseId 來標示數(shù)據(jù)庫類型

<!-- 查詢所有用戶 -->
<select id="selectAllUser" resultType="com.entity.User" databaseId="oracle">
    select * from t_user
</select>

10 mapper 加載 SQL 映射文件

mapper 用來加載配置的 SQL 映射文件,它有以下四種加載方式:

  • 用文件路徑引入
  • 使用 URL 方式引入
  • 用類注冊引入
  • 用包名引入(推薦)
<mappers>
    <!-- 用文件路徑引入,這種方式是相對路徑,相對于項目目錄下 -->
    <mapper resource="com/mapper/UserMapper.xml" />

    <!-- 使用 URL 方式引入,這種方式是絕對路徑,
    就是從我們的磁盤讀取映射文件,一般不會使用這種方式 -->
    <mapper url="D:/xxx/com/mapper/UserMapper.xml" />

    <!-- 用類注冊引入,若使用這種方式,Mapper接口的名稱必須與映射文件的名稱相同,
    并且要在同一個包名下,否則會找不到。如:UserMapper.java(接口)—UserMapper.xml(映射文件) -->
    <mapper class="com.mapper.UserMapper" />

    <!-- 用包名引入(推薦),這種方式的要求同樣是Mapper接口和Mapper的映射文件的名稱要相同,
    并且要放在相同的包名下,否則會導致找不到 -->
    <package name="com.mapper"/>
</mappers>

11 參考文檔

尚硅谷文檔

MyBatis 配置 setting 詳解

Mybatis3詳解(三)----Mybatis全局配置文件詳解

到此這篇關(guān)于MyBatis 全局配置文件詳解的文章就介紹到這了,更多相關(guān)MyBatis 全局配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot?的?web?類型推斷詳解

    SpringBoot?的?web?類型推斷詳解

    這篇文章主要介紹了SpringBoot?的?web?類型推斷詳解的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Java編程實現(xiàn)遍歷兩個MAC地址之間所有MAC的方法

    Java編程實現(xiàn)遍歷兩個MAC地址之間所有MAC的方法

    這篇文章主要介紹了Java編程實現(xiàn)遍歷兩個MAC地址之間所有MAC的方法,涉及Java針對MAC的遍歷獲取與字符串轉(zhuǎn)換相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • springcloud之FeignClient使用詳解

    springcloud之FeignClient使用詳解

    Feign是一種聲明式、模板化的HTTP客戶端,可以簡化微服務(wù)之間的遠程過程調(diào)用,通過Feign,開發(fā)者可以像調(diào)用本地方法一樣調(diào)用遠程服務(wù),而無需感知這是一個HTTP請求,引入Feign后,微服務(wù)之間的調(diào)用流程更加簡化,結(jié)合Ribbon實現(xiàn)了路由負載、超時熔斷等功能
    2024-12-12
  • SpringBoot項目打成war和jar的區(qū)別說明

    SpringBoot項目打成war和jar的區(qū)別說明

    這篇文章主要介紹了SpringBoot項目打成war和jar的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring中AOP概念與兩種動態(tài)代理模式原理詳解

    Spring中AOP概念與兩種動態(tài)代理模式原理詳解

    AOP是面向切面編程的技術(shù),AOP基于IoC基礎(chǔ),是對OOP的有益補充,流行的AOP框架有Sping AOP、AspectJ,這篇文章主要給大家介紹了關(guān)于Spring中AOP概念與兩種動態(tài)代理模式原理的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java實現(xiàn)的圖片高質(zhì)量縮放類定義與用法示例

    Java實現(xiàn)的圖片高質(zhì)量縮放類定義與用法示例

    這篇文章主要介紹了Java實現(xiàn)的圖片高質(zhì)量縮放類定義與用法,涉及java針對圖片的運算與轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Maven統(tǒng)一版本管理的實現(xiàn)

    Maven統(tǒng)一版本管理的實現(xiàn)

    在使用Maven多模塊結(jié)構(gòu)工程時,配置版本是一個比較頭疼的事,本文主要介紹了Maven統(tǒng)一版本管理的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 詳解Log4j 日志文件存放位置設(shè)置

    詳解Log4j 日志文件存放位置設(shè)置

    這篇文章主要介紹了詳解Log4j 日志文件存放位置設(shè)置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java FutureTask類使用案例解析

    Java FutureTask類使用案例解析

    這篇文章主要介紹了Java FutureTask類使用案例解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值析,需要的朋友可以參考下
    2020-04-04
  • Java的反射機制之類加載詳解

    Java的反射機制之類加載詳解

    這篇文章主要介紹了Java的反射機制之類加載詳解,反射機制是java實現(xiàn)動態(tài)語言的關(guān)鍵,也就是通過反射實現(xiàn)類動態(tài)加載,靜態(tài)加載是指在編譯時期確定要加載的類的類型,即通過class關(guān)鍵字和類名來獲取對應(yīng)類的類型,需要的朋友可以參考下
    2023-09-09

最新評論