1.核心配置文件
- mybatis-config.xml
- mybatis 的配置文件包含了會深深影響mybatis行爲的設置和屬性信息
configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)
2.環境變量
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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>
這裏還可以增加一個environment,想要將環境切換到拎一個環境,只需要將enviroments default=" "
換成另一個id就可以
<environments default="test">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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>
<environment id="test">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<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>
事物管理器(transactionManager)有兩種:JDBC(mybatis默認爲JDBC)、MANAGED(一般不需要掌握)
數據源(dataSource)
DataSource說白了就是連接數據庫,它封裝了數據庫參數,程序中操作DataSource對象即可對數據庫進行增刪改查操作。不同方式中使用的DataSource對象不同,例如:
1、DBCP框架
dbcp框架中的DataSource類是:org.apache.commons.dbcp.BasicDataSource
這是commons-dbcp.jar包中的類。
2、C3P0框架
c3p0框架的DataSource類是:com.mchange.v2.c3p0.ComboPooledDataSource
這是c3p0.jar包中的類。
3、Druid框架(阿里巴巴的)
Druid框架的DataSource類是:com.alibaba.druid.pool.DruidDataSource
這是druid.jar包中的類。
4、MyBatis框架
MyBatis框架的DataSource類是:org.apache.ibatis.datasource.pooled.PooledDataSource
這是mybatis.jar包中的類。
有三種內建的數據源類型(也就是 type="[UNPOOLED|POOLED|JNDI]"
):
UNPOOLED
: 這個數據源的實現只是每次被請求時打開和關閉連接。雖然有點慢,但對於在數據庫連接可用性方面沒有太高要求。也就是沒有連接池。。POOLED
: 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。(一般默認,池子:就是用完可以回收,可以使web應用相應更加快!)JNDI
:這個數據源的實現是爲了能在如 EJB 或應用服務器這類容器中使用,容器可以集中或在外部配置數據源,然後放置一個 JNDI 上下文的引用。(不常用)
學會配置多套環境
mybatis默認的事物管理器就是:JDBC
,連接池:POOLED
3.屬性(properties)
我們可以通過properties屬性來實現引用配置文件
這些屬性都是可外部配置且可動態替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來傳遞。【db.properties】
編寫一個配置文件:
db.properties(錯誤的寫法,url用&連接而不是;)
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true;useUnicode=true;characterEncoding=UTF-8
username=root
password=12345
db.properties(正確寫法)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=12345
在覈心配置文件中引入
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="111"/>
</properties>
- 可以直接引入外部文件
- 可以在其中增加一些屬性配置
- 如果兩個文件有同一個字段,,優先使用外部配置文件!
4.類型別名(typeAliases)
- 類型別名是爲 Java 類型設置一個短的名字。
- 存在的意義僅在於用來減少類完全限定名的冗餘。
<typeAliases>
<typeAlias type="com.yang.pojo.User" alias="User"/>
</typeAliases>
也可以指定一個包名,MyBatis 會在包名下面搜索需要的 Java Bean,比如:
掃描實體類的包,它的默認別名就爲這個類的類名首字母小寫。(大寫也是可以的,但是建議小寫)
<typeAliases>
<package name="com.yang.pojo"/>
</typeAliases>
- 在實體類比較少的時候使用第一種方式
- 如果實體類十分多,建議使用第二種
- 第一種可以DIY別名,第二種則不行,如果非要改,需要在實體類上增加註解
@Alias("uesr")
public class User{}
5.設置(setting)
這是mybatis中極爲重要的調整設置,它們會改變mybatis的運行行爲。
- 一個配置完整的 settings 元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
6.其他配置
- typeHandlers(類型處理器)
- objectFactory(對象工廠)
- plugins插件
- mybatis-generator-core
- mybatis-plus
- 通用mapper
7.映射器(mappers)
MapperRegistry:註冊綁定我們的Mapper文件:
- 方式一:【推薦使用】
<mappers>
<mapper resource="com/yang/dao/UserMapper.xml"/>
</mappers>
- 方式二:使用class文件綁定註冊
<mappers>
<mapper class="com.yang.dao.UserMapper"/>
</mappers>
注意點:
-
接口和他的mapper配置文件必須同名
-
接口和他的mapper配置文件必須在同一個包下!
-
方式三:使用掃描包進行註定綁定
<mappers>
<package name="com.yang.dao"/>
</mappers>
注意點:
- 接口和他的mapper配置文件必須同名
- 接口和他的mapper配置文件必須在同一個包下!
8.生命週期和作用域
作用域和生命週期,是至關重要的,因爲錯誤的使用會導致非常嚴重的併發問題。
SqlSessionFactoryBuilder
- 一旦創建了 SqlSessionFactory,就不再需要它了。
- 局部變量
SqlSessionFactory
- 說白了就是可以想象爲:數據庫連接池
- SqlSessionFactory一旦被創建就應該在應用的運行期間一直存在,沒有任何理由丟棄他或重新創建另一個實例
- 因此 SqlSessionFactory 的最佳作用域是應用作用域。
- 最簡單的就是使用單例模式或者靜態單例模式。
SqlSession
- 連接到連接池的一個請求!
- 關閉
- SqlSession 的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。
- 用完之後直接關閉,否則資源被佔用!
這裏面的每一個mapper,就代表具體的業務!