关于springboot2项目MyBatis-Plus支持多数据库
公司的项目一直使用的为mysql数据库,但是最新的客户已经购买ORACLE数据库,所以要求必须使用oracle数据库,为了兼容所以对项目进行改造让其可以支持多个数据库的切换,切记不是多数据源。
查找了帖子,对其进行了测试总结如下:
1、增加方言配置来适配不同的数据库,已对大部分数据库进行适配处理,建立MybatisPlusConfig配置类增加如下代码
/*
/**
* 数据库方言配置
* @return
*/
@Bean
public DatabaseIdProvider getDatabaseIdProvider() {
VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties properties = new Properties();
properties.setProperty("Oracle","oracle");
properties.setProperty("MySQL","mysql");
properties.setProperty("DM DBMS", "dm7");
properties.setProperty("PostgreSQL", "postgresql");
properties.setProperty("DB2", "db2");
properties.setProperty("SQL Server", "sqlserver");
databaseIdProvider.setProperties(properties);
return databaseIdProvider;
}
/**此处的keyvalue,key的值是对应的数据库的productName,value则是一个自定义的值可以对应到mapper.xml里面的databaseId。
productName获取方法如下:
public static void main(String[] args) throws Exception {
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/数据库名";
String username = "root";
String password = "root";
Class.forName(driver);
Connection con = (Connection) DriverManager.getConnection(url,username,password);
DatabaseMetaData metaData = (DatabaseMetaData) con.getMetaData();
System.out.println("数据库的产品名称:" + metaData.getDatabaseProductName());
}
2、xxxMapper.xml中通过databaseId指定数据库类型
<select id="selectUser" resultMap="UserVO" databaseId="mysql">
SELECT * FROM 表名
</select>
<select id="selectUser" resultMap="UserVO" databaseId="oracle">
也可以在具体语句中进行区分
<if test="_databaseId == oracle">
nvl(am.all_role,) AS "role",
</if>
<if test="_databaseId == mysql">
IFNULL(am.all_role,) AS "role",
</if>
3、application.yml里面spring.profiles.active指定的数据库配置如果为Mysql则就会自动寻找databaseId为mysql的语句,如果数据源为oracle就会找对应oracle的语句。我在测试过程中发现不需要有些帖子指出的需要配置database-id。
这样就配置结束,下来会对转oracle时需要注意的点进行统计。
oracle和Mysql转换时注意点 :
对mybatisplus原sql注入的修改: * 数据库方言配置yml * @return */ @Bean public DatabaseIdProvider getDatabaseIdProvider() { VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider(); Properties properties = new Properties(); properties.setProperty("Oracle","oracle"); properties.setProperty("MySQL","mysql"); properties.setProperty("DM DBMS", "dm7"); properties.setProperty("PostgreSQL", "postgresql"); properties.setProperty("DB2", "db2"); properties.setProperty("SQL Server", "sqlserver"); databaseIdProvider.setProperties(properties); return databaseIdProvider; }
* 数据库方言配置 * @return */ @Bean public DatabaseIdProvider getDatabaseIdProvider() { VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider(); Properties properties = new Properties(); properties.setProperty("Oracle","oracle"); properties.setProperty("MySQL","mysql"); properties.setProperty("DM DBMS", "dm7"); properties.setProperty("PostgreSQL", "postgresql"); properties.setProperty("DB2", "db2"); properties.setProperty("SQL Server", "sqlserver"); databaseIdProvider.setProperties(properties); return databaseIdProvider; }
