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就代表一個具體的業務。