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