MyBatisPlus ---- 多数据源
MyBatisPlus ---- 多数据源
- 1. 创建数据库及表
- 2. 引入依赖
- 3. 配置多数据源
- 4. 创建用户service
- 5. 创建商品service
- 6. 测试
适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等
目前我们就来模拟一个纯粹多库的一个场景,其他场景类似
场景说明:
我们创建两个库,分别为 mybatis_plus(以前的库不动)与 mybatis_plus_1(新建),将 mybatis_plus 库的 produce 表移动到 mybatis_plus_1 库,这样每个库一张表,通过一个测试用例分别获取用户数据与商品数据,如果获取到说明多库模拟成功
1. 创建数据库及表
创建数据库 mybatis_plus_1 和表 product
CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `mybatis_plus_1`;
CREATE TABLE product
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称',price INT(11) DEFAULT 0 COMMENT '价格',version INT(11) DEFAULT 0 COMMENT '乐观锁版本号',PRIMARY KEY (id)
);
添加测试数据
INSERT INTO product (id, NAME, price) VALUES (1, '外星人笔记本', 100)
删除 mybatis_plus 库 product 表
use mybatis_plus;
DROP TABLE IF EXISTS product;
2. 引入依赖
<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version></dependency>
3. 配置多数据源
说明:注释掉之前的数据连接,添加新配置
spring:# 配置数据源信息datasource:dynamic:# 设置默认的数据源或者数据源组,默认值即为masterprimary: master# 严格匹配数据源,默认false.true未匹配到指定数据源时抛出异常,false使用默认数据源strict: falsedatasource:# 主数据master:url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root# 副数据slave_1:url: jdbc:mysql://localhost:3306/mybatis_plus_1?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=falsedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root
4. 创建用户service
package com.fickler.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.fickler.mybatisplus.pojp.User;/*** @author dell* @version 1.0*/
public interface UserService extends IService<User> {
}
package com.fickler.mybatisplus.service.impl;import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fickler.mybatisplus.mapper.UserMapper;
import com.fickler.mybatisplus.pojp.User;
import com.fickler.mybatisplus.service.UserService;
import org.springframework.stereotype.Service;/*** @author dell* @version 1.0*/
@Service
@DS("master")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
5. 创建商品service
package com.fickler.mybatisplus.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.fickler.mybatisplus.pojp.Product;/*** @author dell* @version 1.0*/
public interface ProductService extends IService<Product> {
}
package com.fickler.mybatisplus.service.impl;import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fickler.mybatisplus.mapper.ProductMapper;
import com.fickler.mybatisplus.pojp.Product;
import com.fickler.mybatisplus.service.ProductService;
import org.springframework.stereotype.Service;/*** @author dell* @version 1.0*/
@Service
@DS("slave_1")
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
}
6. 测试
package com.fickler.mybatisplus;import com.fickler.mybatisplus.service.ProductService;
import com.fickler.mybatisplus.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class MyBatisPlusDataSourceApplicationTests {@Testvoid contextLoads() {}@Autowiredprivate UserService userService;@Autowiredprivate ProductService productService;@Testpublic void test(){System.out.println(userService.getById(4));System.out.println(productService.getById(1));}}

结果:
- 都能顺利获取对象,则测试成功
- 如果我们实现读写分离,将写操作方法加上主库数据源,读操作方法加上从库数据源,自动切换,是否就能实现读写分离?
相关文章:
MyBatisPlus ---- 多数据源
MyBatisPlus ---- 多数据源1. 创建数据库及表2. 引入依赖3. 配置多数据源4. 创建用户service5. 创建商品service6. 测试适用于多种场景:纯粹多库、读写分离、一主多从、混合模式等 目前我们就来模拟一个纯粹多库的一个场景,其他场景类似 场景说明&#x…...
Java多线程
目录1 多线程1.1 进程1.2 线程1.3 多线程的实现方式1.3.1 方式1:继承Tread类1.3.2 方式2:实现Runnable接口1.3.3 方式3:实现Callable接口1.4 设置和获取线程名称1.5 线程调度1.6 线程控制1.7 线程生命周期1.8 数据安全问题之案例:…...
linux高级命令之线程执行带有参数的任务
线程执行带有参数的任务学习目标能够写出线程执行带有参数的任务1. 线程执行带有参数的任务的介绍前面我们使用线程执行的任务是没有参数的,假如我们使用线程执行的任务带有参数,如何给函数传参呢?Thread类执行任务并给任务传参数有两种方式:args 表示以…...
管理会计报告和财务报告的区别
财务会计报告是给投资人看的,可以反映公司总体的盈利能力。不过,我们回顾一下前面“第一天”里面提到的问题。如果你是公司的产品经理,目前有三个产品在你的管辖范围内。上级给你一笔新的资金,这笔资金应该投到哪个产品上…...
华为OD机试 - 最左侧冗余覆盖子串(Python) | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】 华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】 华为OD机试 - 删除最少字符(Python) | 机试题算法思路 【2023-02】 华为OD机试 - Excel 单元格数值统计(Python) | 机试题算法思路 …...
【Opencv 系列】第1章 图像基础
通过本套课程,可以学到: 1.opencv的基本操作 2.两个案例,目标追踪&人脸识别 对重点内容,我会提示,包括我再准备这套课程过程中遇到的坑点! 最后代码我会放到git上,章节顺序一致:https://github.com/justinge/opencv_tutorial.git 系列文章目录 第1章 Opencv 图像基础 和 …...
创建和销毁对象——遇到多个构造器参数时要考虑使用构建器
静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数。比如用一个类表示包装食品外面显示的营养成分标签。这些标签中有几个域是必需的:每份的含量、每罐的含量以及每份的卡路里。还有超过20个的可选域:总脂肪量、饱和脂…...
【c++学习】入门c++(中)
目录一. 前言二. 函数重载1. 概念2.函数名修饰规则三 .引用(&)1. 概念2. 引用特性3.应用1.做参数2. 做返回值3. 传值、传引用效率比较4.引用和指针的区别四 . 结语一. 前言 小伙伴们大家好,今天我们继续学习c入门知识,今天的…...
论文阅读_AlphaGo_Zero
论文信息 name_en: Mastering the game of Go without human knowledge name_ch: 在没有人类知识的情况下掌握围棋游戏 paper_addr: http://www.nature.com/articles/nature24270 doi: 10.1038/nature24270 date_publish: 2017-10-01 tags: [‘深度学习’,‘强化学习’] if: 6…...
一文教你用Python创建自己的装饰器
python装饰器在平常的python编程中用到的还是很多的,在本篇文章中我们先来介绍一下python中最常使用的staticmethod装饰器的使用。 目录一、staticmethod二、自定义装饰器python类实现装饰器python函数嵌套实现装饰器多个装饰器调用三、带参数的装饰器一、staticmet…...
华为OD机试 - 任务总执行时长(JS)
任务总执行时长 题目 任务编排服务负责对任务进行组合调度。参与编排的任务又两种类型,其中一种执行时长为taskA,另一种执行时长为taskB。任务一旦开始执行不能被打断,且任务可连续执行。服务每次可以编排num个任务。 请编写一个方法,生成每次编排后的任务所有可能的总执…...
pytorch离线快速安装
1.pytorch官网查看cuda版本对应的torch和torchvisionde 版本(ncvv -V,nvidia-sim查看cuda对应的版本) 2.离线下载对应版本,网址https://download.pytorch.org/whl/torch_stable.html 我下载的: cu113/torch-1.12.0%2Bcu113-cp37-cp37m-win_…...
华为OD机试 - 数组合并(JS)
数组合并 题目 现在有多组整数数组,需要将他们合并成一个新的数组。 合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中, 取完的内容会删除掉, 如果该行不足固定长度或者已经为空, 则直接取出剩余部分的内容放到新的数组中,继续下一行。 如样例1,获得长度3,先遍…...
不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向
不要让GPT成为你通向“学业作弊”的捷径——使用GPT检测工具来帮助你保持正确的方向 最近,多所美国高校以及香港大学等都明确禁止在校使用ChatGPT等智能文本生成工具。GPT(Generative Pre-trained Transformer)是一种自然语言处理技术&#x…...
基于matlab的斜视模式下SAR建模
一、前言此示例说明如何使用线性 FM (LFM) 波形对基于聚光灯的合成孔径雷达 (SAR) 系统进行建模。在斜视模式下,SAR平台根据需要从宽侧斜视一定角度向前或向后看。斜视模式有助于对位于当前雷达平台位置前面的区域进行…...
15-基础加强-1-类加载器反射
文章目录1.类加载器1.1类加载器【理解】1.2类加载的过程【理解】1.3类加载的分类【理解】1.4双亲委派模型【理解】1.5ClassLoader 中的两个方法【应用】2.反射2.1反射的概述【理解】2.2获取Class类对象的三种方式【应用】 第1步:获取类的Class对象2.3反射获取构造方…...
基于SSM,Spring, BootStrap 毕业设计管理系统的设计与实现
目录 一.前言介绍 二、主要技术 2.1 SSM框架介绍 2.2 MYSQL数据库 2.3 持久层框架MyBatis 2.4 前端框架BootStrap 三. 系统设计 3.1 系统架构设计 3.2 系统功能模块 3.2.1 学生模块 3.2.2 教师模块 3.2.3 管理员模块 四、数据库设计 4.1 数据分析 4.2 概念设计 …...
一招鉴别真假ChatGPT,并简要介绍ChatGPT、GPT、GPT2和GPT3模型之间的区别和联系
以下内容除红色字体部分之外,其他均来源于ChatGPT自动撰写。 ChatGPT是基于GPT模型的对话生成模型,旨在通过对话模拟实现自然语言交互。它是为了改善人机对话体验而设计的,主要应用于聊天机器人、智能客服等场景。 与GPT模型相比,…...
华为OD机试 - 特异性双端队列(JS)
特异性双端队列 题目 有一个特异性的双端队列,该队列可以从头部到尾部添加数据,但是只能从头部移除数据。 小A一次执行 2n 个指令往队列中添加数据和移除数据, 其中 n 个指令是添加数据(可能从头部也可以从尾部添加) 依次添加 1 到 n , n 个指令是移出数据 现在要求移除数…...
Nginx自动封禁可疑Ip
文章目录一、Nginx封禁ip1、简介2、nignx 禁止IP访问2.1 方法一2.2 方法二3、关于 deny 的使用二、脚本自动封禁Ip1、流程介绍2、脚本实战2.1 核心脚本解释2.2 编写shell脚本2.3 crontab定时一、Nginx封禁ip 1、简介 在网站维护过程中,有时候我们需要对一些IP地址…...
3步解锁任天堂控制器PC潜能:WiinUPro开源适配神器完全指南
3步解锁任天堂控制器PC潜能:WiinUPro开源适配神器完全指南 【免费下载链接】WiinUPro 项目地址: https://gitcode.com/gh_mirrors/wi/WiinUPro 还在为任天堂控制器无法在PC上使用而烦恼吗?WiinUPro开源项目为你解决这一难题!这是一款…...
3步构建跨平台AI自动化测试:Midscene.js视觉驱动解决方案
3步构建跨平台AI自动化测试:Midscene.js视觉驱动解决方案 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene Midscene.js是一款基于视觉语言模型的跨平台…...
DGX平台Spark数据处理优化:GPU加速与RAPIDS集成实战
1. 项目概述:一个面向DGX平台的Spark数据处理工具 最近在整理一些高性能计算环境下的数据处理方案时,我重新审视了一个名为 adadrag/nemoclaw-dgx-spark 的项目。这个项目名字看起来有点复杂,拆解一下,核心是“DGX”和“Spark”…...
RT-Thread aarch64虚拟平台文件系统移植实战:从QEMU virt到LittleFS
1. 项目概述与核心价值最近在折腾RT-Thread的aarch64虚拟平台,特别是qemu-virt64-aarch64这个BSP(Board Support Package,板级支持包)上的文件系统支持。这看起来像是一个很具体的移植工作,但实际上,它触及…...
用STM32F103和AD9833制作一个简易信号源:从电路搭建、驱动编写到波形测试全记录
用STM32F103和AD9833打造高精度信号发生器:硬件设计、固件开发与波形优化全解析 在电子工程和嵌入式开发领域,信号发生器是不可或缺的基础工具。无论是测试滤波器响应、校准传感器,还是验证通信协议,一个稳定可靠的信号源都能显著…...
超声波,毫米波,激光雷达
一、技术原理与核心特性 1.超声波传感器 (1)原理:利用20kHz以上机械波的反射时间差(ToF)测距,典型工作频率40-58kHz。 (2)核心特性: 非接触式测量࿰…...
AI技能工程框架解析:从模块化设计到智能体构建实战
1. 项目概述:一个面向技能复现与创造的AI工具集最近在GitHub上看到一个挺有意思的项目,叫“skill-creator-pro”。光看这个名字,你可能会有点摸不着头脑,这到底是做什么的?是教人学技能的,还是生成技能的&a…...
将taotoken集成到自动化工作流中提升内容生成效率
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 将taotoken集成到自动化工作流中提升内容生成效率 对于内容创作或社交媒体运营团队而言,保持高质量内容的持续输出是一…...
免费电商平台批量下载图片方法,好用的让你不敢相信
pc+浏览器方法,批量快速下载淘宝、拼多多、抖音等常用电商均满足。 全程不花一分钱,所有资源都免费。 方法简单,操作方便。 只需在浏览其中增加 (downpictures) 当图扩展即可。 一、操作方法如下: 1、如使用edge浏览器,访问这个网址:当图 ,然后点击按钮“获取”,…...
突然想写一些东西
---title: blogdate: 2026-05-15 02:18:57tags: ["chitchat"]about: 突然想写一些东西---马上毕业了,在写致谢的时候发现好像想写的东西挺多的,但是不知道怎么写出来了,可能是因为很久没写东西了?也可能是AI用多了自己深…...
