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 將按照下面的順序來載入屬性:
- 在 properties 元素體內定義的屬性首先被讀取。
- 然後會讀取properties 元素中resource或 url 載入的屬性,它會覆蓋已讀取的同名屬性。
- 最後讀取parameterType傳遞的屬性,它會覆蓋已讀取的同名屬性。
因此,通過parameterType傳遞的屬性具有最高優先順序,resource或 url 載入的屬性次之,最低優先順序的是 properties 元素體內定義的屬性。
建議:
- 不要在properties元素體內新增任何屬性值,只將屬性值定義在properties檔案中。
- 在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配置的幾種方法:
<mapper resource=" " />
<mapper url=" " />
<mapper class=" " />
<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介面類路徑
注意:
- 此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。
- 此種方法的前提是使用了mapper代理的開發方式
eg:
<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
4.<package name=""/>
:註冊指定包下的所有mapper介面
注意:
- 此種方法要求mapper介面名稱和mapper對映檔名稱相同,且放在同一個目錄中。
- 此種方法的前提是使用了mapper代理的開發方式。
- 此種方法會自動掃描包下邊所有的mapper介面進行載入。
eg:
<package name="cn.itcast.mybatis.mapper"/>