MyBatis-全域組態檔
在MyBatis中全域組態檔有著重要的地位,里面有9類行為資訊;如果我們要想將MyBatis運用的熟練,配置全域組態檔是必不可少的步驟,所以我們一定要啃下這一塊硬骨頭,該文章是結合MyBatis組態檔網頁加個人理解做的筆記,如果有的地方寫的不夠好或者有錯誤,懇請大家多多給我指出,因為我也是在摸索中進步,下面將對9大行為資訊和屬性資訊配置進行解釋.
1. MyBatis配置
注:MyBatis的標簽是有順序的,如果不按照順序會出現The content of element type "configuration" must match 錯誤.標簽的順序為:
在Eclipse中引入XML的dtd約束檔案,方便撰寫XML的時候有提示

1)屬性(properties)

(1)dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root123
(2)properties屬性
<!-- properties:引入外部properties組態檔的內容 --> <!-- url:引入網路路徑或者磁盤路徑下的資源 --> <!-- resource:引入類路徑下的資源 --> <properties resource="dbconfig.properties" ></properties>
(3)使用properties配置mybatis-config.xml
<!-- properties:引入外部properties組態檔的內容 -->
<!-- url:引入網路路徑或者磁盤路徑下的資源 -->
<!-- resource:引入類路徑下的資源 -->
<properties resource="dbconfig.properties" ></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="https://www.cnblogs.com/CSAH/p/${jdbc.driver}" />
<property name="url" value="https://www.cnblogs.com/CSAH/p/${jdbc.url}" />
<property name="username" value="https://www.cnblogs.com/CSAH/p/${jdbc.username}" />
<property name="password" value="https://www.cnblogs.com/CSAH/p/${jdbc.password}" />
</dataSource>
</environment>
</environments>
2)設定(settings)
(1)mapUnderscoreToCamelCase
<!-- settings:包含很多設定項 --> <!-- setting:用來選擇設定中各項設定 --> <!-- name:設定項名 --> <!-- value:設定項取值 --> <settings> <setting name="mapUnderscoreToCamelCase" value="https://www.cnblogs.com/CSAH/p/true"/> </settings>
3)型別別名(typeAliases)
注意:MyBatis已經為許多常見的 Java 型別內建了相應的型別別名,它們都是大小寫不敏感的,我們在起別名的時候千萬不要占用已有的別名,
我們目前最新的mybatis推薦使用全限定類名書寫,
<!-- typeAliases:別名處理器,可以為java型別起別名.別名不區分大小寫 emp 和 Emp是一樣的 -->
<!-- typeAlias:為java型別起別名 -->
<!-- type:指定要起別名的型別全類名;默認別名就是類名小寫 -->
<!-- alias:指定新的別名 -->
<!-- package:指定一個包名,為該包下所有類批量起別名 -->
<!-- 批量起別名的情況下,使用@Alias注解為某個型別指定新的別名 如:@Alias("empp") 起別名為empp-->
<typeAliases>
<!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> -->
<package name="com.atguigu.mybatis.bean" />
</typeAliases>
4)型別處理器(typeHandlers)
無論是 MyBatis 在預處理陳述句(PreparedStatement)中設定一個引數時,還是從結果集中取出一個值時, 都會用型別處理器將獲取的值以合適的方式轉換成 Java 型別,
? 日期和時間的處理,JDK1.8以前一直是個頭疼的問題,我們通常使用JSR310規范領導者Stephen Colebourne創建的Joda-Time來操作,1.8已經實作全部的JSR310規范了,
? 日期時間處理上,我們可以使用MyBatis基于JSR310(Date and Time API)撰寫的各種日期時間型別處理器,
? MyBatis3.4以前的版本需要我們手動注冊這些處理器,以后的版本都是自動注冊的
5)物件工廠(objectFactory)

6)插件(plugins)
插件是MyBatis提供的一個非常強大的機制,我們可以通過插件來修改MyBatis的一些核心行為,插件通過動態代理機制,可以介入四大物件的任何一個方法的執行, 
7)環境配置(environments)

<!-- environments:配置多種環境;default標簽可以指定使用的環境,可以達到快速切換環境的效果 -->
<!-- environment 配置一個具體的環境資訊;id代表當前環境的唯一標識;必須有兩個標簽transactionManager/type -->
<!-- transactionManager:事務管理器 -->
<!-- type:事務管理器的型別;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)|自定義事務管理器(實作TransactionFactory介面.type指定為全類名) -->
<!-- JDBC:使用了 JDBC 的提交和回滾設定,依賴于從資料源得到的連接來管理事務范圍 -->
<!-- MANAGED:不提交或回滾一個連接、讓容器來管理事務的整個生命周期(比如 JEE 應用服務器的背景關系) -->
<!-- 自定義:實作TransactionFactory介面,type=全類名/別名 -->
<!-- dataSource:資料源 -->
<!-- type:資料源型別;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)|自定義資料源(實作DataSourceFactory介面,type是全類名) -->
<!-- UNPOOLED:不使用連接池 -->
<!-- POOLED:使用連接池 -->
<!-- JNDI: 在EJB 或應用服務器這類容器中查找指定的資料源 -->
<!-- 自定義:實作DataSourceFactory介面,定義資料源的獲取方式 -->
<!-- 實際開發中我們使用Spring管理資料源,并進行事務控制的配置來覆寫上述配置 -->
<environments default="development">
<environment id="test">
<transactionManager type="JDBC" />
<dataSource type="">
<property name="driver" value="https://www.cnblogs.com/CSAH/p/${jdbc.driver}" />
<property name="url" value="https://www.cnblogs.com/CSAH/p/${jdbc.url}" />
<property name="username" value="https://www.cnblogs.com/CSAH/p/${jdbc.username}" />
<property name="password" value="https://www.cnblogs.com/CSAH/p/${jdbc.password}" />
</dataSource>
</environment>
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="https://www.cnblogs.com/CSAH/p/${jdbc.driver}" />
<property name="url" value="https://www.cnblogs.com/CSAH/p/${jdbc.url}" />
<property name="username" value="https://www.cnblogs.com/CSAH/p/${jdbc.username}" />
<property name="password" value="https://www.cnblogs.com/CSAH/p/${jdbc.password}" />
</dataSource>
</environment>
</environments>
8)資料庫廠商標識(databaseIdProvider)
MyBatis 可以根據不同的資料庫廠商執行不同的陳述句.

(1)添加select
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" >
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="mysql" >
select id,email from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="oracle">
select * from tbl_employee where id = #{id}
</select>
(2)添加databaseIdProvider
<!-- databaseIdProvider:持多資料庫廠商 --> <!-- type="DB_VENDOR":VendorDatabaseIdProvider --> <!-- type:得到資料庫廠商的標識(驅動getDatabaseProductName()),mybatis就能根據資料庫廠商標識來執行不同的sql --> <databaseIdProvider type="DB_VENDOR"> <!-- 為不同的資料庫廠商起別名 --> <property name="MySQL" value="https://www.cnblogs.com/CSAH/p/mysql"/> <property name="Oracle" value="https://www.cnblogs.com/CSAH/p/oracle"/> <property name="SQL Server" value="https://www.cnblogs.com/CSAH/p/sqlserver"/> </databaseIdProvider>
(3)配置properties(資料庫鏈接資訊)
#Mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root123 #Oracle orcl.driver=oracle.jdbc.OracleDriver orcl.url=jdbc:oracle:thin:@localhost:1521:orcl orcl.username=scott orcl.password=123456
(4)配置environments
<environments default="dev_mysql">
<environment id="dev_mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="https://www.cnblogs.com/CSAH/p/${jdbc.driver}" />
<property name="url" value="https://www.cnblogs.com/CSAH/p/${jdbc.url}" />
<property name="username" value="https://www.cnblogs.com/CSAH/p/${jdbc.username}" />
<property name="password" value="https://www.cnblogs.com/CSAH/p/${jdbc.password}" />
</dataSource>
</environment>
<environment id="dev_oracle">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="https://www.cnblogs.com/CSAH/p/${orcl.driver}" />
<property name="url" value="https://www.cnblogs.com/CSAH/p/${orcl.url}" />
<property name="username" value="https://www.cnblogs.com/CSAH/p/${orcl.username}" />
<property name="password" value="https://www.cnblogs.com/CSAH/p/${orcl.password}" />
</dataSource>
</environment>
</environments>
9)映射器(mappers)
(1)mybatis-config.xml
<!-- !!!!!!!!!非常重要!!!!!!!!!!!! --> <!-- 將我們寫好的sql映射檔案<EmployeeMapper.xml>一定要注冊到全域組態檔中 --> <!-- mappers:將sql映射注冊到全域配置中 --> <!-- mapper:注冊一個sql映射 --> <!-- resource(使用相對于類路徑的資源參考):參考類路徑下的sql映射檔案 org/mybatis/builder/AuthorMapper.xml--> <!-- url(使用完全限定資源定位符):參考網路路徑或者磁盤路徑下的sql映射檔案 file:///var/mappers/AuthorMapper.xml --> <!-- class(使用映射器介面實作類的完全限定類名):參考(注冊)介面 org.mybatis.builder.AuthorMapper --> <!-- 存在sql映射檔案:映射檔案名必須和介面同名,需組態檔與介面檔案同一目錄下(com.atguigu.mybatis.dao.EmployeeMapper.java)和(com.atguigu.mybatis.dao.EmployeeMapper.xml --> <!-- 不存在sql映射檔案:所有的sql都是利用注解寫在介面上(com.atguigu.mybatis.dao.EmployeeMapperAnnotation) --> <!-- package:批量注冊sql映射 --> <mappers> <!-- <mapper resource="com/batis/mapper/EmployeeMapper.xml" /> --> <!-- <mapper /> --> <package name="com.atguigu.mybatis.dao"/> </mappers>
(2)select注解
public interface EmployeeMapperAnnotation {
@Select("select * from tbl_employee where id=#{id}")
public Employee getEmpById(Integer id);
}
參考檔案:https://mybatis.org/mybatis-3/zh/configuration.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/164042.html
標籤:Java
上一篇:Java中的substring
