天天看點

Mybatis配置檔案Mybatis配置檔案

Mybatis配置檔案

核心配置檔案sqlMapConfig.xml

核心配置配置檔案的層級關系如下:

Mybatis配置檔案Mybatis配置檔案

Mybatis常用配置解析

environments标簽

資料庫環境的配置,支援多環境配置

Mybatis配置檔案Mybatis配置檔案

注意

事務管理器(transactionManager)類型有兩種:

  • JDBC:這個配置就是直接使用了JDBC 的送出和復原設定,它依賴于從資料源得到的連接配接來管理事務作用域。
  • MANAGED:這個配置幾乎沒做什麼。它從來不送出或復原一個連接配接,而是讓容器來管理事務的整個生命周期(比如 JEE 應用伺服器的上下文)。 預設情況下它會關閉連接配接,然而一些容器并不希望這樣,是以需要将 closeConnection 屬性設定為 false 來阻止它預設的關閉行為。

    資料源(dataSource)類型有三種:

  • UNPOOLED:這個資料源的實作隻是每次被請求時打開和關閉連接配接。
  • POOLED:這種資料源的實作利用“池”的概念将 JDBC 連接配接對象組織起來。
  • JNDI:這個資料源的實作是為了能在如 EJB 或應用伺服器這類容器中使用,容器可以集中或在外部配置資料源,然後放置一個 JNDI 上下文的引用。

mapper标簽

該标簽的作用是加載映射的,加載方式有如下幾種:

•使用相對于類路徑的資源引用,例如:

•使用完全限定資源定位符(URL),例如:

•使用映射器接口實作類的完全限定類名,例如:

•将包内的映射器接口實作全部注冊為映射器,例如:

properties标簽

實際開發中,習慣将資料源的配置資訊單獨抽取成一個properties檔案,該标簽可以加載額外配置的properties檔案

Mybatis配置檔案Mybatis配置檔案

typeAliases标簽

類型别名是為Java 類型設定一個短的名字。原來的類型名稱配置如下

Mybatis配置檔案Mybatis配置檔案

配置typeAliases,為com.lagou.domain.User定義别名為user

Mybatis配置檔案Mybatis配置檔案

上面我們是自定義的别名,mybatis架構已經為我們設定好的一些常用的類型的别名

Mybatis配置檔案Mybatis配置檔案

注意

自定義别名不區分大小寫。

映射配置檔案mapper.xml

動态SQL語句概述

Mybatis 的映射檔案中,前面我們的 SQL 都是比較簡單的,有些時候業務邏輯複雜時,我們的 SQL是動态變化的,此時在前面的學習中我們的 SQL 就不能滿足要求了。我們根據實體類的不同取值,使用不同的 SQL語句來進行查詢。比如在 id如果不為空時可以根據id查詢,如果username 不同空時還要加入使用者名作為條件。這種情況在我們的多條件組合查詢中經常會碰到。

當查詢條件id和username都存在時,控制台列印的sql語句如下:

<select id="findByCondition" parameterType="user" resultType="user">
	select * from User
		<where>
			<if test="id!=0">
				and id=#{id}
			</if>
			<if test="username!=null">
				and username=#{username}
			</if>
		</where>
</select>
           

循環執行sql的拼接操作,例如:SELECT * FROM USER WHERE id IN (1,2,5)。

<select id="findByIds" parameterType="list" resultType="user">
	select * from User
		<where>
			<foreach collection="list" open="id in(" close=")" item="id" separator=",">
				#{id}
			</foreach>
		</where>
</select>
           

foreach标簽的屬性含義如下:

标簽用于周遊集合,它的屬性:

  • collection:代表要周遊的集合元素,注意編寫時不要寫#{}
  • open:代表語句的開始部分
  • close:代表結束部分
  • item:代表周遊集合的每個元素,生成的變量名
  • sperator:代表分隔符

Sql 中可将重複的 sql 提取出來,使用時用 include 引用即可,最終達到 sql 重用的目的

<!--抽取sql片段簡化編寫-->
<sql id="selectUser" select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
	<include refid="selectUser"></include> where id=#{id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
	<include refid="selectUser"></include>
	<where>
		<foreach collection="array" open="id in(" close=")" item="id" separator=",">
			#{id}
		</foreach>
	</where>
</select>
           

繼續閱讀