Mybatis学习笔记(四):配置解析

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

4、配置解析

学习视频:配置解析

4.1、核心配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

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就代表一个具体的业务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值