MyBatis③核心配置文件

核心配置文件

configuration 配置

必须按以下顺序声明配置(如果有)。

  • properties:配置
  • settings:设置
  • typeAliases:类型别名
  • typeHandlers:类型处理器
  • objectFactory:对象工厂
  • plugins:插件
  • environments:环境配置
    • environment:环境变量
      • transactionManager:事务管理器
      • dataSource:数据源
  • databaseIdProvider:数据库厂商标识
  • mappers:映射器

1.1、enviroments

MyBatis 支持多环境配置,有助于将 SQL 映射应用于多种数据库。

如:开发、测试和生产环境通常使用不同的配置。

每个 SqlSessionFactory 实例只能选择一个环境。

  • ID:环境名称

  • transactionManager:事务管理器

  • dataSource:数据源类型

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="数据库驱动"/>
                <property name="url" value="jdbc:mysql://主机号:端口号/数据库名?参数"/>
                <property name="username" value="用户名"/>
                <property name="password" value="密码"/>
            </dataSource>
        </environment>
    </environments>
    

1.1.1、事务管理器

  • JDBC
    • 使用 JDBC 的提交和回滚设置。
    • 依赖于从数据源获得的 Connection 来管理事务作用域。
  • MANAGED
    • 不提交或回滚,由容器管理事务的生命周期(比如JEE 应用服务器的上下文)。
    • 默认关闭连接,可通过设置 closeConnection 属性来修改。

1.1.2、数据源类型

  • POOLED:利用 “池” 的概念,管理 Connection 对象。
  • UNPOOLED:相对于池化,每次被请求时都打开和释放 Connection 对象。
  • JNDI:在 EJB、应用服务器等容器中使用。

1.2、properties

  • 数据源等配置信息通常在单独的文件(.properties)中配置。
  • 使用 properties 标签引入外部配置文件。
  • property 标签中引用配置信息。

1.2.1、示例

jdbc.properties

存放于 resources 目录,配置信息通常使用 jdbc. 前缀。

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://数据库名:端口号?参数
jdbc.username=用户名
jdbc.password=密码

使用

  • 使用 properties 标签,通过 resources 属性引入外部配置文件。

  • property 标签中,通过 ${} 引用配置信息。

    <properties resource="jdbc.properties"/>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    

1.2.2、加载顺序

若一个属性在多个地方进行了配置,MyBatis 的加载顺序如下:

“就近”加载,先加载的会被后加载的覆盖。

  1. property 标签内的属性。

    <dataSource type="POOLED">
        <property name="driver" value="驱动名"/>
        <property name="url" value="jdbc:mysql://数据库名:端口号?参数"/>
        <property name="username" value="用户名"/>
        <property name="password" value="密码"/>
    </dataSource>
    
  2. property 标签引用的外部配置文件

    <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </dataSource>
    
  3. 作为方法参数传递的属性。

    • 构建 SqlSessionFactory 时,build() 有包含 Properties 参数的重载方法。

    • 此时 Properties 文件作为方法参数传递,其中的属性即被加载读取。

      image-20220406105202282

1.3、mappers

用于加载(注册)映射文件,即 Mapper.xml

1.3.1、相对路径:resource

相对于类路径的资源引用

<mappers>
    <mapper resource="indi/jaywee/dao/UserMapper.xml"/>
    <mapper resource="indi/jaywee/dao/BookMapper.xml"/>
</mappers>

1.3.2、绝对路径:url

(较少使用)基于系统盘符路径

<mappers>
    <mapper url="file://.."/>
</mappers>

1.3.3、全限类名:class

Mapper 接口实现类的全限类名:Mapper 接口与对应 Mapper.xml 同名且在同一个包下。

<mappers>
    <mapper class="indi.jaywee.dao.UserMapper"/>
    <mapper class="indi.jaywee.dao.BookMapper"/>
</mappers>

1.3.4、扫描包:package

扫描并注册指定包中所有 Mapper 接口实现类

<mappers>
    <package name="indi.jaywee.dao"/>
</mappers>

1.4、typeAliases

  • 仅用于 XML 配置,可简化 Java 类型的全限类名书写。
  • 不区分大小写

1.4.1、自定义:typeAlias

<typeAliases>
    <typeAlias alias="user" type="indi.jaywee.pojo.User"/>
</typeAliases>

1.4.2、扫描包:package

扫描指定包中的 JavaBean,以简单类名作为其别名。

比如 indi.jaywee.pojo 的别名是 user。

<typeAliases>
    <package name="indi.jaywee.pojo"/>
</typeAliases>

1.4.3、MyBatis 内置别名

MyBatis 中提供了常用类型的别名。

  • 基本类型、String

    别名
    byte _byte
    long _long
    short _short
    int _int、_integer
    double _double
    float _float
    boolean _boolean
    String string
  • 包装类型

    别名
    Byte byte
    Long long
    Short short
    Integer int、integer
    Double double
    Float float
    Boolean boolean
  • 常用对象类型

    别名
    Date date
    BigDecimal decimal
    BigDecimal bigdecimal
    Object object
    Map map
    HashMap hashmap
    List list
    ArrayList arraylist
    Collection collection
    Iterator iterator

1.5、typeHandlers

MyBatis 通过类型处理器(typeHandler)处理实体转换

  • 封装实体:执行 DQL 时,将结果集中的字段封装到 Java 实体中。
  • 参数设置:执行 DML 时,将实体数据设置到对应位置的占位符参数。

1.5.1、内置类型处理器

image-20220406215054454

1.5.2、自定义类型处理器

作用:自定义 Java 实体属性数据库表字段之间的映射关系。

步骤

  1. 实现 TypeHandler 接口,或继承 BaseTypeHandler 抽象类。

  2. 实现/重写 4 个方法

    • setNonNullParameter:将 Java 属性映射为数据库表字段。
    • getNullableResult:将数据库表字段映射为 Java 属性。
  3. 在 MyBatis 核心配置文件中注册。

    <typeHandlers>
        <typeHandler handler="全限类名"/>
    </typeHandlers>
    

1.6、plugins

常用插件

  • pageHelper
  • mybatis-generator-core
  • mybatis-plus
  • 通用 mapper

1.7、settings

常用设置

1.7.1、缓存

cacheEnabled

  • 说明:全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。
  • 取值:true、false(默认 true)

1.7.2、延迟加载

lazyLoadingEnabled

  • 说明
    • 全局性地开启或关闭所有关联对象的延迟加载。
    • 特定关联关系中,可通过 fetchType 属性来覆盖该项的开关状态。
  • 取值:true、false(默认 false)

1.7.3、命名映射

mapUnderscoreToCamelCase

  • 说明
    • 数据库命名规范中多个单词之间以下划线 _ 分隔,Java 属性则使用小驼峰命名规范。
    • 开启后,会将数据库列名(xxx_yyy)自动映射为 Java 属性名(xxxYyy)
  • 取值:true、false(默认 false)

1.7.4、日志实现

logImpl

  • 说明:指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
  • 取值:默认不开启日志
    • SLF4J
    • LOG4J、LOG4J2
    • JDK_LOGGING
    • COMMONS_LOGGING、STDOUT_LOGGING
    • NO_LOGGING(最小化日志产生的数量,而不是关闭日志)
posted @ 2021-07-24 23:58  Jaywee  阅读(135)  评论(0编辑  收藏  举报

👇