设为首页 加入收藏

TOP

MyBatis 核心组件 —— Configuration(一)
2023-08-06 07:49:47 】 浏览:73
Tags:MyBatis Configuration

概述

Mybatis 的核心组件如下所示:

  • Configuration:用于描述 MyBatis 的主配置信息,其他组件需要获取配置信息时,直接通过 Configuration 对象获取。除此之外,MyBatis 在应用启动时,将 Mapper 配置信息、类型别名、TypeHandler 等注册到 Configuration 组件中,其他组件需要这些信息时,也可以从 Configuration 对象中获取
  • MappedStatement:用于描述 Mapper 中的 SQL 配置信息,是对 Mapper XML 配置文件中 <select|update|delete|insert> 等标签或者 @Select/@Update 等注解配置信息的封装
  • SqlSession:是 MyBatis 提供的面向用户的 API,表示和数据库交互时的会话对象,用于完成数据库的增删改查功能。SqlSession 是 Executor 组件的外观,目的是对外提供易于理解和使用的数据库操作接口
  • Executor:MyBatis 的 SQL 执行器,MyBatis 对数据库所有的增删改查操作都是由 Executor 组件完成的
  • StatementHandler:封装了对 JDBC Statement 对象的操作,比如为 Statement 对象设置参数,调用 Statement 接口提供的方法与数据库交互等等
  • ParameterHandler:当 MyBatis 框架使用的 Statement 类型为 CallableStatcment 和 PreparedStatement 时,ParamelerHandler 用于为 Statement 对象参数占位符设置值
  • ResultSetHandler:ResultSetHandler 封装了对 JDBC 的 ResultSet 对象操作,当执行 SQL 类型为 SELECT 语句时,ResultSetHandler 用于将查询结果转换成 Java 对象
  • TypeHandler:TypeHandler 是 MyBatis 中的类型处理器,用于处理 Java 类型与 JDBC 类型之间的映射,它的作用主要体现在能够根据 Java 类型调用 PreparedStatement 或 CallableStatement 对象对应的 set 方法为 Statement 对象设置值,而且能够根据 Java 类型调用 ResultSet 对象对应的 get 获取SQL执行结果

在使用 MyBatis 时,我们使用到 SqlSession 组件,它是用户层面的 API。实际上 SqlSession 是Executor 组件的外观,目的是为用户提供更友好的数据库操作接口,这是设计模式中外观模式的典型应用。真正执行 SQL 操作的是 Executor 组件,Executor 可以理解为 SQL 执行器,它会使用 StatementHandler 组件对 JDBC 的 Statement 对象进行操作。当 Statement 类型为 CallableStatement 和 PreparedStatement 时,会通过 ParameterHandler 组件为参数占位符赋值。ParameterHandler 组件中会根据 Java 类型找到对应的 TypeHandler 对象,TypeHandler 会通过 Statement 对象提供的set 方法为 Statement 对象中的参数占位符设置值。StatementHandler 组件使用 JDBC 中的 Statement 对象与数据库完成交互后,当 SQL 语句类型为 SELECT 时,MyBatis 通过 ResultSetHandler 组件从 Statement 对象中获取 ResultSet 对象,然后将 ResultSet 对象转换为 Java 对象


Configuration

MyBatis 框架的配置信息有两种,一种是配置 MyBatis 框架属性的主配置文件;另一种是配置执行 SQL 语句的 Mapper 配置文件。Configuration 的作用是描述 MyBatis 主配置文件的信息。Configuration 类中定义了一系列的属性用来控制MyBatis 运行时的行为,这些属性代码如下:

public class Configuration {
	protected boolean safeRowBoundsEnabled;
	protected boolean safeResultHandlerEnabled = true;
	protected boolean mapUnderscoreToCamelCase;
	protected boolean aggressivelazyLoading;
	protected boolean multipleResultSetsEnabled = true;
	protected boolean useGeneratedKeys;
	protected boolean useColumnLabel = true;
	.......
}

这些属性的值可以在MyBatis主配置文件中通过 <setting> 标签指定,例如:

<settings>
	<setting name="cacheEnabled" value="true"/>
	<setting name="lazyLoadingEnabled" value="true"/>
</settings>

所有属性的作用及配置说明参考如下:

  • cacheEnabled:是否开启 Mapper 缓存,即二级缓存,默认 true
  • lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态,默认 false
  • aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载,默认 false,3.4.1 之前默认为 true
  • multipleResultSetsEnabled:是否允许单一语句返回多结果集,默认 true
  • useColumnLabel:使用列标签代替列名,不同的驱动在这方面会有不同的表现,默认 true
  • useGeneratedKeys:允许 JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容,但仍可正常工作,默认 false
  • autoMappingBehavior:指定 MyBatis 应该如何自动映射列到 Java 实体属性。NONE 表示取消自动映射,PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。FULL 会自动映射任意复杂的结果集(无论是否嵌套),默认 PARTIAL
  • autoMappingUnknownColumnBehavior:指定发现自动映射目标未知列(或者未知属性)的行为。NONE:不做任何反应,WARNING:输出提醒日志,FAILING:映射失败,抛出异常,默认 NONE
  • defaultExecutorType:配置默认的 Executor 类型,SIMPLE 就是普通的 Executor;REUSE 会复用 Statement 对象;BATCH 会批量执行所有更新语句,默认 SIMPLE
  • defaultStatementTime
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇找出乱序数组第k大的数字(堆排序.. 下一篇Spring Cloud Alibaba 2022 正式..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目