第三十八章:MyBatis框架之mybatis的核心配置06

mybatis的核心配置之properties
創建jdbc.properties
一般在實際的項目中。數據庫的連接信息。會存放在一個jdbc.properties的屬性配置文件中

username=root
password=root
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis

在mybatis-config.xml中修改引入properties資源

<!-- properties 配置一些屬性。使用的時候,用${name} 進行輸出
		resource指定屬性的位置 
 -->
<properties resource="jdbc.properties">
	<!-- 也可以在properties配置中定義一些屬性。當然並不推薦 -->
	<property name="username" value="root"/>
	<property name="password" value="root"/>
</properties>

特別說明:引入的jdbc.properties屬性文件中的信息,會覆蓋掉原來使用property標籤定義的屬性值。

修改原來數據庫連接的信息。

<environments default="development">
	<environment id="development">
		<transactionManager type="JDBC" />
		<dataSource type="POOLED">
			<!-- 配置數據庫連接信息 -->
			<property name="driver" value="${driverClass}" />
			<property name="url" value="${url}" />
			<property name="username" value="${username}" />
			<property name="password" value="${password}" />
		</dataSource>
	</environment>
</environments>

mybatis的核心配置之settings
這是 MyBatis 中極爲重要的調整設置,它們會改變 MyBatis 的運行時行爲。常用的設置參數
cacheEnabled 該配置影響的所有映射器中配置的緩存的全局開關。 true | false 默認值true
lazyLoadingEnabled 延遲加載的全局開關。當開啓時,所有關聯對象都會延遲加載。 特定關聯關係中可通過設置fetchType屬性來覆蓋該項的開關狀態。 true | false 默認值false
lazyLoadTriggerMethods 指定哪個對象的方法觸發一次延遲加載。

mybatis的核心配置之typeAliases
類型別名是爲 Java 類型設置一個短的名字。它只和 XML 配置有關,存在的意義僅在於用來減少類完全限定名的冗餘。

<!-- typeAliases 可以配置別名 -->
	<typeAliases>		
		<!-- 
			typeAlias 配置一個別名
				type 是具體的全類名
				alias 是別名
		<typeAlias type="com.atguigu.pojo.User" alias="user"/> -->
		<!-- 通過配置包名,讓程序自動掃描所有包下的類,自動加別名
					自動加的別名是。類名首字母小寫
					User	user
		 -->
		<package name="com.atguigu.pojo"/>
		<package name="com.atguigu.entity"/>
	</typeAliases>

mybatis的核心配置之typeHandlers:這個我不經常用

JDK8,新特性,時間的處理。類型處理器。
	<typeHandlers>
		<typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.YearTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" />
		<typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" />
	</typeHandlers>

mybatis的核心配置之environmentstransactionManager

<!-- 
	environments標籤用來定義多個數據庫環境
	 -->
  <environments default="development">
  	<!-- environment用來定義一個數據庫環境 -->
    <environment id="development">
     <!-- 
     	transactionManager配置事務管理器
     		事務管理器類型有兩種:
     		JDBC – 這個配置就是直接使用了 JDBC 的提交和回滾設置,它依賴於從數據源得到的連接來管理事務範圍。
			MANAGED – 這個配置幾乎沒做什麼。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命週期(比如 JEE 應用服務器的上下文)。
      -->
      <transactionManager type="JDBC"/>
      <!-- 修改數據庫的四個連接屬性  -->
      <dataSource type="POOLED">
        <property name="driver" value="${driverClass}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>

environments
一般情況下。在工作的時候。會定義多個環境信息。<environment>
那麼定義多個環境有什麼用?
比如說:我可以定義一個環境是dev開發環境。可以在自己寫代碼的時候測試用。連接的是自己的數據庫。
又定義一個環境run是實際布暑的數據庫連接環境。
那麼當我們要發佈項目的時候。只需要把default值改爲run就好

transactionManager
JDBC (JdbcTransactionFactory) – 這個配置就是直接使用了 JDBC 的提交和回滾設置,它依賴於從數據源得到的連接來管理事務範圍。
<transactionManager type=“JDBC” />
MANAGED (ManagedTransactionFactory)– 這個配置幾乎沒做什麼。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命週期(比如 JEE 應用服務器的上下文)。 默認情況下它會關閉連接,然而一些容器並不希望這樣,因此需要將 closeConnection 屬性設置爲 false 來阻止它默認的關閉行爲。例如:

<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>

自定義:實現TransactionFactory接口,然後在type=全類名
注意:如果你正在使用 Spring + MyBatis,則沒有必要配置事務管理器, 因爲 Spring 模塊會使用自帶的管理器來覆蓋前面的配置。一般情況下,我們都會整合Spring + MyBatis 一起使用。使用的都是Spring的事務管理。

dataSource 標籤說明
<dataSource type=“POOLED”>

這個標籤是配置是否啓動數據庫連接池配置。
type 屬性的值有三種: UNPOOLED 、 POOLED 、 JNDI
UNPOOLED – 這個數據源的實現只是每次被請求時打開和關閉連接。雖然一點慢,它對在及時可用連接方面沒有性能要求的簡單應用程序是一個很好的選擇。 不同的數據庫在這方面表現也是不一樣的,所以對某些數據庫來說使用連接池並不重要,這個配置也是理想的。
POOLED – 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。 這是一種使得併發 Web 應用快速響應請求的流行處理方式。
JNDI – (Java Naming and Directory Interface) 這個數據源的實現是爲了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然後放置一個 JNDI 上下文的引用。
自定義 - 實現DataSourceFactory接口,定義自己的數據源實現。
注意:一般情況下,我們都全整合Spring + MyBatis 一起使用。所以數據源整合之後都是使用Spring的數據源。

mybatis的核心配置之databaseIdProvider
MyBatis 可以根據不同的數據庫廠商執行不同的語句,這種多廠商的支持是基於映射語句中的 databaseId 屬性。 MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數據庫 databaseId 屬性的所有語句。

<databaseIdProvider type="DB_VENDOR">
	<property name="SQL Server" value="sqlserver" />
	<property name="MySQL" value="mysql" />
	<property name="DB2" value="db2" />
	<property name="Oracle" value="oracle" />
</databaseIdProvider>

mybatis提供了一個類VendorDatabaseIdProvider,中的getDatabaseId() 方法用於獲取數據庫的標識。
property 標籤name屬性是獲取數據庫ID標識。
property 標籤value屬性是我們給mybatis定義的一個簡短的標識。

databaseId測試
這樣子,我們就可以在mapper的配置文件中,在定義sql語句的時候,添加標識。

<select id="selectUserById" parameterType="int"
	resultType="User" databaseId="mysql">
	select id , last_name from t_user where id = #{value}
</select>

這樣子,當mybaits讀取mapper中的sql語句的時候,只會讀取和數據庫標識對應得上的sql語句。
如果把 databaseId屬性改爲oracle。而當前的數據庫是mysql的話。

<select id="selectUserById" parameterType="int"
		resultType="User" databaseId="oracle">

那麼 執行selectUserById 語句的時候就會報錯。

mybatis的核心配置之Mapper
把mapper配置文件注入到mybatis-config.xml核心配置文件中有三種常用方式。
1、在classpath路徑下引入
2、使用mapper接口的形式導入配置
3、使用包掃描的方式引入配置文件

	<!-- 從classpath路徑下導入指定的配置文件 -->
	<mappers>
		<mapper resource="org/mybatis/builder/AuthorMapper.xml" />
		<mapper resource="org/mybatis/builder/BlogMapper.xml" />
		<mapper resource="org/mybatis/builder/PostMapper.xml" />
	</mappers>
	<!-- 使用mapper接口類導入配置文件 -->
	<mappers>
		<mapper class="org.mybatis.builder.AuthorMapper" />
		<mapper class="org.mybatis.builder.BlogMapper" />
		<mapper class="org.mybatis.builder.PostMapper" />
	</mappers>
	<!-- 掃描包下所有的配置文件
1、接口名和Mapper配置文件名必須相同
2、接口文件和Mapper配置文件必須在同一個包下
 	-->
	<mappers>
		<package name="org.mybatis.builder" />
	</mappers>

在這裏插入圖片描述

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