首页 > 其他分享 >滚雪球学MyBatis-Plus(11):多数据源配置

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

时间:2024-09-05 15:23:01浏览次数:7  
标签:11 数据源 dynamic Plus datasource import com page

前言

在上期内容中,我们详细介绍了如何使用 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 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!

标签:11,数据源,dynamic,Plus,datasource,import,com,page
From: https://blog.csdn.net/weixin_43970743/article/details/141028600

相关文章

  • 滚雪球学MyBatis-Plus(12):高级功能
    前言在上期内容中,我们详细探讨了MyBatisPlus的多数据源配置。通过多数据源配置,我们可以连接多个数据库,并在运行时动态切换数据源,显著提高应用程序的灵活性和扩展性。我们详细介绍了多数据源配置的实现方法,并通过实例演示了如何在项目中应用这些技术。本期内容将深入探......
  • Linux 内核 6.11 RC6 发布!
    2024年9月2日,Linux内核开发者LinusTorvalds宣布了Linux内核6.11的第六个候选版本(RC6)的发布。与以往的发布时间相比,由于Torvalds正在国外旅行,这次的RC6提前半天发布。这是6.11版本开发周期的又一部分,主要是继续修复和稳定系统的各个组成部分,特别是文件系统、......
  • 读书笔记(11)《围城》
    序言钱钟书先生最经典的作品,也是仅有的一部长篇小说,堪称中国现代文学史上风格独特的讽刺经典,被誉为“新儒林外史”,自上世纪八十年代以来一直横贯常销、畅销小说之首。小说塑造了抗战初期以方鸿渐为主的一类知识分子群像,记叙了他们所面临的教育、婚姻和事业困境。虽然有具体的历史......
  • 11个行之有效的方法帮助建立持久的客户关系
    有些机构能够建立起稳固的客户基础,并在多年的发展中不断加强,而另一些则经历风雨后最终关闭。那么差别在哪里呢?答案是客户关系。良好的客户关系能带来项目和活动的巨大成功,忠诚的客户会长期保持合作并介绍新客户,品牌声誉也会因此提升。更棒的是,这还能让日常工作更加愉快。那么,......
  • DNF110 仿官单机安装教程 + 虚拟机一键端
    前言今天给大家带来一款单机游戏的架设:地下城与勇士110仿官版本单机安装教程。另外:本人承接各种游戏架设(单机+联网)本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了。如果你是小白也......
  • spring配置数据源
    1、配置druid连接池pom引入<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.11</version></dependency>spring-context配置......
  • C++11新特性
    C++11主要新特性有类的初始化与函数、新增关键字、std库新特性、lambda表达式、智能指针、线程1.关键字()nullptr取代NULL、0()constexpr:显式声明函数返回值、变量是一个常量表达式()auto:对变量类型推导,()decltype:对表达式类型推导,用法为decltype(表达式)()using:声明使用的命......
  • 用Python实现时间序列模型实战——Day 11: 指数平滑模型
    一、学习内容1.简单指数平滑法简单指数平滑法:简单指数平滑法(SimpleExponentialSmoothing,SES)是一种用于平滑时间序列数据的技术,通过对数据赋予不同的指数权重,较新的数据点权重更高。SES适用于平稳的时间序列数据,即没有显著趋势和季节性成分的时间序列。SES模型的......
  • BUSFIN 711 – FINANCIAL ANALYTICS APPLICATIONS
    BUSFIN711–FINANCIALANALYTICSAPPLICATIONSAssignment3:ProjectDUE:4PM,FRIDAY6SEP2024GeneralThisisanindividualassignment.Theassignmentismarkedoutof100marksandworth40%ofyouroverallgradeforthiscourse.Pleasesubmitonl......
  • element-plus中的el-table组件tooltip显示错位
    问题描述:element-plus组件库中的el-table组件有一个show-overflow-tooltip属性,设置为true时如果表格中数据过长就会显示一个浮动窗口就像这样而有时这个小浮窗会有错位的问题像是这样,会导致靠上的列浮窗直接越界不显示问题原因table下的tooltip是fixed定位。positi......