springboot2+jdbctemplate—有没有一种方法可以为每个受支持的数据库提供sql查询?

nkcskrwz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(236)

我正在做一个基于springboot2.4.2的项目,并使用“springbootstarterjdbc”和“com.oracle.database.jdbc”作为oraclejdbc驱动程序。
当我使用jdbctemplate与db交互时,一切看起来都很干净和简单。但是我将来可能需要支持多种数据库类型-oracle、sql server、mysql、db2等。我在Google上搜索了很多,但没有找到任何选项。。
如前所述,我使用的是springjdbc(不是springdatajdbc或springdatajpa)-如何提供特定于代码或配置中支持的每个数据库的sql查询?
请告诉我你的想法。谢谢。

zqdjd7g9

zqdjd7g91#

我不熟悉springjdbc,但您可以使用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

相关问题