• Springboot 之 Mybatis-plus 多数据源


    简介

    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.0modelVersion>
    <groupId>com.olivegroupId>
    <artifactId>mybatis-plus-multip-datasourceartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>jarpackaging>
    <name>mybatis-multip-datasourcename>
    <url>http://maven.apache.orgurl>
    <parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.5.14version>
    <relativePath />
    parent>
    <properties>
    <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    <maven.compiler.source>8maven.compiler.source>
    <maven.compiler.target>8maven.compiler.target>
    properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-testartifactId>
    <scope>testscope>
    dependency>
    <dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    dependency>
    <dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    dependency>
    <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
    <groupId>com.baomidougroupId>
    <artifactId>dynamic-datasource-spring-boot-starterartifactId>
    <version>3.5.2version>
    dependency>
    <dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.5.2version>
    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 {
    }

    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 {
    }

    TeacherService接口

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

    再定义接口的实现类

    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, 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, 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);
    }
    }
  • 相关阅读:
    2020年数维杯数学建模B题以家庭为单位的小规模多品种绿色农畜产品经营模式开发求解全过程文档及程序
    机器视觉知识讲的深不如讲的透
    无聊的一篇博客(如何通过路由器登陆页对固定机器进行网速干扰,如何帮熊孩子戒网瘾)
    【响应式布局】使用 flexbox 实现简单响应式布局
    KubeGems 启用 Nacos 配置中心
    【ubuntu 常用命令】如何在 ubuntu bash 命令行中查看显存、硬盘内存,以及文件大小
    xv6 进程切换中的锁:MIT6.s081/6.828 lectrue12:Coordination 以及 Lab6 Thread 心得
    瑞吉外卖 —— 10、Redis
    算法基础:贪心策略
    基于微信小程序的电影院订票选座系统的设计与实现(2)
  • 原文地址:https://www.cnblogs.com/happyhuangjinjin/p/16755266.html