Mybatis配置解析(核心配置檔案)
阿新 • • 發佈:2022-01-11
4、配置解析
4.1、核心配置檔案
- Mybatis的配置檔案包含了會深深影響mybatis行為的設定和屬性資訊
- mybatis-config.xml
- properties(屬性)重點
- settings(設定)重點
- typeAliases(類型別名)重點
- typeHandlers(型別處理器)
- objectFactory(物件工廠)
- plugins(外掛)
- environments(環境配置)重點
- environment(環境變數)
- transactionManager(事務管理器)
- dataSource(資料來源)
- environment(環境變數)
- databaseIdProvider(資料庫廠商標識)
- mappers(對映器)
我們只需要學重點的幾個,其餘作為了解
4.2、環境配置(environments)
Mybatis可以配置成適應多種環境
不過要記住:儘管可以配置多個環境,但每個SqlSessionFactory例項只能選擇一種環境
學會使用配置多套執行環境!
Mybatis預設的事務管理器就是JDBC,連線池:POOLED
4.3、屬性(properties)
通過properties我們可以引入外部配置檔案,例項如下:
編寫db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=root
<configuration> <!--properties必須放在配置檔案的第一個--> <!--引入外部配置檔案--> <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--這裡直接使用就可以了--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/kuang/dao/UserMapper.xml"/> </mappers> </configuration>
4.4、類型別名(typeAliases)
第一種:
<!--可以給實體類起別名-->
<typeAliases>
<typeAlias type="com.kuang.pojo.User" alias="User"/>
</typeAliases>
通過其別名,我們的返回值型別和引數型別就不需要寫那麼長了
<select id="getUserList" resultType="User">
select * from mybatis.user
</select>
第二種:
也可以指定一個包名,Mybatis會在包名下搜尋需要的javabean,比如:
掃描實體類的包,他的預設為這個類的類名(首字母小寫)
<!--可以給實體類起別名-->
<typeAliases>
<package name="com.kuang.pojo"/>
</typeAliases>xml
所以直接指定一個包,包下的所有類就都有了自己的別名,更加快捷
在指定包的情況下(就是使用第二種方式),若我們不想使用小寫作為他的別名,那麼我們可以通過註解繼續給類起別名,例如:
@Alias("hello")
public class User {
所以有兩種起別名的方式
如果實體類非常少,使用第一種方式
如果實體類非常多,建議使用第二種方式
4.5、設定
這是mybatis中極為重要的調整設定,他們會改變mybatis的執行時行為
4.6、其他配置
-
型別處理器(typeHandlers)
-
物件工廠(objectFactory)
-
外掛(plugins)
4.7、對映器(mappers)
MapperRegistry:註冊登記我們的Mapper檔案
- 方式一:【不會出錯】【推薦使用】【其餘兩個知道就好】
<mappers>
<mapper resource="com/kuang/dao/UserMapper.xml"/>
</mappers>
- 方式二:(有一定要求,使用class檔案繫結註冊)
<mappers>
<mapper class="com.kuang.dao.UserMapper"/>
</mappers>
注意點:
介面和他的Mapper配置檔案必須同名
介面和他的Mapper配置檔案必須在同一個包下
- 方式三:使用掃描包進行注入繫結
<mappers>
<package name="com.kuang.dao"/>
</mappers>
注意點:
介面和他的Mapper配置檔案必須同名
介面和他的Mapper配置檔案必須在同一個包下
4.8、生命週期和作用域
生命週期和作用域是至關重要的,因為錯誤的使用會導致非常嚴重的併發問題
SqlSessionFactoryBuilder:
- 一旦建立了SqlSessionFactory,就不需要它了
- 區域性變數
SqlSessionFactory:
- 說白了就是可以想象為:資料庫連線池
- SqlSessionFactory一旦被建立就應該在應用的執行期間一直存在,沒有任何理由丟其它或重新建立另一個例項
- 因此SqlSessionFactory的最佳作用域是應用作用域
- 最簡單的就是使用單例模式或者靜態單例模式
SqlSession
- 連線到連線池的一個請求
- sqlsession的例項不是執行緒安全的,因此是不能被共享的,所以他的最佳的作用域是請求或方法作用域
- 用完之後需要趕緊關閉,否則資源被佔用
這裡面的每一個Mapper就代表一個具體的業務。
樹越是嚮往高處的光亮,它的根就越要向下,向泥土向黑暗的深處。