springboot整合mybatis-plus多数据源配置

springboot整合mybatis-plus多数据源配置

参考网址:

springboot的ssm整合mybatis-plus项目的快速构建,使用的是阿里的在线构建项目工具

https://start.aliyun.com/bootstrap.html

mybatis-plus多数据配置参考mybatis-plus中文官网

https://mybatis.plus/

https://dynamic-datasource.com/guide/

1.使用Aliyun Java Initializr快速构建项目

访问网址:

https://start.aliyun.com/bootstrap.html

使用****Aliyun Java Initializr****快速构建一个springboot+mybatis-plus的项目

  1. 选择项目的类型

image-20210328171538569

  1. 选择需要添加的依赖

image-20210328171609706

  1. 使用git拉取项目

image-20210328171757132

2.准备数据库和表

建库脚本

CREATE TABLE `demo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

显示每个库对应的表中的数据

MariaDB [yonghedb]> use test;
Database changed
MariaDB [test]> select * from demo;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | 数据源master |
|  2 | 数据源master |
|  3 | 数据源master |
+----+--------------+
3 rows in set (0.000 sec)

MariaDB [test]> use ssm;
Database changed
MariaDB [ssm]> select * from demo;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | 数据源slave_2 |
|  2 | 数据源slave_2 |
|  3 | 数据源slave_2 |
+----+---------------+
3 rows in set (0.000 sec)

MariaDB [ssm]> use yonghedb;
Database changed
MariaDB [yonghedb]> select * from demo;
+----+---------------+
| id | name          |
+----+---------------+
|  1 | 数据源slave_1 |
|  2 | 数据源slave_1 |
|  3 | 数据源slave_1 |
+----+---------------+
3 rows in set (0.000 sec)

3.整改springboot项目

  1. 修改springboot的配置文件

把application.properties改为application.yml

具体内容如下

server:
  port: 8080

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        slave_1:
          url: jdbc:mysql://localhost:3306/yonghedb?serverTimezone=UTC
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver
        slave_2:
          url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
          username: root
          password: root
          driver-class-name: com.mysql.jdbc.Driver

  1. 引入依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
  1. 写实体类

说明:

方便测试期间,我们就使用一个实体类

Emp.java

package com.shaoming;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author shaoming
 * @Date: 2021/3/28 15:57
 * @Description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName("demo")
public class Demo {
    @TableField("id")
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    @TableField("name")
    private String name;
}

3.写对应的3个mapper接口

DemoMasterMapper.java

package com.shaoming;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author shaoming
 * @Date: 2021/3/28 15:59
 * @Description:
 */
@Mapper
/**
 * 指定是master数据源,当然也可以不指定,默认的就是master数据源
 */
@DS("master")
public interface DemoMasterMapper extends BaseMapper<Demo> {
}

DemoSalve1Mapper.java

package com.shaoming;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author shaoming
 * @Date: 2021/3/28 15:59
 * @Description:
 */
@Mapper
/**
 * 指定的是slave_1数据源
 */
@DS("slave_1")
public interface DemoSalve1Mapper extends BaseMapper<Demo> {
}

DemoSalve2Mapper.java

package com.shaoming;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author shaoming
 * @Date: 2021/3/28 15:59
 * @Description:
 */
@Mapper
 /**
 * 指定的是slave_2数据源
 */
@DS("slave_2")
public interface DemoSalve2Mapper extends BaseMapper<Demo> {
}

4.@DS注解的介绍和使用

@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解

注解结果
没有@DS默认数据源
@DS(“dsName”)dsName可以为组名也可以为具体某个库的名称

5.测试

说明:

使用springboot的测试功能进行测试

package com.shaoming.springbootmpmoredatasource;

import com.shaoming.DemoMasterMapper;
import com.shaoming.DemoSalve1Mapper;
import com.shaoming.DemoSalve2Mapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * @author shaoming
 * @Date: 2021/3/28 16:00
 * @Description:
 */
@SpringBootTest
public class DaoTest {
    @Autowired
    private DemoMasterMapper demoMasterMapper;
    @Autowired
    private DemoSalve1Mapper demoSalve1Mapper;
    @Autowired
    private DemoSalve2Mapper demoSalve2Mapper;

    @Test
    public void testfindall() {
        System.out.println("master数据源查出来的信息");
        System.out.println(demoMasterMapper.selectList(null));
        System.out.println("salve_1数据源查出来的信息");
        System.out.println(demoSalve1Mapper.selectList(null));
        System.out.println("salve_2数据源查出来的信息");
        System.out.println(demoSalve2Mapper.selectList(null));
    }
}

控制台打印:

master数据源查出来的信息
[Demo(id=1, name=数据源master), Demo(id=2, name=数据源master), Demo(id=3, name=数据源master)]
salve_1数据源查出来的信息
[Demo(id=1, name=数据源slave_1), Demo(id=2, name=数据源slave_1), Demo(id=3, name=数据源slave_1)]
salve_2数据源查出来的信息
[Demo(id=1, name=数据源slave_2), Demo(id=2, name=数据源slave_2), Demo(id=3, name=数据源slave_2)]

不指定master数据源进行测试

修改DemoMasterMapper.java内容

package com.shaoming;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * @author shaoming
 * @Date: 2021/3/28 15:59
 * @Description:
 */
@Mapper
/**
 * 指定是master数据源,当然也可以不指定,默认的就是master数据源
 */
//@DS("master")
public interface DemoMasterMapper extends BaseMapper<Demo> {
}

修改的地方

去掉@DS(“master”)

控制台打印:

master数据源查出来的信息
[Demo(id=1, name=数据源master), Demo(id=2, name=数据源master), Demo(id=3, name=数据源master)]
salve_1数据源查出来的信息
[Demo(id=1, name=数据源slave_1), Demo(id=2, name=数据源slave_1), Demo(id=3, name=数据源slave_1)]
salve_2数据源查出来的信息
[Demo(id=1, name=数据源slave_2), Demo(id=2, name=数据源slave_2), Demo(id=3, name=数据源slave_2)]

结论:

如果使用注解指定数据源,默认的就是master数据源

博客推荐

个人csdn博客网址:https://blog.csdn.net/shaoming314

jam

个人博客网址:www.shaoming.club

halo

个人gitee地址:https://gitee.com/shao_ming314/note

111

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值