mybatis學習筆記(三)- 全域性配置檔案
阿新 • • 發佈:2018-12-29
1. 引入 dtd 約束
為什麼要引入 dtd 約束
由於 mybatis 的全域性配置檔案很重要,我們學習 mybatis 必須要用到,但是如果不引入 dtd 約束,我們在這個檔案裡將不會得到程式碼提示,會給我們開發帶來極大不便。
引入方法
- 聯網情況下:直接點選 配置檔案上方的 “http://mybatis.org/dtd/mybatis-3-config.dtd” 下載,關閉配置檔案後重新開啟就可以了
- 無網狀態下:請參照:https://blog.csdn.net/a15920804969/article/details/79107852
2. properties 引入外部配置檔案(瞭解)
properties 標籤的使用
- mybatis可以使用properties來引入外部properties配置檔案的內容;
- resource:引入類路徑下的資源
- url:引入網路路徑或者磁碟路徑下的資源
<properties resource="dbconfig.properties"></properties>
dbconfig.properties 設計
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=[資料庫使用者名稱] jdbc.password=[資料庫密碼]
使用
<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}" />
</dataSource>
3. settings 執行時行為設定 (重要)
這是 MyBatis 中極為重要的調整設定,它們會改變 MyBatis 的執行時行為。 下面舉一個例子。
- mapUnderscoreToCamelCase:
- 描述:是否開啟自動駝峰命名規則對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映
- 預設值:false
- 有效值:true|false
- settings包含很多重要的設定項
- setting:用來設定每一個設定項
- name:設定項名
- value:設定項取值
- setting:用來設定每一個設定項
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
4. typeAliases_別名 (重要)
typeAliases:類型別名是為 Java 型別設定一個短的名字,可以方便我們引用某個類
- typeAlias:為某個java型別起別名
- type:指定要起別名的型別全類名;預設別名就是類名小寫;employee
- alias:指定新的別名
- 注意:別名不區分大小寫
<typeAliases>
<typeAlias type="com.atguigu.mybatis.bean.Employee" alias="employee"/>
</typeAliases>
- package:為某個包下的所有類批量起別名
- name:指定包名(為當前包以及下面所有的後代包的每一個類都起一個預設別名(類名小寫),)
<typeAliases>
<package name="www.xq.mybatis.bean"/>
</typeAliases>
- 批量起別名的情況下,使用@Alias註解為某個型別指定新的別名
@Alias("emp")
public class Employee {
.....
}
- 注意:,MyBatis已經為許多常見的 Java 型別內建 了相應的類型別名。它們都是大小寫不敏感的,我們在起 別名的時候千萬不要佔用已有的別名。
5. typeHandlers_型別處理器簡介 (重要)
無論是 MyBatis 在預處理語句(PreparedStatement)中 設定一個引數時,還是從結果集中取出一個值時, 都會 用型別處理器將獲取的值以合適的方式轉換成 Java 型別。
6. plugins_外掛簡介
外掛是MyBatis提供的一個非常強大的機制,我們 可以通過外掛來修改MyBatis的一些核心行為。插 件通過動態代理機制,可以介入四大物件的任何 一個方法的執行。後面會有專門的章節我們來介 紹mybatis執行原理以及外掛
7. enviroments_執行環境
environments:環境們,mybatis可以配置多種環境 ,default指定使用某種環境。可以達到快速切換環境.
- environment:配置一個具體的環境資訊;必須有兩個標籤;id代表當前環境的唯一標識
- transactionManager:事務管理器;
- type:事務管理器的型別;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
- 自定義事務管理器:實現TransactionFactory介面.type指定為全類名
- dataSource:資料來源;
- type:資料來源型別;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)
自定義資料來源:實現DataSourceFactory介面,type是全類名
- type:資料來源型別;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)
<environments default="dev_mysql">
<environment id="dev_mysql">
<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}" />
</dataSource>
</environment>
8. databaseIdProvider_多資料庫支援 (重要)
MyBatis 可以根據不同的資料庫廠商執行不同的語句。
- databaseIdProvider:支援多資料庫廠商的;
- type=“DB_VENDOR”:VendorDatabaseIdProvider
- 作用就是得到資料庫廠商的標識(驅動getDatabaseProductName()),mybatis就能根據數 據庫廠商標識來執行不同的sql;
MySQL,Oracle,SQL Server,xxxx
<databaseIdProvider type="DB_VENDOR">
<!-- 為不同的資料庫廠商起別名 -->
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
9. mappers_sql對映註冊 (重要)
mappers:將sql對映註冊到全域性配置中
- mapper:註冊一個sql對映
- 註冊配置檔案
- resource:引用類路徑下的sql對映檔案
mybatis/mapper/EmployeeMapper.xml - url:引用網路路徑或者磁碟路徑下的sql對映檔案
file:///var/mappers/AuthorMapper.xml - 註冊介面
class:引用(註冊)介面,- 有sql對映檔案,對映檔名必須和介面同名,並且放在與介面同一目錄下;
- 沒有sql對映檔案,所有的sql都是利用註解寫在介面上;
- 推薦:
- 比較重要的,複雜的Dao介面我們來寫sql對映檔案
- 不重要,簡單的Dao介面為了開發快速可以使用註解;
<mappers>
<mapper resource="mybatis/mapper/EmployeeMapper.xml"/>
<mapper class="www.xq.mybatis.dao.EmployeeMapperAnnotation"/>
</mappers>
- 批量註冊:
<mappers>
<package name="www.xq.mybatis.dao"/>
</mappers>
總結
- 配置檔案中的標籤是有一定順序的(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)