1. 程式人生 > >Mybatis的配置檔案詳解

Mybatis的配置檔案詳解

##1、properties
(1)、可以使用標籤來引入外部properties配置檔案的內容,一般用於引入資料來源:
a)、resource:引入類路徑下的資源
b)、url:引入網路路徑或者磁碟路徑下的資源

	<properties resource="dbconfig.properties"></properties>

##2、settings
(1)、settings中包含很多重要的設定項,用標籤來設定每一個設定項:
name:設定項名, value:設定項取值

	<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"/>
		<!-- 配置預設的執行器。SIMPLE 就是普通的執行器;REUSE 執行器會重用預處理語句(prepared statements); 
			BATCH 執行器將重用語句並執行批量更新。 -- >
		<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"/>
		<!-- 當沒有為引數提供特定的 JDBC 型別時,為空值指定 JDBC 型別。 某些驅動需要指定列的 JDBC 型別,
			多數情況直接用一般型別即可,比如 NULL、VARCHAR 或 OTHER。 -->
		<setting name="jdbcTypeForNull" value="OTHER"/>
		<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
		<!-- 開啟駝峰命名規則 -- >
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>

##3、typeAliases

(1)、typeAliases(別名處理器):可以在<typeAliases>標籤中,用<typeAlias>標籤為我們的java型別起別名,別名不區分大小寫;
(2)、typeAlias:為某個java型別起別名:
		a)、type:指定要起別名的型別全類名,預設別名就是類名小寫;employee
		b)、alias:指定新的別名
	
	<typeAliases>
	  <typeAlias alias="Author" type="domain.blog.Author"/>
	  <typeAlias alias="Blog" type="domain.blog.Blog"/>
	  <typeAlias alias="Comment" type="domain.blog.Comment"/>
	  <typeAlias alias="Post" type="domain.blog.Post"/>
	  <typeAlias alias="Section" type="domain.blog.Section"/>
	  <typeAlias alias="Tag" type="domain.blog.Tag"/>
	</typeAliases>
	
當這樣配置時,任何使用domain.blog.Blog的地方都可以用Blog代替。
		
(3)、package:為某個包下的所有類批量起別名:
		name:指定包名(為當前包以及下面所有的後代包的每一個類都起一個預設別名,類名小寫)
		
		<package name="com.scorpios.mybatis.bean"/>
		
(4)、批量起別名的情況下,使用@Alias註解為某個型別指定新的別名 -->
	每一個在包com.scorpios.mybatis.bean中的Java Bean,在沒有註解的情況下,會使用Bean的首字母小寫的非限定類名來作為它的別名。比如 com.scorpios.mybatis.bean.Author的別名為 author;若有註解,則別名為其註解值。看下面的例子:
	@Alias("author")
	public class Author {}

##4、environments

(1)、environments:mybatis可以配置多種環境 ,default指定使用某種環境。可以達到快速切換環境。
(2)、environment:配置一個具體的環境資訊,必須有兩個標籤,
	a)、id代表當前環境的唯一標識;
	b)、transactionManager:事務管理器;
	c)、type:事務管理器的型別;
		JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)
	d)、定義事務管理器:實現TransactionFactory介面.type指定為全類名
				
		dataSource:資料來源;
		type:資料來源型別;UNPOOLED(UnpooledDataSourceFactory)
						|POOLED(PooledDataSourceFactory)
						|JNDI(JndiDataSourceFactory)
		自定義資料來源:實現DataSourceFactory介面,type是全類名

	<environments default="dev_mysql">
		<!--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>
		
		<!--oracle環境-->
		<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>

##5、databaseIdProvider
(1)、databaseIdProvider:支援多資料庫廠商;
(2)、type=“DB_VENDOR”:VendorDatabaseIdProvider作用就是得到資料庫廠商的標識(驅動getDatabaseProductName()),mybatis就能根據資料庫廠商標識來執行不同的sql;
(3)、MySQL,Oracle,SQL Server

	<databaseIdProvider type="DB_VENDOR">
		<!-- 為不同的資料庫廠商起別名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>

##6、mappers
(1)、作用:將sql對映註冊到全域性配置中
(2)、將我們寫好的sql對映檔案(EmployeeMapper.xml)一定要註冊到全域性配置檔案(mybatis-config.xml)中 -->
(3)、mappers:將sql對映註冊到全域性配置中
(4)、mapper:註冊一個sql對映
resource:引用類路徑下的sql對映檔案,mybatis/mapper/EmployeeMapper.xml
url:引用網路路徑或者磁碟路徑下的sql對映檔案,file:///var/mappers/AuthorMapper.xml

		註冊介面
		class:引用(註冊)介面,
			1、有sql對映檔案,對映檔名必須和介面同名,並且放在與介面同一目錄下;
			2、沒有sql對映檔案,所有的sql都是利用註解寫在介面上;
			
	<mappers>
		<mapper resource="mybatis/mapper/EmployeeMapper.xml"/>
		<mapper class="com.scorpios.mybatis.dao.EmployeeMapperAnnotation"/>
		<!-- 批量註冊: -->
		<package name="com.scorpios.mybatis.dao"/>
	</mappers>

##配置完之後的使用
1、根據xml配置檔案(全域性配置檔案)建立一個SqlSessionFactory物件,有資料來源一些執行環境資訊
2、sql對映檔案,配置了每一個sql,以及sql的封裝規則等;
3、將sql對映檔案註冊在全域性配置檔案中;
4、寫程式碼:

	1)、根據全域性配置檔案得到SqlSessionFactory;
	2)、使用sqlSession工廠,獲取到sqlSession物件使用他來執行增刪改查
		一個sqlSession就是代表和資料庫的一次會話,用完關閉
	3)、使用sql的唯一標誌來告訴MyBatis執行哪個sql,sql都是儲存在sql對映檔案中的