我从
spring boot
连接 db2 数据库并使用实体管理器调用存储过程。我的应用程序中没有任何实体类。我刚刚使用实体管理器引用调用存储过程。
这里是application.properties
#DB2 dev database config
spring.datasource.url=jdbc:db2://server_nameXXX
spring.datasource.username=my_username
spring.datasource.password=my_password
我的 Dao 课程是
EntityManager entityManager;
@Autowired
public SalesCloseEstimateDaoImpl(EntityManager entityManager){
this.entityManager = entityManager;
}
-----------------
StoredProcedureQuery procedureQuery = entityManager.createStoredProcedureQuery(StoredProcedureName);
这里我没有使用任何实体类。现在我需要再连接一台ms sql server,那么如何连接呢?我已经搜索过,但所有配置都有实体类使用,如何在没有实体类的情况下编写此配置?
如果您只调用存储过程,则无需在应用程序中拥有实体管理器,我也遇到了同样的问题,所以我以这种方式进行管理:
添加依赖并删除jpa和hibernate依赖:
org.springframework.boot spring-boot-starter-jdbc创建数据源文件配置:DataSourceConfiguration.java
@配置 公共类数据源配置{
@Bean
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource bd1DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource db2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public Map<String, JdbcTemplate> jdbcTemplateMap() {
Map<String, JdbcTemplate> jdbcTemplateMap = new HashMap<>();
jdbcTemplateMap.put("bd1DataSource", new JdbcTemplate(bd1DataSource()));
jdbcTemplateMap.put("bd1DataSource", new JdbcTemplate(bd1DataSource()));
return jdbcTemplateMap;
}
}
创建您的“存储库”:
@组件@Slf4j 公共类 DB1Repository {
私有最终Map
公共 DB1Repository(Map
public YourClass callSP(int id){ 字符串 storeProcedure = "USE [BD] “ + // “执行[dbo]。[store_procedure] @id”;
storeProcedure = storeProcedure.replace("@id", String.valueOf(id));
YourClass yourClass = new YourClass();
jdbcTemplateMap.get("db1").execute(storeProcedure, (PreparedStatementCallback<Object>) preparedStatement -> {
preparedStatement.execute();
ResultSet resultSet = preparedStatement.getResultSet();
while (resultSet.next()) {
yourClass.setId(resultSet.getInt("id"));
yourClass.setName(resultSet.getInt("name"));
}
return yourClass;
});
return yourClass;
} }
创建对 db2 的下一个“存储库”引用,仅此而已!