MyBatis配置決議
1、核心組態檔
-
mybatis-config.xml
-
MyBatis 的組態檔包含了會深深影響 MyBatis 行為的設定和屬性資訊,
-
配置檔案的頂層結構如下:
configuration(配置) properties(屬性) settings(設定) typeAliases(型別別名) typeHandlers(型別處理器) objectFactory(物件工廠) plugins(插件) environments(環境配置) environment(環境變數) transactionManager(事務管理器) dataSource(資料源) databaseIdProvider(資料庫廠商標識) mappers(映射器)
2、環境配置(environments)
學會配置多套運行環境!
不過要記住:盡管可以配置多個環境,但每個 SqlSessionFactory 實體只能選擇一種環境,
- 每個資料庫對應一個 SqlSessionFactory 實體
Mybatis默認的事務管理器:JDBC,連接池:POOLED
3、屬性(properties)
可以通過properties屬性實作對組態檔的參考
這些屬性可以在外部進行配置,并可以進行動態替換,你既可以在典型的 Java 屬性檔案中配置這些屬性,也可以在 properties 元素的子元素中設定,【xx.properties】
在核心組態檔中引入properties中的值
注意:xml檔案中標簽的順序是固定的!!
<!--引入外部組態檔-->
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="https://www.cnblogs.com/spang/p/dev_user"/>
<property name="password" value="https://www.cnblogs.com/spang/p/F2Fa3!33TYyg"/>
</properties>
<dataSource type="POOLED">
<property name="driver" value="https://www.cnblogs.com/spang/p/${driver}"/>
<property name="url" value="https://www.cnblogs.com/spang/p/${url}"/>
<property name="username" value="https://www.cnblogs.com/spang/p/${username}"/>
<property name="password" value="https://www.cnblogs.com/spang/p/${password}"/>
</dataSource>
注意點:
- 可以直接引入外部檔案
- 可以在其中增加一些屬性配置
- 如果屬性名相同時,優先使用從外部引入的組態檔中的屬性
4、型別別名(typeAliases)
-
型別別名可為 Java 型別設定一個縮寫名字,
-
它僅用于 XML 配置,意在降低冗余的全限定類名書寫,
<!--給物體類起別名--> <typeAliases> <typeAlias alias="User" type="com.spong.pojo.User"/> </typeAliases>當這樣配置時,
User可以用在任何使用com.spong.pojo.User的地方 -
也可以指定一個包名,MyBatis 會在包名下面搜索需要的 Java Bean
<typeAliases> <package name="com.spong.pojo"/> </typeAliases>在沒有注解的情況下,會使用 Bean 的首字母小寫的非限定類名來作為它的別名,若有注解,則別名為其注解值,
@Alias("myuser") public class User { ... }
在物體類比較少的時候,使用第一種方式;
物體類較多時,使用第二種;
5、映射器(mappers)
<!-- 使用相對于類路徑的資源參考 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
</mappers>
<!-- 使用映射器介面實作類的完全限定類名 -->
<mappers>
<mapper />
</mappers>
<!-- 將包內的映射器介面實作全部注冊為映射器 -->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
使用class檔案系結和掃描包進行系結的注意點:
- 介面和它的Mapper組態檔必須同名!
- 介面和它的Mapper組態檔必須在同一包下!
6、作用域(Scope)和生命周期
不同作用域和生命周期類別是至關重要的,因為錯誤的使用會導致非常嚴重的【并發問題】,

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

如有錯誤,歡迎大佬指正!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/89877.html
標籤:Java
上一篇:第一個Mybatis
