配置
MyBatis 的配置文件包含了會(huì)深深影響 MyBatis 行為的設(shè)置和屬性信息。 配置文檔的頂層結(jié)構(gòu)如下
- configuration(配置)
- properties(屬性)
- settings(設(shè)置)
- typeAliases(類型別名)
- typeHandlers(類型處理器)
- objectFactory(對(duì)象工廠)
- plugins(插件)
-
environments(環(huán)境配置)
- environment(環(huán)境變量)
- transactionManager(事務(wù)管理器)
- dataSource(數(shù)據(jù)源)
- environment(環(huán)境變量)
- databaseIdProvider(數(shù)據(jù)庫廠商標(biāo)識(shí))
- mappers(映射器)
1.環(huán)境配置(environments)
MyBatis 可以配置成適應(yīng)多種環(huán)境椎镣,這種機(jī)制有助于將 SQL 映射應(yīng)用于多種數(shù)據(jù)庫之中蕊苗, 現(xiàn)實(shí)情況下有多種理由需要這么做竞惋。例如茁裙,開發(fā)硫眨、測試和生產(chǎn)環(huán)境需要有不同的配置;或者想在具有相同 Schema 的多個(gè)生產(chǎn)數(shù)據(jù)庫中使用相同的 SQL 映射尝胆。還有許多類似的使用場景丧裁。
不過要記住:盡管可以配置多個(gè)環(huán)境班巩,但每個(gè) SqlSessionFactory 實(shí)例只能選擇一種環(huán)境渣慕。
mybatis默認(rèn)使用的事物處理器是JDBC,連接池:POOLED
2.properties(屬性)
mybatis-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--核心配置文件-->
<configuration>
<!--引用外部的配置文件-->
<properties resource="db.properties">
<!--這個(gè)可以和外部的配置文件組合使用抱慌,不過內(nèi)部的配置文件優(yōu)先級(jí)高于外部的-->
<property name="pass" value="woyu1996"/>
</properties>
<!--設(shè)置使用那個(gè)環(huán)境-->
<environments default="test">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="woyu1996"/>
</dataSource>
</environment>
<environment id="test">
<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="${pass}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--每一個(gè)mapper.xml都需要在mybatis的核心配置文件中注冊-->
<mapper resource="com/yu/mapper/UserMapper.xml"/>
</mappers>
</configuration>
db.properties文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=woyu1996
- 可以直接引用外部文件
<!--引用外部的配置文件-->
<properties resource="db.properties">
<!--這個(gè)可以和外部的配置文件組合使用逊桦,不過外部的配置文件優(yōu)先級(jí)高于內(nèi)部的-->
<property name="pass" value="woyu1996"/>
</properties>
- 可以在其中增加一些配置屬性
- 如果兩個(gè)文件有同一個(gè)字段,會(huì)優(yōu)先使用內(nèi)部配置文件參數(shù)
3.類型別名(typeAliases)
類型別名可為 Java 類型設(shè)置一個(gè)縮寫名字抑进。 它僅用于 XML 配置强经,意在降低冗余的全限定類名書寫。例如:
單個(gè)類別名設(shè)置
<!--設(shè)置返回值的別名-->
<typeAliases>
<!--單個(gè)pojo類實(shí)現(xiàn)-->
<typeAlias type="user" alias="com.yu.pojo.User"/>
</typeAliases>
也可以指定一個(gè)包名寺渗,MyBatis 會(huì)在包名下面搜索需要的 Java Bean匿情,比如:
<typeAliases>
<!--掃描整個(gè)包,默認(rèn)別名是類名首字母小寫-->
<package name="com.yu.pojo"/>
</typeAliases>
- 如果pojo較少可以使用一個(gè)個(gè)配置信殊,有較高的DIV名稱
- 如果POJO較多炬称,建議使用掃描包多形式,如果有相近的名稱涡拘,可以通過注解的方法玲躯,重新起別名
/*別名注解*/
@Alias("user")
public class User {
private Integer id;
private String lastName;
private String pwd;
}
- 注解的別名優(yōu)先級(jí)最高,會(huì)最先使用這個(gè)
作用域(Scope)和生命周期
理解我們之前討論過的不同作用域和生命周期類別是至關(guān)重要的鳄乏,因?yàn)殄e(cuò)誤的使用會(huì)導(dǎo)致非常嚴(yán)重的并發(fā)問題跷车。
流程圖
SqlSessionFactoryBuilder
這個(gè)類可以被實(shí)例化、使用和丟棄橱野,一旦創(chuàng)建了 SqlSessionFactory朽缴,就不再需要它了。 因此 SqlSessionFactoryBuilder 實(shí)例的最佳作用域是方法作用域(也就是局部方法變量)
SqlSessionFactory
SqlSessionFactory 一旦被創(chuàng)建就應(yīng)該在應(yīng)用的運(yùn)行期間一直存在水援,沒有任何理由丟棄它或重新創(chuàng)建另一個(gè)實(shí)例密强。 使用 SqlSessionFactory 的最佳實(shí)踐是在應(yīng)用運(yùn)行期間不要重復(fù)創(chuàng)建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞習(xí)慣”蜗元。因此 SqlSessionFactory 的最佳作用域是應(yīng)用作用域誓斥。 有很多方法可以做到,最簡單的就是使用單例模式或者靜態(tài)單例模式许帐。
SqlSession
- 每個(gè)線程都應(yīng)該有它自己的 SqlSession 實(shí)例
- SqlSession 的實(shí)例不是線程安全的,因此是不能被共享的毕谴,所以它的最佳的作用域是請(qǐng)求或方法作用域