MyBatis的配置对象Configuration作用及说明

 更新时间:2025年03月11日 15:34:54   作者:冰糖心书房  
MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对象负责管理MappedStatement、创建核心组件、提供配置信息的访问接口以及作为插件机制的入口

MyBatis配置对象Configuration作用

org.apache.ibatis.session.Configuration 是 MyBatis 的核心配置对象,它包含了 MyBatis 运行时所需的几乎所有配置信息。可以把它理解为 MyBatis 的“大脑”或“配置中心”。

在 MyBatis 的初始化过程中,会解析 XML 配置文件或通过 Java 代码构建一个 Configuration 对象,MyBatis 的其他组件(如 SqlSessionFactoryExecutorMappedStatement 等)都会依赖这个 Configuration 对象来获取配置信息和执行操作。

Configuration 对象的主要作用

保存全局配置信息: Configuration 对象保存了 MyBatis 的全局配置信息,这些信息通常在 mybatis-config.xml 文件中配置,或者通过 Java 代码设置。 这些信息包括:

  • Properties: 外部属性配置(可以通过 <properties> 标签或 Properties 对象加载)。
  • Settings: 全局设置,控制 MyBatis 的运行时行为(例如,是否开启缓存、是否使用延迟加载、是否自动映射等)。
  • Type Aliases: 类型别名,用于简化 XML 配置文件中的类型引用。
  • Type Handlers: 类型处理器,用于处理 Java 类型与 JDBC 类型之间的转换。
  • Object Factory: 对象工厂,用于创建结果对象。
  • Plugins: 插件,用于拦截 MyBatis 的核心执行流程(例如,拦截 SQL 执行、参数设置、结果映射等)。
  • Environments: 环境配置,可以配置多个数据源环境(例如,开发环境、测试环境、生产环境)。
  • DatabaseId Provider: 数据库厂商标识,用于根据不同的数据库厂商执行不同的 SQL 语句。
  • Mappers: 映射器配置,用于加载 SQL 映射文件或 Mapper 接口。

管理 MappedStatement: Configuration 对象维护了一个 MappedStatement 的注册表(Map<String, MappedStatement>)。MappedStatement 对象代表一个 SQL 语句(selectinsertupdatedelete),它包含了 SQL 语句的 ID、参数类型、结果类型、SQL 语句内容等信息。Configuration 对象通过 MappedStatement 的 ID 来查找和管理 MappedStatement

创建核心组件: Configuration 对象提供了一些方法来创建 MyBatis 的核心组件,例如:

  • newExecutor(Transaction tx, ExecutorType executorType): 创建 Executor 对象(执行器,负责执行 SQL 语句)。
  • newStatementHandler(...): 创建 StatementHandler 对象(语句处理器,负责处理 JDBC 的 Statement)。
  • newParameterHandler(...): 创建 ParameterHandler 对象(参数处理器,负责设置 SQL 语句的参数)。
  • newResultSetHandler(...): 创建 ResultSetHandler 对象(结果集处理器,负责将 ResultSet 映射为 Java 对象)。

提供配置信息的访问接口: Configuration 对象提供了一系列 getXXX() 方法,用于获取各种配置信息。例如:

  • getVariables():获取属性配置
  • isCacheEnabled(): 获取是否开启缓存。
  • isLazyLoadingEnabled(): 获取是否开启延迟加载。
  • getTypeAliasRegistry(): 获取类型别名注册表。
  • getTypeHandlerRegistry(): 获取类型处理器注册表。
  • getMappedStatement(String id): 根据 ID 获取 MappedStatement 对象。
  • getEnvironment():获取环境配置

插件机制的入口: Configuration 提供了添加和获取插件的方法 (addInterceptor(), getInterceptors()),使得插件可以拦截 MyBatis 的核心执行流程。

Configuration 对象的创建

  • Configuration 对象通常由 SqlSessionFactoryBuilder 创建。
  • SqlSessionFactoryBuilder 可以通过 XML 配置文件或 Java 代码来构建 Configuration 对象。
// 通过 XML 配置文件创建
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Configuration configuration = sqlSessionFactory.getConfiguration();


// 通过 Java 代码创建
Configuration configuration = new Configuration();
configuration.setCacheEnabled(true); // 设置缓存
configuration.setLazyLoadingEnabled(false); // 设置延迟加载
configuration.addMapper(UserMapper.class); // 添加 Mapper 接口
// ... 其他配置 ...
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

Configuration 对象的使用 (通常不需要直接操作)

  • 在大多数情况下,我们不需要直接操作 Configuration 对象。
  • MyBatis 内部会使用 Configuration 对象来执行各种操作。

总结

Configuration 对象是 MyBatis 的核心配置对象,它包含了 MyBatis 运行时所需的几乎所有配置信息,并负责管理 MappedStatement、创建核心组件、提供配置信息的访问接口以及作为插件机制的入口。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java简易登录注册功能实现代码解析

    Java简易登录注册功能实现代码解析

    这篇文章主要介绍了Java简易登录注册功能实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java+mysql实现登录和注册功能

    java+mysql实现登录和注册功能

    这篇文章主要为大家详细介绍了java+mysql实现登录和注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • SpringBoot 使用 Sa-Token 完成注解鉴权功能(权限校验)

    SpringBoot 使用 Sa-Token 完成注解鉴权功能(权限校验)

    Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题,这篇文章主要介绍了SpringBoot使用Sa-Token完成注解鉴权功能,需要的朋友可以参考下
    2023-05-05
  • 面试总结:秒杀设计、AQS 、synchronized相关问题

    面试总结:秒杀设计、AQS 、synchronized相关问题

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧
    2021-06-06
  • java 设计模式(DAO)的实例详解

    java 设计模式(DAO)的实例详解

    这篇文章主要介绍了java 设计模式(DAO)的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Java中Set特性与常用方法示例详解

    Java中Set特性与常用方法示例详解

    Java中的Set是Collection接口的子接口,不允许存储重复元素,且不保证顺序(除特定实现外),下面给大家介绍Java中Set特性与常用方法,感兴趣的朋友跟随小编一起看看吧
    2026-02-02
  • Spring如何动态自定义logback日志目录详解

    Spring如何动态自定义logback日志目录详解

    这篇文章主要给大家介绍了关于Spring如何动态自定义logback日志目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • Java多线程下的单例模式参考

    Java多线程下的单例模式参考

    这篇文章主要演示多线程下的单例模式,分别演示了lock和synchronized两种方案,希望能给大家做一个参考。
    2016-06-06
  • Java转JSON串的几种方式

    Java转JSON串的几种方式

    本文给大家总结一下java转json串的几种方式,每种方式通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • Java框架篇:Spring+SpringMVC+hibernate整合开发

    Java框架篇:Spring+SpringMVC+hibernate整合开发

    本篇文章将会对Spring+SpringMVC+hibernate的整合开发进行介绍。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-02-02

最新评论