Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析
前面有寫到Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(二)——MyBatis原始Dao開發(fā)和mapper代理開發(fā)
MyBatis的全局配置文件SqlMapConfig.xml,配置內(nèi)容和順序如下:
properties(屬性)
setting(全局配置參數(shù))
typeAliases(類名別名)
typeHandlers(類名處理器)
objectFactory(對(duì)象工廠)
plugins(插件)
environments(環(huán)境集合屬性對(duì)象)
environment(環(huán)境子屬性對(duì)象)
transationManager(事務(wù)管理)
dataSource(數(shù)據(jù)源)
mappers(映射器)
1.properties(屬性)
需求:
將數(shù)據(jù)庫連接參數(shù)單獨(dú)配置在db.properties中,只需要在SqlMapConfig.xml中加載db.properties的屬性值。在SqlMapConfig.xml中就不需要對(duì)數(shù)據(jù)庫連接參數(shù)硬編碼。
將數(shù)據(jù)庫連接參數(shù)只配置在db.properties中,原因:方便對(duì)參數(shù)進(jìn)行統(tǒng)一管理,其它xml可以引用該db.properties。
在classpath下定義db.properties文件:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc\:mysql\://localhost\:3306/mybatisdemo jdbc.username=root jdbc.password=
在SqlMapConfig.xml加載屬性文件:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 加載數(shù)據(jù)庫文件db.properties --> <properties resource="db.properties"> <!-- properties中陪可以配置一些屬性名和屬性值,此處的優(yōu)先加載 --> <!-- <property name="driver" value=""/> --> </properties> <!-- 和Spring整合后,environments配置將廢除 --> <environments default="development"> <environment id="development"> <!-- 使用JDBC事務(wù)管理,事務(wù)控制由mybatis管理 --> <transactionManager type="JDBC"/> <!-- 數(shù)據(jù)庫連接池,由mybatis管理 --> <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> </configuration>
properties特性:
注意:MyBatis將按照下面的順序來加載屬性:
(1)在properties元素體內(nèi)定義的屬性首先被讀取。
(2)然后會(huì)讀取properties元素中resourse或url加載的屬性,它會(huì)覆蓋已讀取的同名屬性。
(3)最后讀取parameterType傳遞的屬性,它會(huì)覆蓋已讀取的同名屬性。
所以這里可能就會(huì)存在一個(gè)問題:假如UserMapper.xml中的有一個(gè)statement的入?yún)⒚麨閚ame,
而db.properties中也有一個(gè)參數(shù)名叫name。
那最終UserMapper.xml中的select會(huì)讀取到name=root,而不是用戶傳入的值。
建議:
不要在properties元素體內(nèi)添加任何屬性值,只將屬性值定義在properties文件中。
在properties文件中定義屬性名要有一定的特殊性,如:xxx.xxx.xxx,jdbc.url,jbdc.username。
2.settings(全局參數(shù)配置)
MyBatis框架在運(yùn)行時(shí)可以調(diào)整一些運(yùn)行參數(shù)。
比如:開啟二級(jí)緩存、開啟延遲加載......
全局參數(shù)將會(huì)影響MyBatis的運(yùn)行行為。
3.typeAliases(別名)重點(diǎn)
3.1需求
在mapper.xml中,定義很多的statement,而statement需要parameterType指定輸入?yún)?shù)的類型,需要resultType指定輸出結(jié)果的映射類型。
如果在指定類型時(shí)輸入類型全路徑,不方便進(jìn)行開發(fā)。可以針對(duì)parameterType或resultType指定的類型定義一些別名,在mapper.xml中通過別名定義,方便開發(fā)。
3.2mybatis默認(rèn)支持別名
3.3自定義別名
3.3.1單個(gè)別名定義
<!-- 單個(gè)別名定義: --> <typeAliases> <typeAlias type="joanna.yan.mybatis.entity.User" alias="user"/> </typeAliases>
引用別名:
<select id="findUserById" parameterType="int" resultType="user"> select * from user where id=#{id} </select>
3.3.2批量定義別名(常用)
<!-- 批量別名的定義: package:指定包名,mybatis會(huì)自動(dòng)掃描包中的pojo類,自定義別名,別名就是類名(首字母大寫或小寫都可以) --> <typeAliases> <package name="joanna.yan.mybatis.entity"/> <!-- <package name="其它包名"/> --> </typeAliases>
4.typeHandlers(類型處理器)
MyBatis中通過typeHandlers完成jbdc類型和java類型的轉(zhuǎn)換。通常情況下,MyBatis提供的類型處理器滿足日常需要,不需要自定義。
5.mappers(映射配置)
5.1通過resource加載單個(gè)文件
<!-- 加載映射文件 --> <mappers> <!-- 通過resource方法一次加載一個(gè)映射文件 --> <mapper resource="mapper/UserMapper.xml"/> </mappers>
5.2通過mapper接口加載單個(gè)mapper
<!-- 加載映射文件 --> <mappers> <!-- 通過mapper接口加載單個(gè)映射配置文件 遵循一定的規(guī)范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個(gè)目錄中; 以上規(guī)范的前提是:使用的是mapper代理方法; --> <mapper class="joanna.yan.mybatis.mapper.UserMapper"/> </mappers>
按照上邊的規(guī)范,將mapper.java和mapper.xml放在一個(gè)目錄,且同名。
5.3批量加載mapper(推薦使用)
<mappers> <!-- 批量加載映射配置文件,mybatis自動(dòng)掃描包下的mapper接口進(jìn)行加載; 遵循一定的規(guī)范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個(gè)目錄中; 以上規(guī)范的前提是:使用的是mapper代理方法; --> <package name="joanna.yan.mybatis.mapper"/> </mappers>
以上所述是小編給大家介紹的Spring+SpringMVC+MyBatis深入學(xué)習(xí)及搭建(三)之MyBatis全局配置文件解析,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
springBoot項(xiàng)目打包idea的多種方法
這篇文章主要介紹了springBoot項(xiàng)目打包idea的多種方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java利用Dijkstra算法求解拓?fù)潢P(guān)系最短路徑
迪杰斯特拉算法(Dijkstra)是由荷蘭計(jì)算機(jī)科學(xué)迪家迪杰斯特拉于1959年提出的,因此又叫狄克斯特拉算法。本文將利用迪克斯特拉(Dijkstra)算法求拓?fù)潢P(guān)系最短路徑,感興趣的可以了解一下2022-07-07手寫java性能測(cè)試框架的實(shí)現(xiàn)示例
這篇文章主要為大家介紹了java實(shí)現(xiàn)性能測(cè)試框架示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Springboot yml如何獲取系統(tǒng)環(huán)境變量的值
這篇文章主要介紹了Springboot yml如何獲取系統(tǒng)環(huán)境變量的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02實(shí)例講解Java的Spring框架中的控制反轉(zhuǎn)和依賴注入
這篇文章主要介紹了Java的Spring框架中的控制反轉(zhuǎn)和依賴注入,Spring是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2016-02-02java中構(gòu)造器內(nèi)部調(diào)用構(gòu)造器實(shí)例詳解
在本篇文章里小編給大家分享的是關(guān)于java中構(gòu)造器內(nèi)部調(diào)用構(gòu)造器實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-05-05spring @schedule注解如何動(dòng)態(tài)配置時(shí)間間隔
這篇文章主要介紹了spring @schedule注解如何動(dòng)態(tài)配置時(shí)間間隔,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11