4、配置解析
学习视频:配置解析
4.1、核心配置文件
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
4.2、环境配置(environments)
Mybatis可以配置成适应多种环境,不过每个SqlSessionFactory实例只能选择一种环境

事务管理器(transactionManager)
在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]")
提示 如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
默认JDBC
数据源(dataSource)
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- 大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]")
默认POOLED(连接池)
4.3、属性(properties)
我们可以通过properties属性来实现引用配置文件
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。【db.properties】
编写个db.properties配置文件:
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username=root
password=123
在mybatis-config配置文件中插入标签:
<properties resource="db.properties"/>
需要注意的是:
- 标签遵循顺序

4.4、类型别名(typeAliases)
- 类型别名可为 Java 类型设置一个缩写名字。
- 意在降低冗余的全限定类名书写
第一种:给一个类取别名:
<typeAliases>
<typeAlias type="com.shui.pojo.User" alias="User"/>
</typeAliases>

第二种:扫描一个包:
每一个在包 shui.pojo 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名
<typeAliases>
<package name="com.shui.pojo"/>
</typeAliases>

可以通过在实体类上加 @Alias("value")自定义别名
@Alias("shui")
public class User {
}

4.5、映射器(Mapper)
方式一:
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="com/shui/dao/UserMapper.xml"/>
</mappers>
方式二: 使用class文件绑定
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<!--<mapper resource="com/shui/dao/UserMapper.xml"/>-->
<mapper class="com.shui.dao.UserMapper"/>
</mappers>
注意:
- 接口和它的Mapper配置必须同名。
- 接口和它的Mapper配置必须在同一包下。
方式三:使用包扫描
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<!--<mapper resource="com/shui/dao/UserMapper.xml"/>-->
<!--<mapper class="com.shui.dao.UserMapper"/>-->
<package name="com.shui.dao"/>
</mappers>
注意:
- 接口和它的Mapper配置必须同名。
- 接口和它的Mapper配置必须在同一包下。
4.6、作用域(Scope)和生命周期

作用域和生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题。
SqlSessionFactoryBuilder:
- 一旦创建了 SqlSessionFactory,就不再需要它了。
- SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。
SqlSessionFactory:
- 可以理解为:数据库连接池
- 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
- 因此 SqlSessionFactory 的最佳作用域是应用作用域。
- 最简单的就是使用单例模式或者静态单例模式。
SqlSession:
- 连接到连接池的一个请求
- SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
- 用完之后需要赶紧关闭,否则资源被占用

这里的每一个Mapper就代表一个具体的业务。
本文详细介绍了MyBatis的核心配置文件及其组成部分,包括环境配置、属性引用、类型别名、映射器设置以及作用域和生命周期的概念。通过具体示例展示了如何配置数据源、设置类型处理器和对象工厂等。
642

被折叠的 条评论
为什么被折叠?



