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.ymlapplication.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

在配置类中,为每个数据源创建一个DataSourceSqlSessionFactoryTransactionManager 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层面区分数据源,可能需要使用动态数据源切换。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐