springboot 整合mybatisplus配置MySQL oracle多数据源
时间: 2025-05-06 14:02:27 浏览: 42
### Spring Boot 中集成 MyBatis-Plus 实现 MySQL 和 Oracle 的多数据源配置
#### 1. 添加依赖项
为了在 Spring Boot 项目中使用 MyBatis-Plus 并支持多个数据源(MySQL 和 Oracle),需要引入必要的 Maven 或 Gradle 依赖。以下是基于 Maven 的示例:
```xml
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Oracle Driver -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
<!-- DataSource Configuration Support -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
</dependencies>
```
以上代码片段展示了如何通过 Maven 引入所需的库文件[^1]。
---
#### 2. 数据源配置
在 `application.yml` 文件中定义两个数据源的连接信息,分别对应 MySQL 和 Oracle 数据库。
```yaml
spring:
datasource:
mysql:
url: jdbc:mysql://localhost:3306/mysql_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: root_password
driver-class-name: com.mysql.cj.jdbc.Driver
oracle:
url: jdbc:oracle:thin:@//localhost:1521/orclpdb1
username: system
password: oracle_password
driver-class-name: oracle.jdbc.driver.OracleDriver
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
```
上述 YAML 配置提供了两种不同类型的数据库连接字符串及其驱动程序设置[^2]。
---
#### 3. 创建动态数据源管理器
编写一个自定义的数据源切换逻辑,用于根据业务需求动态选择目标数据源。
```java
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class DynamicDataSourceConfig {
@Bean
public DataSource dataSource(@Qualifier("mysqlDataSource") DataSource mysqlDataSource,
@Qualifier("oracleDataSource") DataSource oracleDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("mysql", mysqlDataSource);
targetDataSources.put("oracle", oracleDataSource);
DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
dynamicRoutingDataSource.setTargetDataSources(targetDataSources);
dynamicRoutingDataSource.setDefaultTargetDataSource(mysqlDataSource); // 默认数据源设为 MySQL
return dynamicRoutingDataSource;
}
}
```
此部分实现了动态路由的功能,允许应用程序灵活地访问不同的数据库实例[^3]。
---
#### 4. 定义具体的数据源 Bean
分别为 MySQL 和 Oracle 注册独立的 `DataSource` Bean。
```java
@Configuration
public class DataSourceConfiguration {
@Primary
@Bean(name = "mysqlDataSource")
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "oracleDataSource")
@ConfigurationProperties(prefix = "spring.datasource.oracle")
public DataSource oracleDataSource() {
return DataSourceBuilder.create().build();
}
}
```
这里利用了 Spring 的 `@ConfigurationProperties` 来简化属性映射过程。
---
#### 5. 使用 MyBatis-Plus 的 BaseMapper 接口
针对每种数据源创建各自的 Mapper 接口并绑定到相应的 Service 层组件上。
对于 **MySQL** 表的操作:
```java
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {}
```
而对于 **Oracle** 表,则需另行声明另一个 Mapper 类型:
```java
@Mapper
public interface EmployeeMapper extends BaseMapper<EmployeeEntity> {}
```
这些接口继承自 MyBatis-Plus 提供的基础 CRUD 功能类,从而极大程度减少手动编码工作量。
---
#### 6. 测试验证
最后,在单元测试或者实际运行环境中确认能否正常读取来自两套异构存储系统中的记录内容。
```java
@SpringBootTest
class MultiDatasourceApplicationTests {
@Autowired
private UserMapper userMapper;
@Autowired
private EmployeeMapper employeeMapper;
@Test
void testMysqlQuery() {
List<UserEntity> users = userMapper.selectList(null);
assertNotNull(users);
}
@Test
void testOracleQuery() {
List<EmployeeEntity> employees = employeeMapper.selectList(null);
assertNotNull(employees);
}
}
```
完成以上步骤即可成功搭建起一个多数据源架构下的持久层框架解决方案。
---
###
阅读全文
相关推荐


















