Mybatis源码分析(一)- Configuration配置文件详解

本文详述Mybatis 3.3.X的Configuration配置,包括Environment、Settings、Registry等核心属性。重点分析Environment的数据源与事务配置,Settings的全局设置,以及TypeAliasRegistry和TypeHandlerRegistry在处理类型别名和处理器映射中的作用。同时探讨XML配置文件的加载过程,通过SqlSessionFactoryBuilder的build方法解析XML并创建Configuration对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列以Mybatis 3.3.X分支源码作为分析源,mybatis源码git地址:https://github.com/mybatis/mybatis-3.git

mybatis的所有配置信息都存储到org.apache.ibatis.session.Configuration类中,可通过xml配置或者手动实例化获取到Configuration信息。

一、Configuration属性详解

Configuration类中属性定义主要有:Environment,Settings,Registry等

Environment描述:

   Environment主要用于配置数据源和事务信息。Mybatis支持多环境设置,可以为开发,测试,生产使用不同的配置。

   Environment的属性源码设置如下:

public final class Environment {
  //当前环境的唯一标识
  private final String id;
  //指定事务工厂
  private final TransactionFactory transactionFactory;
  //指定数据库数据源
  private final DataSource dataSource;
 Settings描述:

  Settings主要是一些运行时的全局设置,以下为Configuration中Settings可以配置的属性

//是否允许在嵌套语句中使用分页(RowBounds类主要包含offset和limit属性,用于分页使用)
  protected boolean safeRowBoundsEnabled = false;
  
  //是否允许在嵌套语句中使用分页(ResultHandler)
  protected boolean safeResultHandlerEnabled = true;
  
  //是否开启自动将数据库表字段映射为驼峰命名规则
  protected boolean mapUnderscoreToCamelCase = false;
  
  //该属性配置为true时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。
  protected boolean aggressiveLazyLoading = true;
  
  //是否允许单一语句返回多结果集(需要兼容驱动)
  protected boolean multipleResultSetsEnabled = true;
  
  //允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)
  protected boolean useGeneratedKeys = false;
  
  //使用列标签代替列名
  protected boolean useColumnLabel = true;
  
  //缓存配置的全局开关
  protected boolean cacheEnabled = true;
  
  //指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的。
  protected boolean callSettersOnNulls = false;


  //指定 MyBatis 增加到日志名称的前缀。
  protected String logPrefix;
  
  //指定 MyBatis 所用日志的具体实现,未指定时将自动查找
  protected Class <? extends Log> logImpl;
  
  //指定 VFS 的具体实现
  protected Class <? extends VFS> vfsImpl;
  
  //缓存作用域,分为LocalCacheScope.SESSION和LocalCacheScope.STATEMENT两种。
  //SESSION表示会缓存一个会话中执行的所有查询。 STATEMENT表示本地会话仅用在语句执行上,对相同 SqlSession的不同调用将不会共享数据。
  protected LocalCacheScope localCacheScope = Local
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值