codecamp

MyBatis 3 XML配置-数据库厂商标识

数据库厂商标识(databaseIdProvider)

MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 ​databaseId属性。 MyBatis 会加载带有匹配当前数据库 ​databaseId属性和所有不带 ​databaseId ​属性的语句。 如果同时找到带有 ​databaseId ​和不带 ​databaseId ​的相同语句,则后者会被舍弃。 为支持多厂商特性,只要像下面这样在 mybatis-config.xml 文件中加入 ​databaseIdProvider ​即可:

<databaseIdProvider type="DB_VENDOR" />

databaseIdProvider ​对应的 ​DB_VENDOR ​实现会将 ​databaseId ​设置为 ​DatabaseMetaData#getDatabaseProductName()​ 返回的字符串。 由于通常情况下这些字符串都非常长,而且相同产品的不同版本会返回不同的值,你可能想通过设置属性别名来使其变短:

<databaseIdProvider type="DB_VENDOR">
  <property name="SQL Server" value="sqlserver"/>
  <property name="DB2" value="db2"/>
  <property name="Oracle" value="oracle" />
</databaseIdProvider>

在提供了属性别名时,​databaseIdProvider ​的 ​DB_VENDOR ​实现会将 ​databaseId ​设置为数据库产品名与属性中的名称第一个相匹配的值,如果没有匹配的属性,将会设置为 “​null​”。 在这个例子中,如果 ​getDatabaseProductName()​ 返回“​Oracle (DataDirect)​”,​databaseId将被设置为“​oracle​”。

你可以通过实现接口 ​org.apache.ibatis.mapping.DatabaseIdProvider​ 并在 ​mybatis-config.xml​ 中注册来构建自己的 ​DatabaseIdProvider​:

public interface DatabaseIdProvider {
  default void setProperties(Properties p) { // 从 3.5.2 开始,该方法为默认方法
    // 空实现
  }
  String getDatabaseId(DataSource dataSource) throws SQLException;
}


MyBatis 3 XML配置-环境配置
MyBatis 3 XML配置-映射器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }