MyBatis框架 第3章 MyBatis全局配置文件
第3章 MyBatis全局配置文件
3.1 MyBatis全局配置文件簡介
? 1)? The MyBatis configuration contains settings and properties that have a dramatic effect on how MyBatis behaves.
MyBatis 的配置文件包含了影響 MyBatis 行為甚深的設置(settings)和屬性(properties)信息。
? 2)? 文件結構如下:
configuration 配置
environment 環(huán)境變量
transactionManager 事務管理器
dataSource 數(shù)據源
databaseIdProvider?數(shù)據庫廠商標識
3.2 properties屬性
? 1)? 可外部配置且可動態(tài)替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來配置? 2)? 然而properties的作用并不單單是這樣,你可以創(chuàng)建一個資源文件,名為properties的文件,將四個連接字符串的數(shù)據在資源文件中通過鍵值 對(key=value)的方式放置,不要任何符號,一條占一行
3)在environment元素的dataSource元素中為其動態(tài)設置
3.3 settings設置
? 1)? 這是 MyBatis 中極為重要的調整設置,它們會改變 MyBatis 的運行時行為。
? 2)? 包含如下的setting設置:
3.4 typeAliases 別名處理
? 1)? 類型別名是為 Java 類型設置一個短的名字,可以方便我們引用某個類。
? 2)? 類很多的情況下,可以批量設置別名這個包下的每一個類創(chuàng)建一個默認的別名,就是簡單類名小寫? 3)? MyBatis已經取好的別名
3.5 typeHandlers 類型處理器
? 1)? 無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數(shù)時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型
? 2)? MyBatis中提供的類型處理器:?
? ?3)? 日期和時間的處理,8以前一直是個頭疼的問題。我們通常使用JSR310規(guī)范領導者Stephen Colebourne創(chuàng)建的Joda-Time來操作。1.8已經實現(xiàn)全部的JSR310規(guī)范了
? 4)? 日期時間處理上,我們可以使用MyBatis基于JSR310(Date and Time API)編寫的各種日期時間類型處理器。
? 5)? ?MyBatis 3. 4以前的版本需要我們手動注冊這些處理器,以后的版本都是自動注冊的,如需注冊,需要下載mybatistypehandlers-jsr310,并通過如下方式注冊? 6)? 自定義類型轉換器
- 我們可以重寫類型處理器或創(chuàng)建自己的類型處理器來處理不支持的或非標準的類 型
- 步驟
- 實現(xiàn)apache.ibatis.type.TypeHandler接口或者繼承org.apache.ibatis.type.BaseTypeHandler
- 指定其映射某個JDBC類型(可選操作)
- 在mybatis全局配置文件中注冊
?
3.6 plugins 插件機制
? 1)? 插件是MyBatis提供的一個非常強大的機制,我們可以通過插件來修改MyBatis的一些核心行為。插件通過動態(tài)代理機制,可以介入四大對象的任何一個方法的執(zhí)行
? 2)? 四大對象:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
3.7 environments 環(huán)境配置
? 1)? MyBatis可以配置多種環(huán)境,比如開發(fā)、測試和生產環(huán)境需要有不同的配置
? 2)? 每種環(huán)境使用一個environment標簽進行配置并指定唯一標識符
? 3)? 可以通過environments標簽中的default屬性指定一個環(huán)境的標識符來快速的切換環(huán)境
? 4)? environment-指定具體環(huán)境
id:指定當前環(huán)境的唯一標識
transactionManager、和dataSource都必須有
? 5)? transactionManager
type: ?JDBC | MANAGED | 自定義
JDBC:使用了 JDBC 的提交和回滾設置,依賴于從數(shù)據源得到的連接來管理事務范 ??圍。 JdbcTransactionFactory
MANAGED:不提交或回滾一個連接、讓容器來管理事務的整個生命周期(比如 JEE ??應用服務器的上下文)。 ManagedTransactionFactory
自定義:實現(xiàn)TransactionFactory接口,type=全類名/別名
? ?6)? dataSource
type: ?UNPOOLED | POOLED | JNDI | 自定義
UNPOOLED:不使用連接池, UnpooledDataSourceFactory
POOLED:使用連接池, PooledDataSourceFactory
JNDI: 在EJB 或應用服務器這類容器中查找指定的數(shù)據源
自定義:實現(xiàn)DataSourceFactory接口,定義數(shù)據源的獲取方式。
? 7)? 實際開發(fā)中我們使用Spring管理數(shù)據源,并進行事務控制的配置來覆蓋上述配置
3.8 databaseIdProvider數(shù)據庫廠商標識
? 1)? MyBatis 可以根據不同的數(shù)據庫廠商執(zhí)行不同的語句
? ?2)? Type: DB_VENDOR,使用MyBatis提供的VendorDatabaseIdProvider解析數(shù)據庫廠商標識。也可以實現(xiàn)DatabaseIdProvider接口來自定義.
會通過 DatabaseMetaData#getDatabaseProductName() 返回的字符串進行設置。由于通常情況下這個字符串都非常長而且相同產品的不同版本會返回不同的值,所以最好通過設置屬性別名來使其變短.
Property-name:數(shù)據庫廠商標識
Property-value:為標識起一個別名,方便SQL語句使用databaseId屬性引用
? 3)? 配置了databaseIdProvider后,在SQL映射文件中的增刪改查標簽中使用databaseId
來指定數(shù)據庫標識的別名? 4)? MyBatis匹配規(guī)則如下:
- 如果沒有配置databaseIdProvider標簽,那么databaseId=null
- 如果配置了databaseIdProvider標簽,使用標簽配置的name去匹配數(shù)據庫信息,匹配上設置databaseId=配置指定的值,否則依舊為null
- 如果databaseId不為null,他只會找到配置databaseId的sql語句
- MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數(shù)據庫databaseId 屬性的所有語句。如果同時找到帶有 databaseId 和不帶databaseId 的相同語句,則后者會被舍棄。
?
3.9 mappers 映射器
? 1)? 用來在mybatis初始化的時候,告訴mybatis需要引入哪些Mapper映射文件?
? ?2)? mapper逐個注冊SQL映射文件
resource : 引入類路徑下的文件
url : ?????引入網絡路徑或者是磁盤路徑下的文件
class : ???引入Mapper接口.
有SQL映射文件 , 要求Mapper接口與 SQL映射文件同名同位置.
沒有SQL映射文件 , 使用注解在接口的方法上寫SQL語句.