滚雪球学MyBatis-Plus(11):多数据源配置

前言

在上期内容中,我们详细介绍了如何使用 MyBatis Plus 的代码生成器。通过代码生成器,我们能够根据数据库表结构自动生成实体类、Mapper 接口、服务类、控制器和 XML 映射文件,大大提高了开发效率,并减少了重复劳动。同时,我们还探讨了如何进行代码生成器的自定义配置,使其生成的代码更加符合项目规范。

本期内容将深入探讨 MyBatis Plus 的多数据源配置。多数据源配置在需要连接多个数据库的场景下非常实用,能够显著提高应用程序的灵活性和扩展性。通过本期内容,你将学会如何实现多数据源配置,并通过实例演示如何在项目中应用这些技术。

一、引入依赖

首先,我们需要在 pom.xml 文件中添加多数据源相关的依赖。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.2.1</version>
</dependency>
二、配置多数据源

接下来,我们需要在 application.yml 文件中配置多个数据源。

spring:
  datasource:
    dynamic:
      primary: master # 设置默认数据源
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/mybatis_plus_master?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
          username: root
          password: your_password
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave:
          url: jdbc:mysql://localhost:3306/mybatis_plus_slave?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
          username: root
          password: your_password
          driver-class-name: com.mysql.cj.jdbc.Driver
三、配置数据源管理

在项目中创建一个配置类,用于配置数据源的管理。

package com.example.mybatisplusdemo.config;

import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
import com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DataSourceConfig {

    @Bean
    public DynamicDataSourceProvider dynamicDataSourceProvider(DynamicDataSourceProperties properties) {
        return new YmlDynamicDataSourceProvider(properties);
    }

    @Bean
    public DynamicRoutingDataSource dynamicRoutingDataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
        DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
        dynamicRoutingDataSource.setPrimary("master");
        dynamicRoutingDataSource.setProvider(dynamicDataSourceProvider);
        return dynamicRoutingDataSource;
    }
}
四、使用多数据源

在服务类或方法上使用 @DS 注解,指定使用的数据源。

  1. 在服务类中使用多数据源

    • UserService 接口中定义方法:

      IPage<User> findAllFromSlave(Page<User> page);
      
    • UserServiceImpl 类中实现方法,并使用 @DS 注解指定数据源:

      @DS("slave")
      @Override
      public IPage<User> findAllFromSlave(Page<User> page) {
          return baseMapper.selectPage(page, null);
      }
      
  2. 在控制器中提供多数据源查询接口

    • UserController 类中编写接口,接收查询请求并调用服务层方法:
      @GetMapping("/listFromSlave")
      public IPage<User> listFromSlave(@RequestParam int pageNo, @RequestParam int pageSize) {
          Page<User> page = new Page<>(pageNo, pageSize);
          return userService.findAllFromSlave(page);
      }
      
五、测试多数据源配置
  1. 启动 Spring Boot 应用

    • 在 IDE 中运行 MybatisPlusDemoApplication 类,启动项目。
  2. 测试多数据源查询

    • 使用浏览器或 Postman 访问 http://localhost:8080/user/listFromSlave?pageNo=1&pageSize=5,查看从从库查询的数据结果。
六、动态切换数据源

MyBatis Plus 还支持在运行时动态切换数据源。我们可以通过编程方式动态切换数据源,以满足更复杂的业务需求。

  1. 在服务层中动态切换数据源

    • UserService 接口中定义方法:

      IPage<User> findAllFromDynamicDataSource(Page<User> page, String datasource);
      
    • UserServiceImpl 类中实现方法,使用编程方式动态切换数据源:

      @Override
      public IPage<User> findAllFromDynamicDataSource(Page<User> page, String datasource) {
          DynamicRoutingDataSource dataSource = (DynamicRoutingDataSource) DynamicDataSourceContextHolder.peek();
          DynamicDataSourceContextHolder.push(datasource);
          IPage<User> result = baseMapper.selectPage(page, null);
          DynamicDataSourceContextHolder.poll();
          return result;
      }
      
  2. 在控制器中提供动态切换数据源的接口

    • UserController 类中编写接口,接收请求并调用服务层方法:
      @GetMapping("/listFromDynamic")
      public IPage<User> listFromDynamic(@RequestParam int pageNo, @RequestParam int pageSize, @RequestParam String datasource) {
          Page<User> page = new Page<>(pageNo, pageSize);
          return userService.findAllFromDynamicDataSource(page, datasource);
      }
      
  3. 测试动态切换数据源

    • 使用浏览器或 Postman 访问 http://localhost:8080/user/listFromDynamic?pageNo=1&pageSize=5&datasource=slave,查看从指定数据源查询的数据结果。
七、总结

通过本篇文章,你已经学会了如何在 MyBatis Plus 中配置和使用多数据源,并在运行时动态切换数据源。我们详细介绍了多数据源配置的实现方法,并通过实例演示了如何在项目中应用这些技术。多数据源配置能够显著提高应用程序的灵活性和扩展性,满足复杂的业务需求。

下期预告

在下一期内容中,我们将深入探讨 MyBatis Plus 的高级功能,包括自定义 SQL 注解、批量操作以及数据加密与解密。通过这些高级功能,你将学会如何实现更复杂的数据操作和安全性措施,进一步提升项目的开发效率和安全性。敬请期待!

通过本系列教程的学习,你将系统地掌握 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug菌¹

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值