Mybatis---全局配置解析 --根据官方文档--常用
一、配置文檔的頂層結構
configuration(配置)
- properties(屬性)
- settings(設置)
- typeAliases(類型別名)
- typeHandlers(類型處理器)
- objectFactory(對象工廠)
- plugins(插件)
- environments(環境配置)
- environment(環境變量)
- transactionManager(事務管理器)
- dataSource(數據源)
- environment(環境變量)
- databaseIdProvider(數據庫廠商標識)
- mappers(映射器)
二、屬性(properties)
- 屬性可以在外部進行配置,并可以進行動態替換
- Java 屬性文件中配置這些屬性,也可以 properties 元素的子元素中設置
-
設置好的屬性可以在整個配置文件中用來替換需要動態配置的屬性值
- <environments default="development"><environment id="development"><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}"/> --><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>
**注意:**屬性可以不只一個地方進行配置
但是Mybatis會嚴格按照下面的順序來加載
- 首先讀取在 properties 元素體內指定的屬性。
- 然后根據 properties 元素中的 resource 屬性讀取類路徑下屬性文件,或根據 url 屬性指定的路徑讀取屬性文件,并覆蓋之前讀取過的同名屬性。
- 最后讀取作為方法參數傳遞的屬性,并覆蓋之前讀取過的同名屬性。
二、設置(settings)
MyBatis 中極為重要的調整設置,它們會改變 MyBatis 的運行時行為
| cacheEnabled | 全局性地開啟或關閉所有映射器配置文件中已配置的任何緩存。 | true | false | true |
| defaultStatementTimeout | 設置超時時間,它決定數據庫驅動等待數據庫響應的秒數。 | 任意正整數 | 未設置 (null) |
| safeRowBoundsEnabled | 是否允許在嵌套語句中使用分頁(RowBounds)。如果允許使用則設置為 false。 | true | false | False |
| safeResultHandlerEnabled | 是否允許在嵌套語句中使用結果處理器(ResultHandler)。如果允許使用則設置為 false。 | true | false | True |
| mapUnderscoreToCamelCase | 是否開啟駝峰命名自動映射,即從經典數據庫列名 A_COLUMN 映射到經典 Java 屬性名 aColumn。 | true | false | False |
| localCacheScope | MyBatis 利用本地緩存機制(Local Cache)防止循環引用和加速重復的嵌套查詢。 默認值為 SESSION,會緩存一個會話中執行的所有查詢。 若設置值為 STATEMENT,本地緩存將僅用于執行語句,對相同 SqlSession 的不同查詢將不會進行緩存。 | SESSION | STATEMENT | SESSION |
| defaultScriptingLanguage | 指定動態 SQL 生成使用的默認腳本語言。 | 一個類型別名或全限定類名。 | org.apache.ibatis.scripting.xmltags.XMLLanguageDriver |
| logPrefix | 指定 MyBatis 增加到日志名稱的前綴。 | 任何字符串 | 未設置 |
| logImpl | 指定 MyBatis 所用日志的具體實現,未指定時將自動查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未設置 |
| lazyLoadingEnabled | 延遲加載的全局開關。當開啟時,所有關聯對象都會延遲加載。 特定關聯關系中可通過設置 fetchType 屬性來覆蓋該項的開關狀態。 | true | false | false |
| useGeneratedKeys | 允許 JDBC 支持自動生成主鍵,需要數據庫驅動支持。如果設置為 true,將強制使用自動生成主鍵。盡管一些數據庫驅動不支持此特性,但仍可正常工作(如 Derby)。 | true | false | False |
| multipleResultSetsEnabled | 是否允許單個語句返回多結果集(需要數據庫驅動支持)。 | true | false | true |
三、類型別名(typeAliases)
類型別名可為 Java 類型設置一個縮寫名字。 它僅用于 XML 配置,意在降低冗余的全限定類名書寫。
舉例
-
原生態
<!--這里是要用到 User 的地方 --> <select id="selectAll" resultType="com.study.pojo.User">select * from user</select> -
接下來在核心文件中取 別名
-
1、
<typeAliases><typeAlias alias="User" type="com.study.pojo.User"/> </typeAliases>注:這樣配置時,User 可以用在任何使用 com.study.pojo.User 的地方。
-
取別名后使用 舉例
<select id="selectAll" resultType="User">select * from user</select>
-
-
注解方式取別名
-
? 配置
<typeAliases><!--這里的意思是 在 com.study.pojo 下的所有實體類 都可以 通過注解取別名 --><package name="com.study.pojo"/> </typeAliases> -
com.study.pojo.User類
@Alias("user") public class User {private Integer id;private String username;private String password; ... // 后面還有有參/無參 構造 set/get toString 方法 這里就不寫啦
-
四、類型處理器(typeHandlers)
- 這個暫時接觸的少,剛學,等用到的時候,再反過來重新更新。
五、插件(plugins)
- 這個同上。
六、環境配置(environments)
-
MyBatis 可以配置成適應多種環境,盡管可以配置多個環境,但每個 SqlSessionFactory 實例只能選擇一種環境。
-
environments 元素定義了如何配置環境。
<environments default="development"><environment id="development"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment> </environments>注意一些關鍵點:
- 默認使用的環境 ID(比如:default=“development”)。
- 每個 environment 元素定義的環境 ID(比如:id=“development”)。
- 事務管理器的配置(比如:type=“JDBC”)。
- 數據源的配置(比如:type=“POOLED”)。
-
事務管理器(transactionManager)
- 在 MyBatis 中有兩種類型的事務管理器(也就是 type="[JDBC|MANAGED]")
- JDBC – 這個配置直接使用了 JDBC 的提交和回滾設施,它依賴從數據源獲得的連接來管理事務作用域。
- MANAGED – 這個配置幾乎沒做什么。它從不提交或回滾一個連接,而是讓容器來管理事務的整個生命周期(比如 JEE 應用服務器的上下文)
-
數據源(dataSource)
-
多數 MyBatis 應用程序會按示例中的例子來配置數據源。雖然數據源配置是可選的,但如果要啟用延遲加載特性,就必須配置數據源。
-
有三種內建的數據源類型(也就是 type="[UNPOOLED|POOLED|JNDI]"):
-
UNPOOLED– 這個數據源的實現會每次請求時打開和關閉連接。
- UNPOOLED 類型的數據源僅僅需要配置以下 5 種屬性:
- driver – 這是 JDBC 驅動的 Java 類全限定名(并不是 JDBC 驅動中可能包含的數據源類)。
- url – 這是數據庫的 JDBC URL 地址。
- username – 登錄數據庫的用戶名。
- password – 登錄數據庫的密碼。
- defaultTransactionIsolationLevel – 默認的連接事務隔離級別。
- defaultNetworkTimeout – 等待數據庫操作完成的默認網絡超時時間(單位:毫秒)。查看 java.sql.Connection#setNetworkTimeout() 的 API 文檔以獲取更多信息。
-
-
POOLED– 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。 這種處理方式很流行,能使并發 Web 應用快速響應請求。
- 還有更多屬性用來配置 POOLED 的數據源:
- poolMaximumActiveConnections – 在任意時間可存在的活動(正在使用)連接數量,默認值:10
- poolMaximumIdleConnections – 任意時間可能存在的空閑連接數。
- poolMaximumCheckoutTime – 在被強制返回之前,池中連接被檢出(checked out)時間,默認值:20000 毫秒(即 20 秒)
- poolTimeToWait – 這是一個底層設置,如果獲取連接花費了相當長的時間,連接池會打印狀態日志并重新嘗試獲取一個連接(避免在誤配置的情況下一直失敗且不打印日志),默認值:20000 毫秒(即 20 秒)。
- poolMaximumLocalBadConnectionTolerance – 這是一個關于壞連接容忍度的底層設置, 作用于每一個嘗試從緩存池獲取連接的線程。 如果這個線程獲取到的是一個壞的連接,那么這個數據源允許這個線程嘗試重新獲取一個新的連接,但是這個重新嘗試的次數不應該超過 poolMaximumIdleConnections 與 poolMaximumLocalBadConnectionTolerance 之和。 默認值:3(新增于 3.4.5)
- poolPingQuery – 發送到數據庫的偵測查詢,用來檢驗連接是否正常工作并準備接受請求。默認是“NO PING QUERY SET”,這會導致多數數據庫驅動出錯時返回恰當的錯誤消息。
- poolPingEnabled – 是否啟用偵測查詢。若開啟,需要設置 poolPingQuery 屬性為一個可執行的 SQL 語句(最好是一個速度非常快的 SQL 語句),默認值:false。
- poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的頻率。可以被設置為和數據庫連接超時時間一樣,來避免不必要的偵測,默認值:0(即所有連接每一時刻都被偵測 — 當然僅當 poolPingEnabled 為 true 時適用)。
-
-
JNDI – 這個數據源實現是為了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然后放置一個 JNDI 上下文的數據源引用。
- 這種數據源配置只需要兩個屬性:
- initial_context – 這個屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))。這是個可選屬性,如果忽略,那么將會直接從 InitialContext 中尋找 data_source 屬性。
- data_source – 這是引用數據源實例位置的上下文路徑。提供了 initial_context 配置時會在其返回的上下文中進行查找,沒有提供時則直接在 InitialContext 中查找。
七、數據庫廠商標識(databaseIdProvider)
-
因為目前只學習啦mysql 還沒有接觸到其他的數據庫
-
所以在這邊只能 做出一個介紹
-
mybatis 是支持多個數據庫的 只是根據數據庫的不同而進行不同的配置
-
官網講的是:
為支持多廠商特性,只要像下面這樣在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:
<databaseIdProvider type="DB_VENDOR" />databaseIdProvider 對應的 DB_VENDOR 實現會將 databaseId 設置為 DatabaseMetaData#getDatabaseProductName() 返回的字符串。 由于通常情況下這些字符串都非常長,而且相同產品的不同版本會返回不同的值,你可能想通過設置屬性別名來使其變短:
<databaseIdProvider type="DB_VENDOR"><property name="SQL Server" value="sqlserver"/><property name="DB2" value="db2"/><property name="Oracle" value="oracle" /> </databaseIdProvider>在提供了屬性別名時,databaseIdProvider 的 DB_VENDOR 實現會將 databaseId 設置為數據庫產品名與屬性中的名稱第一個相匹配的值,如果沒有匹配的屬性,將會設置為 “null”。 在這個例子中,如果 getDatabaseProductName() 返回“Oracle (DataDirect)”,databaseId 將被設置為“oracle”。
八、映射器(mappers)
-
在前面剛剛入門的時候 就已經使用啦這個配置
- <!-- 使用相對于類路徑的資源引用 --> <mappers><mapper resource="org/mybatis/builder/AuthorMapper.xml"/> </mappers>
- <!-- 使用完全限定資源定位符(URL) 現在一般已經不用 --> <mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers>
- <!-- 使用映射器接口實現類的完全限定類名 --> <mappers><mapper class="org.mybatis.builder.AuthorMapper"/> </mappers>
- <!-- 將包內的映射器接口實現全部注冊為映射器 --> <mappers><package name="org.mybatis.builder"/> </mappers>
總結
以上是生活随笔為你收集整理的Mybatis---全局配置解析 --根据官方文档--常用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mybatis-入门篇-根据官方文档搭建
- 下一篇: junit 测试遇上java.lang.