1. 程式人生 > >MyBatis全域性配置檔案的詳解

MyBatis全域性配置檔案的詳解

簡介

        MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。

全域性配置檔案

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 屬性 -->
	<properties resource="db.properties"></properties>

	<!-- 別名 -->
	<typeAliases>
		<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
		<package name="com.example.mybatis.enity" />
	</typeAliases>

	<settings>
		<setting name="cacheEnabled" value="true" />
		<setting name="lazyLoadingEnabled" value="true" />
		<setting name="multipleResultSetsEnabled" value="true" />
		<setting name="useColumnLabel" value="true" />
		<setting name="useGeneratedKeys" value="false" />
		<setting name="autoMappingBehavior" value="PARTIAL" />
		<setting name="autoMappingUnknownColumnBehavior"
			value="WARNING" />
		<setting name="defaultExecutorType" value="SIMPLE" />
		<setting name="defaultStatementTimeout" value="25" />
		<setting name="defaultFetchSize" value="100" />
		<setting name="safeRowBoundsEnabled" value="false" />
		<setting name="mapUnderscoreToCamelCase" value="false" />
		<setting name="localCacheScope" value="SESSION" />
		<setting name="jdbcTypeForNull" value="OTHER" />
		<setting name="lazyLoadTriggerMethods"
			value="equals,clone,hashCode,toString" />
	</settings>


	<!-- 環境們 -->
	<environments default="development">
		<!-- id為環境的唯一標識 -->
		<environment id="development">
			<!-- 事物管理 -->
			<transactionManager type="JDBC" />
			<!-- 資料來源 -->
			<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>

	<!-- 多資料庫支援 -->
	<databaseIdProvider type="DB_VENDOR">
		<property name="MySQL" value="mysql"></property>
		<property name="Oracle" value="oracle"></property>
		<property name="SQL Server" value="sql server"></property>
	</databaseIdProvider>

	<!-- sql對映檔案註冊 -->
	<mappers>
		<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
		<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
	</mappers>
</configuration>

標籤介紹

1.properties

properties標籤是為MyBatis的全域性配置檔案設定屬性,由外部檔案引入,一般使用配置檔案類來引入資料

源。

        資料來源的屬性檔案的名稱為編寫規範為xxxx.properties,博主這邊設定的資料來源名稱為db.properties,配置文

件的內容編寫規範為key=value,等於號兩邊沒有空格例如:

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=root
password=root

         properties的引入方式有兩種,一種是resource:在包內部映入,例如屬性檔案在config包下面,那麼它的

屬性引入為:<properties resource="db.properties"></properties>;另一種的引入為url:映入網路檔案或磁碟中的檔案。

2.settings

        settings設定在全域性配置檔案中比較重要

<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25" />
<setting name="defaultFetchSize" value="100" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="localCacheScope" value="SESSION" />
<setting name="jdbcTypeForNull" value="OTHER" />
<setting name="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString" />
</settings>



3.typeAliases

       typeAliases是為java型別起別名的一個標籤,預設的為類名的小寫,如果設定了value那麼它的別名為value的值,package設定的是為當前包包括子包下面的所有類,這就有個問題,如果當前包和子包下面的類名一樣,那麼就會起衝突,這樣樣的解決方式就是使用註解方式,@Alias("user"),使用的前提是得引入mybatis庫檔案並設定環境變數:

        <typeAliases>
		<typeAlias type="com.example.mybatis.entity.User" value="u"></typeAlias>
		<package name="com.example.mybatis.enity" />
	</typeAliases>

4.environments

        environments設定開發環境,可以配置多個環境,由單個environment配置環境,在environment中必須有transactionManager和dataSource標籤才算完整,environment的id為設定環境的唯一id標籤,由environments中的default設定使用哪一種環境,transactionManager中type有兩種:JDBC,代表使用jdbc的方式進行事物的提交和回滾;MANAGED代表使用j2ee的方式進行提交和回滾,dataSource為資料來源,type為資料來源型別:UNPOOLED|POOLED|JNDI,UNPOOLED

    UNPOOLED:該資料來源的實現只是在每次請求時開啟和關閉連線。雖然速度有點慢,但對於不需要立即可用連線效能的簡單應用程式來說,這是一個不錯的選擇。在這個效能區域中,不同的資料庫也有所不同,因此對於某些資料庫來說,池和這個配置可能不太重要。

    POOLED: 資料來源池JDBC連線物件的實現,以避免建立新連線例項所需的初始連線和身份驗證時間。這是併發web應用程式實現最快響應的流行方法。

    JNDI:該資料來源的實現是為了與容器(如EJB或應用程式伺服器)一起使用,這些容器可以集中配置資料來源或外部,並在JNDI上下文中引用它。這個資料來源配置只需要兩個屬性:

5.databaseIdProvider

        dataBaseIdProvider是為全域性設定多個數據源,可以設定多個數據庫,如mysql,oracle,sql server等資料庫,type="DB_VENDOR"就是得到資料庫廠商表示來執行不同的sql。

<!-- 多資料庫支援 -->
	<databaseIdProvider type="DB_VENDOR">
		<property name="MySQL" value="mysql"></property>
		<property name="Oracle" value="oracle"></property>
		<property name="SQL Server" value="sql server"></property>
	</databaseIdProvider>

使用方法在sql對映檔案mapper中設定,在查詢標籤中設是databaseId="oracle",設定資料庫執行的sql語句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mybatis.dao.UserMapper">

	<select id="findUserById" parameterType="int"
		resultType="com.example.mybatis.entity.User" databaseId="oracle">
		select id, username, sex from
		t_user where id = #{id}
	</select>
	
	<select id="findUserById" parameterType="int"
		resultType="com.example.mybatis.entity.User" databaseId="mysql">
		select id, username, sex from
		t_user where id = #{id}
	</select>
</mapper>

6.mappers

mappers為將sql對映註冊帶全域性檔案當中

<!-- sql對映檔案註冊 -->
	<mappers>
		<mapper resource="com/example/mybatis/dao/UserMapper.xml"></mapper>
		<mapper class="com.example.mybatis.dao.UserMapperAnnotaion"></mapper>
	</mappers>

設定方式有三種:

    resource :引入java包中的sql對映檔案mapper.xml;

    class:直接引用介面,指向介面,在介面中使用註解的方式操作

 public interface UserMapperAnnotaion {
	@Select("select id, username, sex from t_user where id = #{id}")
	public User findUserById();
}

    url:映入網路路徑和磁碟路徑下的的xml檔案;

博主初學MyBatis,就什麼錯誤的地方還請指出,望諒解。