02、MyBatis XML配置

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="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>

2)設置(settings)   (1)mapUnderscoreToCamelCase

	<!-- settings:包含很多設置項 -->
	<!-- setting:用來選擇設置中各項設置 -->
	<!-- name:設置項名 -->
	<!-- value:設置項取值 -->
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="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="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>

		<environment id="development">
			<transactionManager type="JDBC" />
			<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>
	</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="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="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="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	
		<environment id="dev_oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${orcl.driver}" />
				<property name="url" value="${orcl.url}" />
				<property name="username" value="${orcl.username}" />
				<property name="password" value="${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 class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> -->
		<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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章