Mybatis 是如何解析配置文件中的内容 – settings
文章目录
提示:Mbatis 的加载入口可以看这篇文章:【Mybatis 源码】 Mybatis 是如何解析配置文件中的内容 – properties
一、解析 settings 节点
<settings>
节点在解析的过程中分为了几块内容:
// 获取配置文件中设置的选项
Properties settings = settingsAsProperties(root.evalNode("settings"));
// 加载 VFS
loadCustomVfs(settings);
// 加载日志配置选项
loadCustomLogImpl(settings);
// 给全部配置选项设置默认值或者用户自定义的值
settingsElement(settings);
1. 使用方式
设置项目参考链接:【Mybatis 使用】mybatis-config.xml 配置(properties 和 settings)
因为配置项比较多,而且有些配置项平常基本使用不到,所以这边不详细讲解,只挑选一些典型的作为例子,具体的可以等到用到的时候再配置。
<settings>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 开启延迟加载的功能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 即按需加载属性 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 开启对数据库生成主键的支持 -->
<setting name="useGeneratedKeys" value="false" />
</settings>
2. 获取配置文件中的选项
private Properties settingsAsProperties(XNode context) {
if (context == null) {
return new Properties();
}
// 获取文件中的配置的选项
Properties props = context.getChildrenAsProperties();
// 判断设置的选项是否是属于已知的选项,如果不是已知选项中的一员,则会抛出异常
MetaClass metaConfig = MetaClass.forClass(Configuration.class, localReflectorFactory);
for (Object key : props.keySet()) {
if (!metaConfig.hasSetter(String.valueOf(key))) {
hrow new BuilderException("The setting " + key + " is not known. Make sure you spelled it correctly (case sensitive).");
}
}
return props;
}
3. 加载 vfs 组件
vfs(虚拟化文件系统),平常基本上用不到这个组件,所以只需要了解一下就行。
private void loadCustomVfs(Properties props) throws ClassNotFoundException {
// 获取配置文件中配置的 vfs 自定义类
String value = props.getProperty("vfsImpl");
if (value != null) {
// 配置文件中定义的 vfs 可以用逗号来分隔,所以按照逗号来获取多个自定义类
String[] clazzes = value.split(",");
for (String clazz