MyBatis全局配置文件詳解
MyBatis全局配置文件
MyBatis 的配置文件包含了影響 MyBatis 行為甚深的設(shè)置(settings)和屬性(properties)信息。文檔的
頂層結(jié)構(gòu)如下:
configuration配置properties屬性settings設(shè)置typeAliases類型命名typeHandlers類型處理器objectFactory對(duì)象工廠plugins插件environments環(huán)境environment環(huán)境變量transactionManager事務(wù)管理器dataSource數(shù)據(jù)源databaseIdProvider 數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)mappers映射器
properties 屬性
mybatis 可以使用properties來(lái)引入外部properties配置文件的內(nèi)容
resource:引入類路徑下的資源
url:引入網(wǎng)絡(luò)路徑或者磁盤(pán)路徑下的資源
<properties resource="dbconfig.properties"></properties>
如果屬性在不只一個(gè)地方進(jìn)行了配置,那么 MyBatis 將按照下面的順序來(lái)加載:
- 在 properties 元素體內(nèi)指定的屬性首先被讀取。
- 然后根據(jù) properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據(jù) url 屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性。 – 最后讀取作為方法參數(shù)傳遞的屬性,并覆蓋已讀取的同名屬性。
settings 設(shè)置
這是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會(huì)改變MyBatis 的運(yùn)行時(shí)行為。
setting包含很多重要的設(shè)置項(xiàng)
setting:用來(lái)設(shè)置每一個(gè)設(shè)置項(xiàng)
name:設(shè)置項(xiàng)名
value:設(shè)置項(xiàng)的取值
mapUnderscoreToCamelCase:駝峰命名 last_name -> lastName
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

typeAliases 類型命名
typeAliases:可以批量設(shè)置別名這個(gè)包下的每一個(gè)類
別名不區(qū)分大小寫(xiě)
創(chuàng)建一個(gè)默認(rèn)的別名,就是簡(jiǎn)單類名小寫(xiě)
typeAlias:為某個(gè)java類型起別名
type:指定要起別名的類型全類名;默認(rèn)別名就是類名小寫(xiě):employee
alias:指定新的別名

package:為某個(gè)包下的所有類批量起別名
name:指定包名(為當(dāng)前包下以及下面所有的后代包的每一個(gè)類都起一個(gè)默認(rèn)的別名(類名小寫(xiě)))

存在的問(wèn)題:
假設(shè)bean包下有一個(gè)類Employee,同時(shí)在bean包下有一個(gè)子包也有一個(gè)類叫Employee,此時(shí)這兩個(gè)包的類名就會(huì)沖突,因此還可以使用注解的放上為類創(chuàng)建別名
@Alias("")
public class Employee{}

值得注意的是,MyBatis已經(jīng)為許多常見(jiàn)的 Java 類型內(nèi)建了相應(yīng)的類型別名。它們都是大小寫(xiě)不敏感的,我們?cè)谄饎e名的時(shí)候千萬(wàn)不要占用已有的別名。

environments 環(huán)境
mybatis可以配置多種環(huán)境 default指定使用某種環(huán)境,可以達(dá)到快速切換
environments:配置一個(gè)具體的環(huán)境信息;必須有兩個(gè)標(biāo)簽,id代表當(dāng)前環(huán)境的唯一標(biāo)識(shí)
transactionManager 事務(wù)管理器
type:事務(wù)管理器的類型 [JDBC(使用了 JDBC 的提交和回滾設(shè)置,依賴于從數(shù)據(jù)源得到的連接來(lái)管理事務(wù)范圍。)|MANAGED(不提交或回滾一個(gè)連接、讓容器來(lái)管理事務(wù)的整個(gè)生命周期(比如 JEE應(yīng)用服務(wù)器的上下文))]
JDBC:JdbcTransactionFactory
自定義事務(wù)管理器 實(shí)現(xiàn)TransactionFactory接口即可
dataSource 數(shù)據(jù)源
type:數(shù)據(jù)源的類型 [UNPOOLED(不使用連接池)|POOLED(使用連接池)|JNDI(在EJB 或應(yīng)用服務(wù)器這類容器中查找指定的數(shù)據(jù)源)]
自定義數(shù)據(jù)源 實(shí)現(xiàn)DataSourceFactory接口
實(shí)際開(kāi)發(fā)中我們使用Spring管理數(shù)據(jù)源,并進(jìn)行事務(wù)控制的配置來(lái)覆蓋上述配置

databaseIdProvider 數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)
databaseIdProvider: 可以根據(jù)不同的數(shù)據(jù)庫(kù)廠商執(zhí)行不同的語(yǔ)句。
type:數(shù)據(jù)庫(kù)類型 DB_VENDOR
作用就是得到數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)(驅(qū)動(dòng)自帶的),mybatis就能根據(jù)數(shù)據(jù)庫(kù)廠商標(biāo)識(shí)來(lái)執(zhí)行不同的sql
MYSQL Oracle SQL Server
value:為標(biāo)識(shí)起一個(gè)別名,方便SQL語(yǔ)句使用databaseId屬性引用


DB_VENDOR
會(huì)通過(guò) DatabaseMetaData#getDatabaseProductName() 返回的字符串進(jìn)行設(shè)置。由于通常情況下這個(gè)字符串都非常長(zhǎng)而且相同產(chǎn)品的不同版本會(huì)返回不同的值,所以最好通過(guò)設(shè)置屬性別名來(lái)使其
變短
MyBatis匹配規(guī)則如下:
- 如果沒(méi)有配置databaseIdProvider標(biāo)簽,那么databaseId=null
- 如果配置了databaseIdProvider標(biāo)簽,使用標(biāo)簽配置的name去匹配數(shù)據(jù)庫(kù)信息,匹配上設(shè)置databaseId=配置指定的值,否則依舊為null
- 如果databaseId不為null,他只會(huì)找到配置databaseId的sql語(yǔ)句
- MyBatis 會(huì)加載不帶 databaseId 屬性和帶有匹配當(dāng)前數(shù)據(jù)庫(kù)databaseId 屬性的所有語(yǔ)句。如果同時(shí)找到帶有 databaseId 和不帶databaseId 的相同語(yǔ)句,則后者會(huì)被舍棄。
mappers 映射器
mapper:注冊(cè)一個(gè)sql映射
注冊(cè)配置文件
resource:引用類路徑下的sql映射文件
url:用網(wǎng)路路徑下的或者磁盤(pán)路徑下的sql映射文件
注冊(cè)接口
class:引應(yīng)用接口
- 接口映射文件,映射文件名必須和接口同名,并且放在同一個(gè)目錄下
- 沒(méi)有sql映射文件,所有的sql利用注解寫(xiě)在接口上
注解寫(xiě)在接口上
推薦:比較重要和復(fù)雜額Dao接口寫(xiě)sql映射文件,不重要的簡(jiǎn)單的為了開(kāi)發(fā)快速可以使用注解

package:批量注冊(cè)

sql映射文件
namespace:名稱空間;指定為接口的全類名
id:唯一標(biāo)識(shí)
resultType:返回值類型
#{id}:從傳遞過(guò)來(lái)的參數(shù)中取出id值
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="school.xauat.mybatis.dao.EmployeeMapper">
<select id="getEmpById" resultType="employee" >
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="employee" databaseId="mysql">
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="employee" databaseId="oracle">
select * from tbl_employee where id = #{id}
</select>
</mapper>
總結(jié)
1、接口是編程
原生: Dao -----> DaoImpl
Mybatis: Mapper -----> xxMapper.xml
2、SqlSession代表和數(shù)據(jù)庫(kù)的一次會(huì)話,用完必須關(guān)閉
3、SqlSession和connection一樣,都是非線程安全的。每次使用都應(yīng)該獲取新的對(duì)象
4、mapper接口沒(méi)有實(shí)現(xiàn)類,但是Mybatis會(huì)為這個(gè)接口生成一個(gè)代理對(duì)象(將接口和xml進(jìn)行綁定)
EmployeeMapper empMapper = SqlSession.getMapper(Employee.class);
5、兩個(gè)重要的配置文件
mybatis的全局配置文件;包含數(shù)據(jù)庫(kù)連接池信息,事務(wù)管理器信息,系統(tǒng)運(yùn)行信息
sql映射文件:保存了每一個(gè)SQL語(yǔ)句的映射信息
將sql抽取出來(lái)
相關(guān)文章
帶大家認(rèn)識(shí)Java語(yǔ)法之泛型與通配符
使用泛型的目的是利用Java編譯機(jī)制,在編譯過(guò)程中幫我們檢測(cè)代碼中不規(guī)范的有可能導(dǎo)致程序錯(cuò)誤的代碼,下面這篇文章主要給大家介紹了關(guān)于Java泛型與通配符的相關(guān)資料,需要的朋友可以參考下2022-03-03
SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟
本文主要介紹了SpringBoot項(xiàng)目部署到騰訊云的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
springboot項(xiàng)目開(kāi)啟https協(xié)議的項(xiàng)目實(shí)現(xiàn)
本文主要介紹了springboot項(xiàng)目開(kāi)啟https協(xié)議的項(xiàng)目實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringBoot?Schedule調(diào)度任務(wù)的動(dòng)態(tài)管理
Scheduled定時(shí)任務(wù)是Spring?boot自身提供的功能,所以不需要引入Maven依賴包,下面這篇文章主要給大家介紹了關(guān)于SpringBoot通過(guò)@Scheduled實(shí)現(xiàn)定時(shí)任務(wù)以及問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下2023-02-02
Java?HashMap詳解及實(shí)現(xiàn)原理
Java?HashMap是Java集合框架中最常用的實(shí)現(xiàn)Map接口的數(shù)據(jù)結(jié)構(gòu),它使用哈希表實(shí)現(xiàn),允許null作為鍵和值,可以存儲(chǔ)不同類型的鍵值對(duì),在Java中,HashMap被廣泛應(yīng)用于各種場(chǎng)景,如緩存、數(shù)據(jù)庫(kù)連接池、路由器等,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-05-05
Java中final關(guān)鍵字的使用與注意總結(jié)
這篇文章主要給大家介紹了關(guān)于Java中final關(guān)鍵字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
maven項(xiàng)目下solr和spring的整合配置詳解
這篇文章主要介紹了maven項(xiàng)目下solr和spring的整合配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
淺談Java后臺(tái)對(duì)JSON格式的處理操作
下面小編就為大家?guī)?lái)一篇淺談Java后臺(tái)對(duì)JSON格式的處理操作。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
在springboot項(xiàng)目中同時(shí)接收文件和多個(gè)參數(shù)的方法總結(jié)
在開(kāi)發(fā)接口中,遇到了需要同時(shí)接收文件和多個(gè)參數(shù)的情況,可以有多種方式實(shí)現(xiàn)文件和參數(shù)的同時(shí)接收,文中給大家介紹了兩種實(shí)現(xiàn)方法,感興趣的同學(xué)跟著小編一起來(lái)看看吧2023-08-08

