Mybatis配置檔案
核心配置檔案sqlMapConfig.xml
核心配置配置檔案的層級關系如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLzkFRONzYU90dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2QjN2IzN1QTM1ETNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Mybatis常用配置解析
environments标簽
資料庫環境的配置,支援多環境配置
注意
事務管理器(transactionManager)類型有兩種:
- JDBC:這個配置就是直接使用了JDBC 的送出和復原設定,它依賴于從資料源得到的連接配接來管理事務作用域。
-
MANAGED:這個配置幾乎沒做什麼。它從來不送出或復原一個連接配接,而是讓容器來管理事務的整個生命周期(比如 JEE 應用伺服器的上下文)。 預設情況下它會關閉連接配接,然而一些容器并不希望這樣,是以需要将 closeConnection 屬性設定為 false 來阻止它預設的關閉行為。
資料源(dataSource)類型有三種:
- UNPOOLED:這個資料源的實作隻是每次被請求時打開和關閉連接配接。
- POOLED:這種資料源的實作利用“池”的概念将 JDBC 連接配接對象組織起來。
- JNDI:這個資料源的實作是為了能在如 EJB 或應用伺服器這類容器中使用,容器可以集中或在外部配置資料源,然後放置一個 JNDI 上下文的引用。
mapper标簽
該标簽的作用是加載映射的,加載方式有如下幾種:
•使用相對于類路徑的資源引用,例如:
•使用完全限定資源定位符(URL),例如:
•使用映射器接口實作類的完全限定類名,例如:
•将包内的映射器接口實作全部注冊為映射器,例如:
properties标簽
實際開發中,習慣将資料源的配置資訊單獨抽取成一個properties檔案,該标簽可以加載額外配置的properties檔案
typeAliases标簽
類型别名是為Java 類型設定一個短的名字。原來的類型名稱配置如下
配置typeAliases,為com.lagou.domain.User定義别名為user
上面我們是自定義的别名,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>