文章目錄
- Mybatis 架構學習(三)—— 配置優化
- 1.環境配置
- (1)transactionManger 事務管理器
- (2)dataSource 資料源
- 2.properties(屬性)
- (1)引入外部properties檔案
- (2)在properties屬性中 添加propertie 标簽
- (3)外部引入和内部标簽搭配使用
- (4)外部檔案和内部标簽 屬性沖突
- 3.typeAliases 類型别名
- (1) 通過标簽給實體類起别名
- (2) 通過typeAliases 中的 标簽掃描一個包
- (3)@Alias 注解自定義類名
- 4.Mapper 映射器
- (1) 使用 resource屬性,把對應的xml檔案路徑給寫入
- (2)使用接口(class檔案)綁定注冊
- (3) 通過package 綁定注冊
Mybatis 架構學習(三)—— 配置優化
1.環境配置
根據官方文檔所說,mybatis可以适應多種環境
我們再看之前我們寫的mybatis-config 發現是一個 environments标簽,裡面可以有多個 environment标簽,表示多套配置
那麼mybtais怎麼決定使用那一套配置呢?
environments 有個屬性 default
environment 有個屬性 是id
default 填入想要使用環境的 id 即可,此時mybtais就是用 該id的環境作為預設
接下來就是介紹環境配置中的具體标簽了
(1)transactionManger 事務管理器
先看官方文檔
總結: mybatis 有兩種事務管理器,一個是JDBC,一個是Managed
JDBC – 這個配置使用JDBC 的送出和復原設施,它依賴從資料源獲得的連接配接來管理事務作用域。
Managed 這個配置什麼也沒做。
咱們使用mybtais 一般預設就用 JDBC
(2)dataSource 資料源
資料源類型
看官方文檔
再總結一下,資料源類型通常用 POOLED 或者 UNPOOLED
從英文的角度我們就能看出差別了,pooled 池子,unpooled 沒有池子
pooled
資料庫連接配接跟池子有關,如果是pooled類型,每次請求連接配接資料庫,第一次連接配接使用完畢,不會被回收,而是放到池子裡等待再次連接配接,避免了建立新連接配接的初始化等操作的時間,時間很快
unpooled
每次請求連接配接資料庫 使用完畢時候,這個連接配接就被回收了,下一次再發送請求的時候,又要重新的建立新的連接配接等待初始化 。
資料源屬性
這就是 diver url username password 這些連接配接資料庫的資訊了、
2.properties(屬性)
在之前的mybatis-config檔案中,dataSource中的資料庫資訊是我們直接填入的,但是寫到properties 配置中,動态進行替換。
先看官方文檔
總結:
屬性的資訊,可以引入外部的properties檔案,properties 元素的子元素中設定
設定好的屬性可以在整個配置檔案中用來替換需要動态配置的屬性值
(1)引入外部properties檔案
在resources目錄下建立一個 db.properties 檔案存放資料庫連接配接資訊
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
username=root
password=123456
在mybtis-config 引入外部的properties檔案
<properties resource="db.properties"/>
注意:properties 标簽一定是放在 配置檔案的前面的
每個标簽都必須按照其順序進行放置
将datasource中的資料庫資訊替換成 properties中的資訊
使用 ${ properties屬性名}
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
(2)在properties屬性中 添加propertie 标簽
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
(3)外部引入和内部标簽搭配使用
db.properties 外部檔案
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
properties内部标簽
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
(4)外部檔案和内部标簽 屬性沖突
直接說吧,mybatis-config 如果命名沖突,那麼是以 db.properties為 第一選擇的。
這裡有個優先級
外部配置檔案>内部屬性标簽
3.typeAliases 類型别名
這個也是核心配置中的屬性
主要的作用是 可以給類名減少 全限定名的備援,就是不用寫那麼長了
有的type 目錄很多,要寫很長的類型全限定名,很麻煩,于是typeAliases标簽可以 給類型重命名
這個标簽也得按照順序才能放,如果放在其他位置就會報錯
下面介紹如何重命名
(1) 通過标簽給實體類起别名
<typeAliases>
<typeAlias type="pojo.Student" alias="Student"/>
</typeAliases>
之後我們在寫 pojo.Student 的全限定名的時候,可以直接用 Student
(2) 通過typeAliases 中的 标簽掃描一個包
package包中放的 實體類資訊,預設把名字改成首字母小寫的格式
<typeAliases>
<package name="pojo"/>
</typeAliases>
<select id="getStudentList" resultType="student">
select * from student
</select>
如果實體類非常多,建議使用這種方式。
但是呢,這兩種有個差別,第一種使用 标簽可以自己DIY類名,随便起名字
第二種方式使用 标簽如果預設情況下,改成類名首字母小寫,如果非要給成自己希望定的名字,那麼就要使用@Alias注解搭配使用
(3)@Alias 注解自定義類名
前提是搭配使用,一定要記住,我在這裡犯了錯誤報異常處理了很久沒意識到。
首先掃描實體類所在的包
<typeAliases>
<package name="pojo"/>
</typeAliases>
然後如果想要自定義類名,那麼在對應的實體類上面加上@Alias注解,括号裡寫上自定義的名字
@Alias("hello")
public class Student {}
在使用到 Student類的時候,就不用寫全限定名,隻需要寫 hello 即可
注意@Alias 前提是搭配标簽使用的,先掃描包在改類名
4.Mapper 映射器
Mapper映射器 的作用就是把 接口對應的mapper.xml 給注冊到 核心配置中
注冊方式有幾種
(1) 使用 resource屬性,把對應的xml檔案路徑給寫入
路徑和路徑之間使用/
<mappers>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
(2)使用接口(class檔案)綁定注冊
<mappers>
<mapper class="mapper.StudentDao"/>
</mappers>
class 屬性填的是 接口的路徑
這種注冊方式存在很大問題
1.接口 和 xml檔案 不在同一個包下,會報異常
2.接口 和 xml檔案 名字不一樣,會報異常
(3) 通過package 綁定注冊
<mappers>
<package name="mapper"/>
</mappers>
直接使用package标簽,掃描包裡面的接口和xml檔案,實作注冊
也存在和第二種方式一樣的問題
1.接口 和 xml檔案 不在同一個包下,會報異常
2.接口 和 xml檔案 名字不一樣,會報異常