一、Mybatis 配置決議詳解
1 核心組態檔
-
mybatis-config.xml
-
MyBatis的組態檔包含了會深深影響MyBatis行為的設定和屬性資訊,
configuration(配置) properties(屬性) settings(設定) typeAliases(型別別名) typeHandlers(型別處理器) objectFactory(物件工廠) plugins(插件) environments(環境配置) environment(環境變數) transactionManager(事務管理器) dataSource(資料源) databaseIdProvider(資料庫廠商標識) mappers(映射器)
2 環境配置(environments)
Mybatis可以適應多種環境!
不過要記住:盡管可以配置多個環境,但是每個SqlSessionFactory實體只能選擇一種環境,
Mybatis默認的事務管理器是JDBC, 連接池:POOLED
3 屬性(properties)
我們可以通過properties屬性來實作參考組態檔;
這些屬性都是可以在外部配置且可動態替換的,既可以在典型的Java屬性檔案中配置,也可以在.properties配置并通過元素來傳遞,
撰寫一個組態檔:
db.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimeZone=CST
username=root
password=123456
在核心組態檔中引入:
此處需要注意: mybatis-config.xml檔案中對于標簽的位置是嚴格定義的,參照下圖:
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-v4ie2NrM-1604372981292)(Mybatis%20%E9%85%8D%E7%BD%AE%E8%A7%A3%E6%9E%90%E8%AF%A6%E8%A7%A3.assets/image-20201021111918383.png)]](https://img.uj5u.com/2020/11/05/173764050326331.png)
<!--引入外部組態檔-->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="111111"/>
</properties>
注意:
- 可以直接引入外部檔案
- 可以在其中增加一些屬性配置
- 如果兩個檔案有同一個欄位,
.properties元素體內的屬性優先
4 型別別名(typeAliases)
- 型別別名用處: 為Java型別設定一個短的名字,
- 存在意義僅在于用來減少類完全限定名(例如:com.demut.pojo.User)的冗余,
示例一:(給物體類起別名)
<!--可以給物體類起別名-->
<typeAliases>
<typeAlias type="com.demut.pojo.User" alias="User"/>
</typeAliases>
優點:可以自行DIY類名稱
缺點:若包內物體類過多,需要很多的起別名陳述句,不方便
示例二:(給包起別名)
<!--可以給包起別名,默認別名為物體類的原名稱(首字母小寫)-->
<typeAliases>
<package name="com.demut.pojo"/>
</typeAliases>
優點:可以直接對包中的所有物體類起作用
缺點:均是默認別名:物體類的原名稱(首字母小寫)
5 其他配置
- typeHandlers(型別處理器)
- objectFactory(物件工廠)
- plugins插件
- mybatis-generator-core
- mybatis-plus
- 通用mapper
6 映射器(mappers)
MapperRegistry: 注冊系結我們的Mapper檔案
方式一:使用resource注冊
<mappers>
<mapper resource="com/demut/dao/UserMapper.xml"/>
</mappers>
方式二:使用class檔案系結注冊
<mappers>
<mapper class="com.demut.dao.UserMapper" />
</mappers>
注意:
- 介面和他的Mapper配合檔案必須同名!
- 介面和他的Mapper組態檔必須在同一個包下!
方式三:使用掃描包進行注入系結
<mappers>
<package name="com.demut.dao"/>
</mappers>
注意:
- 介面和他的Mapper組態檔必須同名!
- 介面和他的Mapper組態檔必須在同一個包下!
二、生存周期和作用域
生命周期,和作用域是至關重要的,因為錯誤的使用會導致非常嚴重的并發問題,

SqlSessionFactoryBuilder:
- 一旦創建了SqlSessionFactory,就不在需要
- 區域變數
SqLSessionFactory:
- 可以想象為:資料庫連接池
- SqlSessionFactory一旦被創建就應該在應用運行期間一直存在,沒有任何理由丟棄它或重新創建另一個實體,
- 因此SQLSessionFactory的最佳作用域是應用作用域,
- 最簡單的就是使用單例模式或者靜態單例模式,
SqlSession:
- 連接到連接池的一個請求!
- SqlSession的實體不是執行緒安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法參考域,
- 用完后需要趕緊關閉,否則資源被占用!
三者之間關系如圖:

其中每一個Mapper,均代表一個具體的業務!
寫在最后
忙于采集的蜜蜂,無暇在人前高談闊論
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202834.html
標籤:其他
