1. 程式人生 > >SqlMapConfig.xml配置檔案---Mybatis學習筆記(七)

SqlMapConfig.xml配置檔案---Mybatis學習筆記(七)

SqlMapConfig.xml檔案的配置內容:

SqlMapConfig.xml中配置的內容和順序如下:

properties(屬性)
settings(全域性配置引數)
typeAliases(類型別名)
typeHandlers(型別處理器)
objectFactory(物件工廠)
plugins(外掛)
environments(環境集合屬性物件)
environment(環境子屬性物件)
transactionManager(事務管理)
dataSource(資料來源)
mappers(對映器)

properties屬性:

需求:
將資料庫連線引數單獨配置在db.properties中,只需要在sqlMapConfig.xml中載入db.properties的屬性值。在SqlMapConfig.xml中就不需要對資料庫連線引數硬編碼。

將資料庫連線引數只配置在db.properties中,原因:方便對引數進行統一管理,其它xml可以引用該db.properties檔案。

在classpath下定義db.properties檔案:

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

SqlMapConfig.xml引用如下:

<properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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> </environments>

注意: MyBatis 將按照下面的順序來載入屬性:

  1. 在 properties 元素體內定義的屬性首先被讀取。
  2. 然後會讀取properties 元素中resource或 url 載入的屬性,它會覆蓋已讀取的同名屬性。
  3. 最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。

因此,通過parameterType傳遞的屬性具有最高優先順序,resource或 url 載入的屬性次之,最低優先順序的是 properties 元素體內定義的屬性。

建議:

  1. 不要在properties元素體內新增任何屬性值,只將屬性值定義在properties檔案中。
  2. 在properties檔案中定義屬性名要有一定的特殊性(eg:xxx.xxx.xxx),防止跟parameterType中的屬性名稱重複。

settings(全域性引數配置):

mybatis框架在執行時可以通過settings引數調整一些執行引數。
eg:開啟二級快取、開啟延遲載入…

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

typeAliases(類型別名):

需求:
在mapper.xml中,定義很多的statement,statement需要parameterType指定輸入引數的型別,需要resultType指定輸出結果的對映型別。如果在指定型別時輸入型別全路徑,不方便進行開發,可以針對parameterType和resultType指定的型別定義一些別名,在mapper.xml中通過別名定義就會十分方便。

mybatis預設支援的別名:
這裡寫圖片描述

eg:UserMapper.xml檔案中的

<select id="findUserById" parameterType="java.lang.Integer" resultType="com.huihui.pojo.User">
    select * from user where id=#{id}
</select>

等同於

<select id="findUserById" parameterType="int" resultType="com.huihui.pojo.User">
    select * from user where id=#{id}
</select>

上邊的int就是java.lang.Integer的別名。

自定義別名:
在sqlMapConfig.xml中的配置:

<typeAliases>
    <!-- 單個別名定義 -->
    <typeAlias alias="user" type="cn.itcast.mybatis.po.User"/>
    <!-- 批量別名定義,掃描整個包下的類,別名為類名(首字母大寫或小寫都可以) -->
    <package name="cn.itcast.mybatis.po"/>
    <package name="其它包"/>
</typeAliases>

上面針對單個別名定義中的:

alias是要定義的別名
type是原始型別的全路徑

上面針對批量別名定義:

name就是存放pojo類的包名。

定義好包名之後,載入的時候會自動掃描該包下的所有類,並把類名當作是別名。並且別名的首字母大小寫都可以。

typeHandlers(型別處理器)

型別處理器用於java型別和jdbc型別對映(也就是完成jdbc型別和java型別的轉換)。
mybatis自帶的型別處理器基本上滿足日常需求,不需要單獨定義。

mybatis支援型別處理器:
這裡寫圖片描述

eg:

<select id="findUserById" parameterType="java.lang.Integer" resultType="user">
        select * from user where id = #{id}
</select>

上面 parameterType="java.lang.Integer" 的型別是java型別的,但是#{id} 卻是jdbc型別的。這裡就是通過mybatis型別處理器自動完成的。

mappers(對映器)

Mapper配置的幾種方法:

  1. <mapper resource=" " />
  2. <mapper url=" " />
  3. <mapper class=" " />
  4. <package name=""/>

1.<mapper resource=" " />:使用相對於類路徑的資源。
eg:

    <mappers>
        <mapper resource="sqlmap/User.xml"/>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

2.<mapper url=" " />:使用完全限定路徑
eg:

<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

3.<mapper class=" " />:使用mapper介面類路徑
注意:

  1. 此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。
  2. 此種方法的前提是使用了mapper代理的開發方式

eg:

<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>

4.<package name=""/>:註冊指定包下的所有mapper介面
注意:

  1. 此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。
  2. 此種方法的前提是使用了mapper代理的開發方式。
  3. 此種方法會自動掃描包下邊所有的mapper介面進行載入。

eg:

<package name="cn.itcast.mybatis.mapper"/>