简介

Mybatis-puls 多数据源的使用,采用的是官方提供的dynamic-datasource-spring-boot-starter包的 @DS 注解,具体可以参考官网:

https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter

pom.xml文件引入如下依赖

主要引入dynamic-datasource-spring-boot-starter

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.olive</groupId>
<artifactId>mybatis-plus-multip-datasource</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>mybatis-multip-datasource</name>
<url>http://maven.apache.org</url> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.14</version>
<relativePath /> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
</project>

配置两个数据源

分别为第一个主数据源(primary),第二数据源(slave_1),具体配置如下:

# 基本配置
server:
port: 8080 # 数据库
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:mysql://127.0.0.1:3306/db01?characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
slave_1:
url: jdbc:mysql://127.0.0.1:3306/crm72?characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus:
mapper-locations: mapper/*.xml
type-aliases-package: com.olive.entity
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl jackson:
serialization:
indent-output: true

创建学生与老师实体类

学生实体类

package com.olive.entity;

import java.io.Serializable;

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.Data; @TableName("t_student")
@Data
public class StudentDO implements Serializable{ @TableId(value="id", type = IdType.AUTO)
private Long id; @TableField("user_name")
private String name; @TableField("sex")
private int sex; @TableField("grade")
private String grade;
}

老师实体类

package com.olive.entity;

import java.io.Serializable;

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.Data; @Data
@TableName("t_teacher")
public class TeacherDO implements Serializable { @TableId(value = "id", type = IdType.AUTO) private Long id; @TableField("user_name")
private String name; @TableField("sex")
private int sex; @TableField("office")
private String office;
}

数据库持久类

StudentMapper持久类

package com.olive.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.olive.entity.StudentDO;
import org.apache.ibatis.annotations.Mapper; @Mapper
public interface StudentMapper extends BaseMapper<StudentDO> { }

TeacherMapper持久类

package com.olive.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.olive.entity.TeacherDO;
import org.apache.ibatis.annotations.Mapper; @DS("slave_1")
@Mapper
public interface TeacherMapper extends BaseMapper<TeacherDO> { }

以上,两个持久类的实现都是继承BaseMapper基类,该类提供了基本的增删改查的方法;要注意的是,TeacherMapper 类使用了@DS("slave_1")指定了数据源;而StudentMapper没有指定,使用的是默认的数据源。

服务类的实现

先定义操作学生和老师的两个接口

StudentService接口

package com.olive.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.olive.entity.StudentDO; public interface StudentService extends IService<StudentDO> {
}

TeacherService接口

package com.olive.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.olive.entity.TeacherDO; public interface TeacherService extends IService<TeacherDO> {
}

再定义接口的实现类

StudentServiceImpl类

package com.olive.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.olive.entity.StudentDO;
import com.olive.mapper.StudentMapper;
import com.olive.service.StudentService;
import org.springframework.stereotype.Service; @Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, StudentDO>
implements StudentService {
}

TeacherServiceImpl类

package com.olive.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.olive.entity.TeacherDO;
import com.olive.mapper.TeacherMapper;
import com.olive.service.TeacherService;
import org.springframework.stereotype.Service; @Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, TeacherDO>
implements TeacherService { }

观察接口定义和接口实现,套路非常标准。都是实现和继承Mybatis-Plus提供的标准接口和基类

创建springboot引导类

package com.olive;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.olive.mapper")
@SpringBootApplication
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class);
} }

测试

package com.olive;

import com.olive.service.StudentService;
import com.olive.service.TeacherService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import com.olive.entity.StudentDO;
import com.olive.entity.TeacherDO; @SpringBootTest
public class MybatisPlusTest { @Autowired
StudentService studentService; @Autowired
TeacherService teacherService; @Test
public void userSave() {
StudentDO studentDO = new StudentDO();
studentDO.setName("BUG弄潮儿");
studentDO.setSex(1);
studentDO.setGrade("一年级");
studentService.save(studentDO); TeacherDO teacherDO = new TeacherDO();
teacherDO.setName("Java乐园");
teacherDO.setSex(2);
teacherDO.setOffice("语文");
teacherService.save(teacherDO);
}
}

Springboot 之 Mybatis-plus 多数据源的更多相关文章

  1. SpringBoot集成Mybatis配置动态数据源

    很多人在项目里边都会用到多个数据源,下面记录一次SpringBoot集成Mybatis配置多数据源的过程. pom.xml <?xml version="1.0" encod ...

  2. springboot入门系列(四):SpringBoot和Mybatis配置多数据源连接多个数据库

    SpringBoot和Mybatis配置多数据源连接多个数据库 目前业界操作数据库的框架一般是 Mybatis,但在很多业务场景下,我们需要在一个工程里配置多个数据源来实现业务逻辑.在SpringBo ...

  3. springboot和mybatis 配置多数据源

    主数据源(由于代码没有办法复制的原因,下面图片和文字不一致) package com.zhianchen.mysqlremark.toword.config;import com.zaxxer.hik ...

  4. springboot整合mybatis的多数据源解决办法

    最近项目有一个非解决不可的问题,我们的项目中的用户表是用的自己库的数据,但是这些数据都是从一个已有库中迁过来的,所以用户信息都是在那个项目里面维护,自然而然我们项目不提供用户注册功能,这就有个问题,如 ...

  5. SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案

    背景 之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子.方便他们写抽取的代码.今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题.想了一下,应该是写动态数据源的 ...

  6. SpringBoot 集成 Mybatis 使用 Druid数据源 MySQL数据库

    思路: 1.创建项目 项目结构如下: 2.导入相应包 POM.xml文件如下: <?xml version="1.0" encoding="UTF-8"? ...

  7. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  8. SpringBoot+MyBatis配置多数据源

    SpringBoot 可以支持多数据源,这是一个非常值得学习的功能,但是从现在主流的微服务的架构模式中,每个应用都具有唯一且准确的功能,多数据源的需求很难用到,考虑到实际情况远远比理论复杂的多,这里还 ...

  9. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

  10. SpringBoot整合Mybatis多数据源 (AOP+注解)

    SpringBoot整合Mybatis多数据源 (AOP+注解) 1.pom.xml文件(开发用的JDK 10) <?xml version="1.0" encoding=& ...

随机推荐

  1. 【做题笔记】CF Edu Round 132

    1. 前言 本人第一次把 Div2. D 切了,开心. C 不会,寄. 后来在场外想到一种奇怪做法 AC 了. 2. 正文(A-D) CF 比赛链接 A. Three Doors 签到题.循环查找手中 ...

  2. 【人工智能】【Python】Matplotlib基础

    Maplotlib 本文档由萌狼蓝天写于2022年7月24日 目录 Maplotlib (一)Matplotlib三层结构 (二)画布创建.图像绘制.图像显示 (三)图像画布设置.图像保存 (四)自定 ...

  3. SQL语言的总结

    SQL语言分类:1.数据查询语言(DQL:Data Query Language),也称为"数据检索语句",用以从表中查询获得数据,常用关键字SELECT (一般常用的语句是:SE ...

  4. 从零开始Blazor Server(8)--增加菜单以及调整位置

    这篇干啥 这篇文章主要是把前面的一些东西稍微调整一下,使其更适合后面的内容. 主要是两个事,一个是把原来的PermissionEntity直接变成MenuEntity,直接让最后一级是菜单,这样后面就 ...

  5. 2022,我们继续探索开源 New Style!

  6. LuoguP2523 [HAOI2011]Problem c(概率DP)

    傻逼概率\(DP\),熊大坐这,熊二坐这,两熊体积从右往左挤,挤到\(FFF\)没座位了就不合理了 否则就向左歇斯底里爬,每个\(FFF\)编号就组合一下,完闭 #include <iostre ...

  7. Luogu1879 [USACO06NOV]玉米田Corn Fields (状压DP)

    曾经放弃的坑,都是坑 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  8. DS二叉树——二叉树之数组存储

    题目描述 二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示.,如下图所示 从上图可以看出 ...

  9. Java注解最全详解(超级详细)

    Java注解是一个很重要的知识点,掌握好Java注解有利于学习Java开发框架底层实现.@mikechen Java注解定义 Java注解又称Java标注,是在 JDK5 时引入的新特性,注解(也被称 ...

  10. mybatis 13: 一对多关联查询

    业务背景 根据客户id查询客户基本信息,以及客户存在的订单信息 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer id; private String ...