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数据JDBC 或 Spring 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
我正在开发一个基于 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数据JDBC 或 Spring 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