Spring Boot 2 + JdbcTemplate - 有没有办法为每个支持的数据库提供 SQL 查询?

Spring Boot 2 + JdbcTemplate - is there a way to provide SQL query for each database supported?

我正在开发一个基于 Spring Boot 2.4.2 的项目并使用“spring-boot-starter-jdbc ”和“com.oracle.database.jdbc”用于 Oracle Jdbc 驱动程序。

当我使用 JdbcTemplate 与 DB 交互时,一切看起来都非常简单。但我将来可能需要支持多种数据库类型——Oracle、SQL Server、MySQL、DB2 等。 做了很多谷歌搜索,但没有找到任何选项..

像上面提到的,我使用的是Spring-Jdbc(不是Spring数据JDBCSpring Data JPA) - 如何提供特定于代码或配置中支持的每个数据库的 SQL 查询?

请告诉我您的想法。谢谢

我不熟悉 Spring JDBC,但您可以使用 Spring 依赖注入机制为每个数据库创建配置文件。

首先是一个界面:

public interface DbQueries {
    String createQueryForSelectingUsers();
}

然后为每个支持的数据库实现接口:

@Profile("mysql")
@Component
public class MySqlDbQueries implements DbQueries {

    @Override
    public String createQueryForSelectingUsers() {
        return "SELECT * FROM USER";
    }
}

第二个例子:

@Profile("oracle")
@Component
public class OracleDbQueries implements DbQueries {

    @Override
    public String createQueryForSelectingUsers() {
        return "SELECT * FROM USER";
    }
}

之后在需要的地方使用它:

public class MyRepository {

    private DbQueries dbQueries;

    // DbQueries implementation will be injected based on your current profile
    public MyRepository(DbQueries dbQueries) {
        this.dbQueries = dbQueries;
    }

    public void printAllUsers() {

        String query = dbQueries.createQueryForSelectingUsers();

        // stuff to execute query
    }
}

记得使用 e.q 的个人资料启动您的应用。 --spring.profiles.active=mysql 或将活动配置文件信息添加到 application.properties:

spring.profiles.active=mysql