关于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; }

经验分享 程序员 微信小程序 职场和发展