提示:Mbatis 的加载入口可以看这篇文章:【Mybatis 源码】 Mybatis 是如何解析配置文件中的内容 – properties
节点在解析的过程中分为了几块内容:
// 获取配置文件中设置的选项
Properties settings = settingsAsProperties(root.evalNode("settings"));
// 加载 VFS
loadCustomVfs(settings);
// 加载日志配置选项
loadCustomLogImpl(settings);
// 给全部配置选项设置默认值或者用户自定义的值
settingsElement(settings);
设置项目参考链接:【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>
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;
}
vfs(虚拟化文件系统),平常基本上用不到这个组件,所以只需要了解一下就行。
private void loadCustomVfs(Properties props) throws ClassNotFoundException {
// 获取配置文件中配置的 vfs 自定义类
String value = props.getProperty("vfsImpl");
if (value