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

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

package:為某個包下的所有類批量起別名
name:指定包名(為當前包下以及下面所有的后代包的每一個類都起一個默認的別名(類名小寫))

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

值得注意的是,MyBatis已經(jīng)為許多常見的 Java 類型內(nèi)建了相應的類型別名。它們都是大小寫不敏感的,我們在起別名的時候千萬不要占用已有的別名。

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

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


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

package:批量注冊

sql映射文件
namespace:名稱空間;指定為接口的全類名
id:唯一標識
resultType:返回值類型
#{id}:從傳遞過來的參數(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ù)庫的一次會話,用完必須關(guān)閉
3、SqlSession和connection一樣,都是非線程安全的。每次使用都應該獲取新的對象
4、mapper接口沒有實現(xiàn)類,但是Mybatis會為這個接口生成一個代理對象(將接口和xml進行綁定)
EmployeeMapper empMapper = SqlSession.getMapper(Employee.class);
5、兩個重要的配置文件
mybatis的全局配置文件;包含數(shù)據(jù)庫連接池信息,事務管理器信息,系統(tǒng)運行信息
sql映射文件:保存了每一個SQL語句的映射信息
將sql抽取出來
相關(guān)文章
基于獲取JAVA路徑,包括CLASSPATH外的路徑的方法詳解
本篇文章是對獲取JAVA路徑,包括CLASSPATH外的路徑的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
Java Fluent Mybatis實戰(zhàn)之構(gòu)建項目與代碼生成篇下
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強框架 fluent mybatis2021-10-10
IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正(最新推薦)
北京時間2023年7月26日,IntelliJ IDEA 2023.2正式發(fā)布,IntelliJ IDEA 2023.2 引入 AI Assistant(AI助手),通過一組由 AI 提供支持的功能助力開發(fā),今天給大家分享IntelliJ IDEA 2023.2正式發(fā)布新UI和Profiler轉(zhuǎn)正,感興趣的朋友一起看看吧2023-10-10
SpringBoot項目application.yml文件數(shù)據(jù)庫配置密碼加密的方法
這篇文章主要介紹了SpringBoot項目application.yml文件數(shù)據(jù)庫配置密碼加密的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03
最安全的加密算法Bcrypt防止數(shù)據(jù)泄露詳解
這篇文章主要為大家介紹了最安全的加密算法Bcrypt防止數(shù)據(jù)泄露詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09

