多数据库切换,而非多数据源切换

    import java.util.Properties;
     
    import org.apache.ibatis.mapping.DatabaseIdProvider;
    import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
     
    @Configuration
    public class BeanConfig {
     
    @Bean
    public DatabaseIdProvider getDatabaseIdProvider() {
    DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
    Properties p = new Properties();
    p.setProperty("DM DBMS", "dm7");
    p.setProperty("MySQL", "mysql");
    databaseIdProvider.setProperties(p);
    return databaseIdProvider;
    }
    }

  在这段代码中,给Properties设置了两个对象,对应着两种数据库,一个是达梦7,一个是mysql。key的值是对应的数据库的productName,value则是一个自定义的值,你可以取一个你喜欢的名字,这个名字会在mybatis的mapper里面用到。

    而在这里,也要说到文章开头时说过的问题。使用databaseId来配置多数据库的方法网上很多,但是我找到的所有文章,都没有说到,这个Properties的key和value到底是什么意思,有没有什么规范。而且网上几乎都是用oracle和mysql来做例子,但没有提到其他数据库的配置方法,这就导致我们在使用类似达梦数据库的时候,完全不知道该怎么配置。后来我找了官方资料,并结合百度到的信息,得出的结论是,Properties的key就是数据库的productName。既然知道了这一点,后面就好办了,百度到了数据库获取productName的方法后,自然也就可以获取到达梦数据库的productName值了,具体方法如下:不仅仅是达梦数据库,任何数据库都是这样获取的。

    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
     
    public class Test {
    public static void main(String[] args) throws Exception {
    String driver = "com.mysql.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());
    }
    }

  获取到了productName,我们就可以在配置类中将我们需要的数据库配置好,然后再mapper里写sql时,加上databaseId,例如:

    这样一来,配置就完成了,启动项目也可以正常使用了,在最后,还要提一下mybatis对databaseId的处理方式。

多数据库切换,而非多数据源切换_第1张图片

https://www.cnblogs.com/sheng-se/p/14102257.html

你可能感兴趣的:(数据库)