在做项目中要求一个项目支持Oracle和Pg两种数据库,使用DatabaseIDProvider搭配xml可以实现此功能
DatabaseIdProvider元素主要是为了支持不同厂商的数据库,看一下在Springboot项目中的配置方式:
新建DataBaseCon配置类,加入下面代码
@Bean //自动生成实体类对象
public DatabaseIdProvider databaseIdProvider() {
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties p = new Properties();
p.setProperty("Oracle", "oracle");
p.setProperty("MySQL", "mysql");
p.setProperty("PostgreSQL", "postgresql");
p.setProperty("DB2", "db2");
p.setProperty("SQL Server", "sqlserver");
databaseIdProvider.setProperties(p);
return databaseIdProvider;
}
通过别名我们可以在SQL语句中标识适用于哪种数据库运行。如果不知道数据库名称,我们可以通过以下代码获取:
/**
* 获取数据库名称
*/
public static void getDbInformation() {
SqlSession sqlSession = null;
Connection connection = null;
try {
sqlSession = getSqlSession();
connection = sqlSession.getConnection();
String dbName = connection.getMetaData().getDatabaseProductName();
System.out.println("数据库名称是:" + dbName + ");
} catch (SQLException e) {
e.printStackTrace();
}
}
下面我们就可以在自己的sql语句中使用属性databaseId来标示数据库类型了。如下:
<select id="selectTaskid" resultType="int">
<if test="_databaseId == 'oracle'">
select seq_task_monitor.nextval from dual
</if>
<if test="_databaseId == 'postgresql'">
select nextval('SEQ_TASK_MONITOR')+1
</if>
</select>
上述代码就完成了项目中更具不同数据库环境切换sql语句