springboot mybatis(mybatis plus)实现不同数据库执行不同的SQL

  • Post author:
  • Post category:其他


一.配置

第一种


    /**
     * 数据库配置
     *
     * @return 配置
     */
    @Bean
    public DatabaseIdProvider getDatabaseIdProvider() {
        DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
        Properties properties = new Properties();
        properties.setProperty("Oracle", "oracle");
        properties.setProperty("MySQL", "mysql");
        databaseIdProvider.setProperties(properties);
        return databaseIdProvider;
    }

第二种

写一个实现类 实现DatabaseIdProvider类,实现它的两个方法,返回数据库类型

import org.apache.ibatis.mapping.DatabaseIdProvider;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
 * 自定义一个数据库标示提供类,实现DatabaseIdProvider接口
 *
 */
@Component
public class MyDatabaseIdProvider implements DatabaseIdProvider {
    @Override
    public void setProperties(Properties p) {
        System.out.println(p.getProperty("Oracle"));
    }
    @Override
    public String getDatabaseId(DataSource dataSource) throws SQLException {
        Connection conn = dataSource.getConnection();
        String dbName = conn.getMetaData().getDatabaseProductName();
        String dbAlias = "";
        switch (dbName) {
            case "MySQL":
                dbAlias = "mysql";
                break;
            case "Oracle":
                dbAlias = "oracle";
                break;
            default:
                break;
        }
        return dbAlias;
    }
}

二.使用

1.在if中通过——databaseId来进行判断

2. 在 标签上的databaseId属性设置数据库类型,就可以根据数据库类型选择执行不同的SQL语句

三.原理

mybatis是根据数据源连接信息的metadata.getDatabaseProductName()来确定数据库类型,并加入环境变量中



版权声明:本文为qq_32448349原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。