本系列以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