欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis-Plus多數(shù)據(jù)源配置與讀寫分離全過程

 更新時間:2025年09月04日 14:13:16   作者:小劉|  
文章介紹了如何在SpringBoot中使用MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)庫操作,包括純粹多庫和讀寫分離的配置方法,重點(diǎn)演示了多數(shù)據(jù)源的設(shè)置與使用

一、引言

在實(shí)際的項(xiàng)目開發(fā)中,我們常常會遇到需要操作多個數(shù)據(jù)庫的情況,比如純粹多庫、讀寫分離、一主多從、混合模式等。

本文將詳細(xì)介紹如何使用 MyBatis-Plus 實(shí)現(xiàn)純粹多庫的場景,并探討讀寫分離的實(shí)現(xiàn)思路。

二、環(huán)境準(zhǔn)備

  • 開發(fā)工具:IntelliJ IDEA
  • 數(shù)據(jù)庫:MySQL
  • 框架:Spring Boot、MyBatis-Plus
  • 依賴管理:Maven

三、純粹多庫場景模擬

1. 創(chuàng)建數(shù)據(jù)庫及表

首先,我們要創(chuàng)建兩個數(shù)據(jù)庫,分別是 mybatis_plus(原庫保持不變)和 mybatis_plus_1(新建),并將 mybatis_plus 庫的 product 表移到 mybatis_plus_1 庫。

-- 創(chuàng)建數(shù)據(jù)庫 mybatis_plus_1
CREATE DATABASE `mybatis_plus_1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `mybatis_plus_1`;

-- 創(chuàng)建 product 表
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)
);

-- 添加測試數(shù)據(jù)
INSERT INTO product (id, NAME, price) VALUES (1, '外星人筆記本 ', 100);

-- 刪除 mybatis_plus 庫中的 product 表
-- 請先連接到 mybatis_plus 數(shù)據(jù)庫
USE mybatis_plus;
DROP TABLE IF EXISTS product;

2. 引入依賴

在 pom.xml 中添加 dynamic-datasource-spring-boot-starter 依賴:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.0</version>
</dependency>

3. 配置多數(shù)據(jù)源

在 application.yml 中配置多數(shù)據(jù)源:

spring:
  # 配置數(shù)據(jù)源信息
  datasource:
    dynamic:
      # 設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組 ,默認(rèn)值即為 master
      primary: master
      # 嚴(yán)格匹配數(shù)據(jù)源 ,默認(rèn) false.true 未匹配到指定數(shù)據(jù)源時拋異常 ,false 使用默認(rèn)數(shù)據(jù)源
      strict: false
    datasource:
      master:
        url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456
      slave_1:
        url: jdbc:mysql://localhost:3306/mybatis_plus_1?characterEncoding=utf-8&useSSL=false
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 123456

4. 創(chuàng)建用戶 Service

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

// 指定所操作的數(shù)據(jù)源
@DS("master") 
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

5. 創(chuàng)建商品 Service

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
}

6. 測試

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class DynamicDataSourceTest {

    @Autowired
    private UserService userService;

    @Autowired
    private ProductService productService;

    @Test
    public void testDynamicDataSource() {
        System.out.println(userService.getById(1L));
        System.out.println(productService.getById(1L));
    }
}

如果測試時能順利獲取到用戶對象和商品對象,那就表明多庫模擬成功。

四、讀寫分離思路

如果要實(shí)現(xiàn)讀寫分離,可把寫操作方法加上主庫數(shù)據(jù)源,讀操作方法加上從庫數(shù)據(jù)源,這樣就能自動切換。

示例代碼:

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    // 寫操作使用主庫
    @DS("master")
    @Override
    public boolean save(User user) {
        return super.save(user);
    }

    // 讀操作使用從庫
    @DS("slave_1")
    @Override
    public User getById(Serializable id) {
        return super.getById(id);
    }
}

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

    Idea工具中創(chuàng)建 SpringBoot工程及入門詳解

    這篇文章主要介紹了Idea工具中創(chuàng)建 SpringBoot工程及入門分析詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 使用java實(shí)現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出excel的三種方式

    使用java實(shí)現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出excel的三種方式

    這篇文章主要介紹了使用java實(shí)現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出excel的三種方式,有些業(yè)務(wù)系統(tǒng)可能動輒涉及到百萬上千萬的數(shù)據(jù),用正常的方法效率就變得很低,今天我們來看看這幾種實(shí)現(xiàn)思路
    2023-03-03
  • MybatisPlus 連表查詢、邏輯刪除功能實(shí)現(xiàn)(多租戶)

    MybatisPlus 連表查詢、邏輯刪除功能實(shí)現(xiàn)(多租戶)

    這篇文章主要介紹了MybatisPlus 連表查詢、邏輯刪除功能實(shí)現(xiàn)(多租戶),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java經(jīng)典排序算法之歸并排序詳解

    Java經(jīng)典排序算法之歸并排序詳解

    這篇文章主要為大家詳細(xì)介紹了Java經(jīng)典排序算法之歸并排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java開發(fā)中的23種設(shè)計(jì)模式詳解(推薦)

    Java開發(fā)中的23種設(shè)計(jì)模式詳解(推薦)

    本篇文章主要介紹了Java開發(fā)中的23種設(shè)計(jì)模式詳解,現(xiàn)在分享給大家,也給大家做個參考。感興趣的小伙伴們可以參考一下。 設(shè)計(jì)模式(Design Patterns)
    2016-11-11
  • Java?遠(yuǎn)程調(diào)用失敗重試的操作方法

    Java?遠(yuǎn)程調(diào)用失敗重試的操作方法

    這篇文章主要介紹了Java?遠(yuǎn)程調(diào)用失敗重試的操作方法,今天給大家介紹了一下?Spring??的?@Retryable?注解使用,并通過幾個 demo 來帶大家編寫了自己重試攔截器以及回滾方法,需要的朋友可以參考下
    2022-09-09
  • Spring Boot常見外部配置文件方式詳析

    Spring Boot常見外部配置文件方式詳析

    這篇文章主要給大家介紹了關(guān)于Spring Boot常見外部配置文件方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解JAVA 常量池

    詳解JAVA 常量池

    這篇文章主要介紹了JAVA 常量池的相關(guān)資料,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Java限流方法常見實(shí)現(xiàn)方案(單機(jī)限流和分布式限流)

    Java限流方法常見實(shí)現(xiàn)方案(單機(jī)限流和分布式限流)

    Java限流用于保護(hù)系統(tǒng)資源,分為單機(jī)(Guava/滑動窗口)和分布式(Redis+Lua)方案,核心算法包括固定窗口、令牌桶、漏桶等,推薦使用Sentinel等成熟框架實(shí)現(xiàn)動態(tài)流量控制,本文介紹Java限流方法常見實(shí)現(xiàn)方案(單機(jī)限流和分布式限流),感興趣的朋友一起看看吧
    2025-08-08
  • Spring基于注解配置事務(wù)的屬性

    Spring基于注解配置事務(wù)的屬性

    這篇文章主要為大家詳細(xì)介紹了Spring基于注解配置事務(wù)的屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論