本节分析DatabaseIdProvider的解析主要是这个方法
private void databaseIdProviderElement(XNode context) throws Exception。
mybatis源码分析(七)
然后通过反射实例化之后setPoperties调用接口的getDatabaseId方法获取当前的databaseId。
问题一为什么只能是vendor和db_vendor主要是resolveClass这个方法限制的
mybatis源码分析(七)
其中的resolveAlist是从别名中查找
mybatis源码分析(七)
在看configuration的构造函数里面添加了别名支持
mybatis源码分析(七)
问题二databaseId有什么用,mybatis不像hibernate不能支持多数据库的切换需要自己改sql。如果有了databaseId可以写两套sql,针对Oracle的sql标签上用databaseId=“oracle”,针对mysql的sql标签上用databaseId=“mysql”。
下面在看看VendorDatabaseIdProvider这个类
mybatis源码分析(七)
mybatis源码分析(七)
类似这样

<databaseIdProvider type="DB_VENDOR">
  <property name="MySQL" value="mysql" />
   <property name="Oracle" value="oracle" />
</databaseIdProvider>

如果厂商是MySQL 则返回mysql,如果是Oracle则返回oracle

相关文章: