1、简介
- 在Java开发中,当使用MyBatis-Plus进行数据库操作时,可能会遇到需要配置多数据源的场景,比如读写分离、操作多个数据库等。
- MyBatis-Plus本身是基于MyBatis的增强工具,它并没有直接提供多数据源的配置支持,但可以通过结合Spring Boot框架来实现多数据源的配置。
2、实际操作
1. 添加依赖
首先,确保pom.xml
(Maven)文件中包含了Spring Boot、MyBatis-Plus以及数据库连接池的依赖。
<dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis-Plus Starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>你的版本号</version> </dependency> <!-- 数据库连接池(例如 HikariCP)--> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency> <!-- 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
</dependencies>
2. 配置数据源
在application.yml
或application.properties
中配置多个数据源。
application.yml :
spring: datasource: db1: url: jdbc:mysql://localhost:3306/db1 username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver db2: url: jdbc:mysql://localhost:3306/db2 username: root password: password driver-class-name: com.mysql.cj.jdbc.Driver
3. 配置数据源Bean
在配置类中,为每个数据源创建一个DataSource
、SqlSessionFactory
和TransactionManager
Bean。
配置类示例:
@Configuration
public class DataSourceConfig { @Bean(name = "db1DataSource") @ConfigurationProperties(prefix = "spring.datasource.db1") public DataSource db1DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "db2DataSource") @ConfigurationProperties(prefix = "spring.datasource.db2") public DataSource db2DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "db1SqlSessionFactory") public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { // 配置SqlSessionFactory } @Bean(name = "db2SqlSessionFactory") public SqlSessionFactory db2SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { // 配置SqlSessionFactory } // 配置TransactionManager // ...
}
4. 使用数据源
在Service层或Mapper层,通过@Qualifier
注解来指定使用哪个数据源。
Mapper示例:
@Mapper
@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserMapper { @Select("SELECT * FROM users") List<User> selectAll();
} // 注意:通常Mapper层不直接指定数据源,而是通过SqlSessionFactory指定。
// 如果有必要在Mapper层面区分数据源,可能需要使用动态数据源切换。