SpringBoot+Mybatis-Plus实现多数据源使

一、Mysql数据库

1、新建数据源

CREATE DATABASE `nothing-phone`;
CREATE DATABASE nothing_dash_board;

2、新建表

CREATE TABLE `master_multiple_tb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `slave_multiple_tb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、项目依赖

注意检查pom文件当前SpringBoot版本是否与依赖版本兼容。

<dependencies>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- MyBatis-Plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>

        <!-- MyBatis-Plus Dynamic Datasource -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.experimental</groupId>
                    <artifactId>spring-aot</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- MySQL Connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>
    </dependencies>

二、配置多数据源

这里需要注意的是,如果配置了mapper-locations,那么类路径资源文件的mapper文件夹不能为空。
application.yml内容如下:

spring:
  application:
    name: multipleDataSource

  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/nothing-phone?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root01
          password: localhost
          driver-class-name: com.mysql.cj.jdbc.Driver
        slave:
          url: jdbc:mysql://localhost:3306/nothing_dash_board?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
          username: root01
          password: localhost
          driver-class-name: com.mysql.cj.jdbc.Driver

#mybatis-plus:
#  mapper-locations: classpath*:/mapper/*Mapper.xml

三、定义实体类和Mapper接口

1、实体类

package com.example.multipledatasource.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper = true)
@Data
public class MasterMultipleTb extends Model<MasterMultipleTb> {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;

    private String email;

    private String phone;
}

package com.example.multipledatasource.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;

@EqualsAndHashCode(callSuper = true)
@Data
public class SlaveMultipleTb extends Model<SlaveMultipleTb> {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;

    private String email;

    private String phone;
}

2、Mapper类

package com.example.multipledatasource.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.multipledatasource.entity.MasterMultipleTb;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Repository
@Mapper
public interface MasterMultipleTbMapper extends BaseMapper<MasterMultipleTb> {
}

package com.example.multipledatasource.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.multipledatasource.entity.SlaveMultipleTb;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Repository
@Mapper
public interface SlaveMultipleTbMapper extends BaseMapper<SlaveMultipleTb> {
}

3、Service层实现

package com.example.multipledatasource.service;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.multipledatasource.entity.MasterMultipleTb;
import com.example.multipledatasource.entity.SlaveMultipleTb;
import com.example.multipledatasource.mapper.MasterMultipleTbMapper;
import com.example.multipledatasource.mapper.SlaveMultipleTbMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class MultipleDataSourceService {

    @Resource
    private MasterMultipleTbMapper masterMultipleTbMapper;

    @Resource
    private SlaveMultipleTbMapper slaveMultipleTbMapper;

    //使用默认的master数据源
    public void insertMasterData(){
        System.out.println("新增master数据源数据!");
        MasterMultipleTb masterMultipleTb = new MasterMultipleTb();
        masterMultipleTb.setName("zhangsan");
        masterMultipleTb.setEmail("11111@qq.com");
        masterMultipleTb.setPhone("11111");
        masterMultipleTbMapper.insert(masterMultipleTb);
    }

    // 明确指定使用slave数据源
    @DS("slave")
    public void insertSlaveData() {
        System.out.println("新增slave数据源数据!");
        SlaveMultipleTb slaveMultipleTb = new SlaveMultipleTb();
        slaveMultipleTb.setName("lisi");
        slaveMultipleTb.setEmail("22222@qq.com");
        slaveMultipleTb.setPhone("22222");
        slaveMultipleTbMapper.insert(slaveMultipleTb);
    }
}

4、控制层实现

package com.example.multipledatasource.controller;

import com.example.multipledatasource.service.MultipleDataSourceService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/api")
public class TestController {

    @Resource
    private MultipleDataSourceService multipleDataSourceService;

    @GetMapping("/masterData")
    public ResponseEntity<String> masterData() {
        multipleDataSourceService.insertMasterData();
        return ResponseEntity.ok("新增master数据源数据");
    }

    @GetMapping("/slaveData")
    public ResponseEntity<String> slaveData() {
        multipleDataSourceService.insertSlaveData();
        return ResponseEntity.ok("新增slave数据源数据");
    }

}

SpringBoot【十一】mybatis-plus实现多数据源配置,开箱即用! 阅读详情

相关推荐

正确可用版:SpringBoot+Mybatis-plus+Druid 实现配置多数据源(数据库)

前言 此文介绍的是在SpringBoot中使用Mybatis配置多数据源(多个数据库),整合Druid 网上有很多文章,翻了翻,但是都有问题啊,有的是没使用Druid,使用了默认的Hirika,有的是配置文件不给或者给的是Hirika能用的配置,层级不对,所以我自己来记一下 代码 pom文件maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid

Oxye 1万+

SpringBoot整合Mybatis-Plus多数据源

随着业务的不断扩展和复杂度的增加,我们在开发过程中往往需要访问多个数据库。比如:我们可能需要同时访问主数据库和从数据库,或者访问多个独立的数据库来处理不同的业务逻辑。这时候,我们就需要使用多数据源来实现对多个数据库的操作。MyBatis-Plus则是一个优秀的ORM框架,它为我们封装了大量的数据库操作细节,简化了我们的开发工作,同时也提供了多数据源方案。开源文档付费,属于组织参与者小锅盖发起的项目企业级付费授权,资料文档免费今天我们以第一种方案来具体说一下怎么实现!

小王博客基地 4370

SpringBoot+MyBatis-Plus多数据源配置实战

数据库连接管理是Java企业级开发的核心技术之一,多数据源配置通过抽象路由机制实现不同数据库实例的动态切换。其技术原理主要基于Spring的AbstractRoutingDataSource和ThreadLocal上下文存储,在保证事务一致性的同时提供灵活的数据访问策略。这种方案在读写分离、分库分表等高性能场景中具有重要价值,特别适合电商、金融等需要处理海量数据的领域。dynamic-datasource组件作为MyBatis-Plus生态的重要扩展,通过@DS注解实现了近乎零侵入的多数据源管理,配合Dru

weixin_29758911的博客 289

Springboot+MybatisPlus 多数据源

Springboot2.x和MybatisPlus3.x配置多数据源案例,及由此产生的常见问题解决办法参考

wcluoo的博客 3723

Spring Boot整合MyBatis Plus实现MySQL多数据源动态切换

Spring Boot 是基于 Spring 框架的扩展,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置(Auto-Configuration)和起步依赖(Starter Dependency)机制,极大地减少了配置复杂度,使开发者能够快速构建生产级应用。MyBatisPlus 是基于 MyBatis 的增强工具,它并没有对 MyBatis 的底层实现进行修改,而是在其基础上封装了一层通用操作接口和功能组件。其核心目标是简化数据库操作代码的编写,提升开发效率。特性。

weixin_42578963的博客 1124

T型三电平关管顺序要求

摘要: T型三电平拓扑中,IGBT关断必须遵循“外管先关、内管后关”的时序,否则易导致器件损坏。正常导通时,外管与内管共同分担电压;正确关断时,外管先关使电流经内管续流至中点,避免电压过冲;若内管先关,电流路径被强制切断,杂散电感引发高压尖峰击穿器件。这一时序本质是为电流提供低应力续流路径,需通过硬件或软件严格保障。

yun0804的博客 2381

SpringBoot整合Mybatis-plus多数据源

SpringBoot,Mybatis-plus,dynamic,druid,多数据源,动态切换数据源

qq_45072346的博客 2265

【无标题】EXCEL实现刷题

运用Excel开发的刷题工具,具有普遍实用性,可将WORD的试题自动导入并实现刷题。

weixin_44081794的博客 2971

Springboot、Mybatis—Plus、Druid整合多数据源

一、Springboot、Mybatis—Plus、Druid整合多数据源 1、参考Mybatis—Plus官方文档 https://mp.baomidou.com/guide/dynamic-datasource.html 2、简介 dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器,其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.0.x。 3、特性 1、数据源分组,适用于多种场景 纯粹多库

qq_41231318的博客 467

华为ENSP完整安装教程

华为ENSP完整安装教程

Hnm456756的博客 7335

iSLIP算法实战:如何用Python模拟交换机优先级匹配(附完整代码)

本文详细介绍了如何使用Python实现iSLIP算法,模拟交换机优先级匹配过程。通过核心的指针滑动逻辑和迭代循环策略,构建了一个完整的iSLIP算法模拟器,并加入可视化模块以直观展示匹配过程。文章还提供了完整的代码框架和性能优化建议,适合网络工程师和Python开发者直接集成到测试环境中。

weixin_29313239的博客 251

SpringBoot整合Mybatis-Plus+Druid实现多数据源

Spring Boot是一个基于Spring框架的开源Java开发框架,旨在简化Spring应用程序的开发、配置和部署。它提供了一种快速、敏捷的方式来构建独立的、生产级别的Spring应用程序,同时还提供了许多开箱即用的功能和工具,如自动配置、内嵌式Web容器、健康检查、监控和管理等。Mybatis-Plus是一个基于Mybatis的增强工具,它在Mybatis的基础上扩展了许多实用的功能,可以帮助开发人员更加高效地完成数据库操作,提高开发效率和代码质量。

FeelTouch Labs 2691

【图像压缩】超先验模型 《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》

绪论 2015年,第一个端到端图像编码方案被提出。基于深度学习的端到端图像压缩主要分为两类,一类是基于RNN的方法,一类是基于CNN的方法。本文对基于CNN的方法

hahalidaxin的专栏 1万+

SpringBoot整合Mybatis-Plus、Druid配置多数据源

本文将介绍如何使用Spring Boot框架整合MyBatis和Druid多数据源,并包含以下内容: 概述Spring Boot、MyBatis和Druid 环境准备和依赖配置 配置多数据源 配置MyBatis 配置Druid连接池 使用MyBatis访问多数据源 代码实现和测试 通过本文的阅读,学习到如何使用Spring Boot框架整合MyBatis和Druid多数据源,能够帮助您更快速、更高效地开发企业级应用程序。

拾一二的博客 1万+

OpenAI Realtime API实时语音交互实战指南

实时语音交互是人机自然对话的核心能力,其本质在于构建低延迟、双向、流式协同的音频-语义闭环。它突破传统REST API的请求-响应范式,依托WebSocket实现毫秒级音频输入流(audio.delta)、模型生成流(text/audio.delta)与动态控制流(session.update)三重并行。该技术显著降低端到端延迟至300ms以内,支撑语音助手、智能客服、对话式教育等强实时场景。本文聚焦OpenAI Realtime API的工程落地,详解PCM音频流处理、VAD语音活动检测、AudioCon

weixin_32285357的博客 393

【8】mctp & pldm

异步会check seq,保证不丢包,虽然发一条req,不用等,但是不能发下一条req,等上条response回来后才能发下一条。TO(tag owner)=1是request,TO=0是response,但是异步通信response由0改为1。如下还有kcs,i3c,serial等。

持续更新ing... 1082
上一篇: 为什么严格意义上一定要把查询的字段写在GROUP BY子句中。
下一篇: 使用LdapTemplate同步LDAP域用户信息
Senye_ing
博客等级 码龄8年 24粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Senye_ing

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

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

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

打赏作者

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

抵扣说明:

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

余额充值