最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、引言

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

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

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

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

三、純粹多庫(kù)場(chǎng)景模擬

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

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

-- 創(chuàng)建數(shù)據(jù)庫(kù) 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 '商品名稱(chēng) ',
    price   INT(11) DEFAULT 0 COMMENT '價(jià)格 ',
    version INT(11) DEFAULT 0 COMMENT '樂(lè)觀鎖版本號(hào) ',
    PRIMARY KEY (id)
);

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

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

2. 引入依賴(lài)

在 pom.xml 中添加 dynamic-datasource-spring-boot-starter 依賴(lài):

<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ù)源時(shí)拋異常 ,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)建用戶(hù) 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. 測(cè)試

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));
    }
}

如果測(cè)試時(shí)能順利獲取到用戶(hù)對(duì)象和商品對(duì)象,那就表明多庫(kù)模擬成功。

四、讀寫(xiě)分離思路

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

示例代碼:

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 {

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

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

總結(jié)

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

相關(guān)文章

  • Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例

    Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例

    本文主要介紹了Java中xxl-job實(shí)現(xiàn)分片廣播任務(wù)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • JAVA垃圾收集器與內(nèi)存分配策略詳解

    JAVA垃圾收集器與內(nèi)存分配策略詳解

    這篇文章介紹了JAVA垃圾收集器與內(nèi)存分配策略,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-07-07
  • Idea 自動(dòng)生成測(cè)試的實(shí)現(xiàn)步驟

    Idea 自動(dòng)生成測(cè)試的實(shí)現(xiàn)步驟

    當(dāng)我們?cè)趯?xiě)完一些接口方法后需要測(cè)試時(shí),一個(gè)一個(gè)新建測(cè)試類(lèi)比較麻煩 idea給我們提供了快捷辦法,本文主要介紹了Idea 自動(dòng)生成測(cè)試的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • 深入了解Java GC的工作原理

    深入了解Java GC的工作原理

    下面小編就為大家?guī)?lái)一篇深入了解Java GC的工作原理。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • java用arraycopy實(shí)現(xiàn)多擊事件

    java用arraycopy實(shí)現(xiàn)多擊事件

    這篇文章主要介紹了java用arraycopy實(shí)現(xiàn)多擊事件的多種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 新手學(xué)習(xí)微服務(wù)SpringCloud項(xiàng)目架構(gòu)搭建方法

    新手學(xué)習(xí)微服務(wù)SpringCloud項(xiàng)目架構(gòu)搭建方法

    這篇文章主要介紹了新手學(xué)習(xí)微服務(wù)SpringCloud項(xiàng)目架構(gòu)搭建方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Spring Boot常見(jiàn)外部配置文件方式詳析

    Spring Boot常見(jiàn)外部配置文件方式詳析

    這篇文章主要給大家介紹了關(guān)于Spring Boot常見(jiàn)外部配置文件方式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 使用@RequestParam設(shè)置默認(rèn)可以傳空值

    使用@RequestParam設(shè)置默認(rèn)可以傳空值

    這篇文章主要介紹了使用@RequestParam設(shè)置默認(rèn)可以傳空值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringCloud Feign高級(jí)配置詳解

    SpringCloud Feign高級(jí)配置詳解

    這篇文章主要介紹了SpringCloud Feign高級(jí)配置,feign是netflix提供的服務(wù)間基于http的rpc調(diào)用框架,在spring cloud得到廣泛應(yīng)用
    2022-09-09
  • Java如何做帶復(fù)選框的菜單實(shí)例代碼

    Java如何做帶復(fù)選框的菜單實(shí)例代碼

    大家好,本篇文章主要講的是Java如何做帶復(fù)選框的菜單實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論

南召县| 大田县| 土默特左旗| 泉州市| 昆山市| 易门县| 磐石市| 旬邑县| 柳江县| 河北省| 通许县| 都匀市| 朝阳市| 于都县| 昌宁县| 厦门市| 叙永县| 泽库县| 汾西县| 吕梁市| 榆中县| 弥勒县| 留坝县| 巩留县| 岐山县| 乌兰县| 昭觉县| 海口市| 安化县| 华容县| 虎林市| 崇礼县| 积石山| 区。| 萝北县| 盐城市| 集安市| 蕉岭县| 来安县| 柯坪县| 兴山县|