Mybatis杂谈
本文主要介绍Mybatis的配置解析对应的Class、Mybatis的全局配置等,每个点都不会讲太多细节的东西,只是提一下对应的点,更多细节的东西请有兴趣的读者自己去挖掘。
1.1 配置解析
Mybatis有一堆的配置,有Mybatis的全局配置文件,有Mapper.xml文件,Mapper.xml文件里面又有select、insert等MappedStatement,MappedStatement里面又包含SQL语句,SQL语句里面可能还包含<if>、<where>等动态标签。在Mybatis中这些都是通过BaseBuilder的子类来解析的,具体如下。
类型 |
解析器 |
Mybatis全局配置文件 |
XMLConfigBuilder |
Mapper.xml配置文件 |
XMLMapperBuilder |
Mapper.xml配置文件里面的<select>、<insert>等操作语句 |
XMLStatementBuilder |
SQL语句中的<if>、<where>等动态标签 |
XMLScriptBuilder |
SQL语句及其预编译变量 |
SqlSourceBuilder |
1.2 全局配置简介
Mybatis的全局配置是通过XMLConfigBuilder解析的,Mybatis的全局配置文件里面可以有很多配置,如数据源、Mapper映射文件等,而本小节主要是介绍其中可定义的在<settings>下面的全局配置<setting>。具体可以定义哪些配置,分别代表什么含义,请读者参考XMLConfigBuilder的settingsElement()方法,以下是该方法的源码。
private void settingsElement(Properties props) throws Exception {
configuration.setAutoMappingBehavior(AutoMappingBehavior.valueOf(props.getProperty("autoMappingBehavior", "PARTIAL")));
configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), true));
configuration.setProxyFactory((ProxyFactory) createInstance(props.getProperty("proxyFactory")));
configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"), false));
configuration.setAggressiveLazyLoading(booleanValueOf(pr