SpringBoot2.0整合Mybatis-Plus多数据源

文章目录

    • 一、pom依赖
    • 二、application.yml多数据源配置
    • 三、持久层
      • 3.1. UserMapper 接口
      • 3.2. 接口映射UserMapper.xml(可以不写)
    • 四、逻辑处理层
      • 4.1. IUserService 接口
      • 4.2. 接口实现类IUserServiceImpl
    • 五、通用返回对象封装
    • 六、测试UserController
    • 七、启动类加扫描mapper注解
    • 八、数据库脚本
      • 8.1. masterdb.sql
      • 8.2. slavedb.sql
    • 九、测试验证
      • 9.1. 主库新增用户
      • 9.2. 从库新增用户
      • 9.3. 获取主库用户列表
      • 9.4. 获取从库用户列表
      • 9.5.

一、pom依赖

需要引入与SpringBoot整合好的动态数据源依赖,以及mybatis-plus相关依赖包

       <!--SpringBoot mvc启动器--><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>${dynamic-datasource.version}</version></dependency><!--lombok 简化java代码--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><!-- Spring Boot Mybatis plus 依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency><!--Mysql数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version><scope>runtime</scope></dependency><!--单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>

二、application.yml多数据源配置

直接复制到你的项目中即可,通过primary来指定默认数据源,配置如下:

server:port: 80# 数据源配置
spring:datasource:dynamic:primary: master   #设置默认的数据源datasource:master:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8driver-class-name: com.mysql.cj.jdbc.Driver# 从数据源配置slave:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8driver-class-name: com.mysql.cj.jdbc.Drivermp-enabled: true# 数据源加载日志
logging:level:com.xkcoding.multi.datasource.mybatis: debug

三、持久层

3.1. UserMapper 接口

public interface UserMapper extends BaseMapper<User> {
}

3.2. 接口映射UserMapper.xml(可以不写)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gblfy.springboot.mybatisplus.entity.User">
</mapper>

四、逻辑处理层

4.1. IUserService 接口

import com.baomidou.mybatisplus.extension.service.IService;
import com.gblfy.springboot.mybatisplus.entity.User;import java.util.List;public interface IUserService extends IService<User> {/*** 往从库中插入数据** @param user*/Integer addUserToSlave(User user);/*** 主库插入** @param user*/Integer addUserToMaster(User user);/*** 获取主库用户列表** @return*/List<User> findMasterUserList();/*** 获取从库用户列表** @return*/List<User> findSlaveUserList();
}

4.2. 接口实现类IUserServiceImpl

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gblfy.springboot.mybatisplus.entity.User;
import com.gblfy.springboot.mybatisplus.mapper.UserMapper;
import com.gblfy.springboot.mybatisplus.service.IUserService;
import org.springframework.stereotype.Service;import java.util.List;/*** @author gblfy* @ClassNme IUserServiceImpl* @Description TODO* @Date 2019/12/8 10:21* @version1.0*/
@Service
@DS("master")
public class IUserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {@DS("slave")@Overridepublic Integer addUserToSlave(User user) {return null;}@Overridepublic Integer addUserToMaster(User user) {return null;}@Overridepublic List<User> findMasterUserList() {return null;}@DS("slave")@Overridepublic List<User> findSlaveUserList() {return null;}
}

五、通用返回对象封装

/*** 公共返回实体类*/
@Data
public class ResultObject {/*** 可为数组或字符串等,可记录错误信息或正常返回的相关信息*/private Object message;/*** 返回码  200代表正常  1代表失败*/private int code;private Object result;}

六、测试UserController

import com.gblfy.springboot.mybatisplus.entity.User;
import com.gblfy.springboot.mybatisplus.service.IUserService;
import com.gblfy.springboot.mybatisplus.utils.ResultObject;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author: gblfy* @desc: 用户控制层* @date: 2019/12/8 10:25*/
@RestController
@RequestMapping("/user")
@Data
public class UserController {@Autowiredprivate IUserService userService;/*** 主库新增用户* @param user* @return*/@GetMapping("addUserToMaster")public Object addUserToMaster(User user){ResultObject resultObject = new ResultObject();try {User userMaster = User.builder().name(user.getName()).age(user.getAge()).email(user.getEmail()).build();resultObject.setResult(userService.addUserToMaster(userMaster));resultObject.setCode(200);resultObject.setMessage("主库新增用户成功");} catch (Exception e) {resultObject.setCode(-1);resultObject.setMessage("主库新增用户失败");e.printStackTrace();}return resultObject;}/*** 从库新增用户* @param user* @return*/@GetMapping("addUserToSlave")public Object addUserToSlave(User user){ResultObject resultObject = new ResultObject();try {User userSlave = User.builder().name(user.getName()).age(user.getAge()).email(user.getEmail()).build();resultObject.setResult(userService.addUserToSlave(userSlave));resultObject.setCode(200);resultObject.setMessage("从库新增用户成功");} catch (Exception e) {resultObject.setCode(-1);resultObject.setMessage("从库新增用户失败");e.printStackTrace();}return resultObject;}/*** 获取主库用户列表* @return*/@RequestMapping("findMasterUserList")public Object findMasterUserList(){ResultObject resultObject = new ResultObject();try {resultObject.setResult(userService.findMasterUserList());resultObject.setCode(200);resultObject.setMessage("获取主库用户列表成功");} catch (Exception e) {resultObject.setCode(-1);resultObject.setMessage("获取主库用户列表失败");e.printStackTrace();}return resultObject;}/*** 获取从库用户列表* @return*/@RequestMapping("findSlaveUserList")public Object findSlaveUserList(){ResultObject resultObject = new ResultObject();try {resultObject.setResult(userService.findSlaveUserList());resultObject.setCode(200);resultObject.setMessage("获取从库用户列表成功");} catch (Exception e) {resultObject.setCode(-1);resultObject.setMessage("获取从库用户列表失败");e.printStackTrace();}return resultObject;}
}

七、启动类加扫描mapper注解

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan(basePackages = "com.gblfy.springboot.mybatisplus.mapper")
public class SpringbootApplication {public static void main(String[] args) {SpringApplication.run(SpringbootApplication.class, args);}
}

八、数据库脚本

8.1. masterdb.sql

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',create_time DATETIME DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (id)
);DELETE FROM user;INSERT INTO user (id, name, age, email, create_time) VALUES
(1, 'Jone', 18, 'test1@gblfy.com','2019-01-11 14:20:20'),
(2, 'Jack', 20, 'test2@gblfy.com','2019-02-05 11:12:22'),
(3, 'Tom', 28, 'test3@gblfy.com','2019-02-14 08:31:16'),
(4, 'Sandy', 21, 'test4@gblfy.com','2019-01-14 09:15:15'),
(5, 'Billie', 24, 'test5@gblfy.com','2019-01-14 09:48:16');

8.2. slavedb.sql

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',create_time DATETIME DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (id)
);DELETE FROM user;INSERT INTO user (id, name, age, email, create_time) VALUES
(1, 'Jone2', 18, 'test1@gblfy.com','2019-01-11 14:20:20'),
(2, 'Jack2', 20, 'test2@gblfy.com','2019-02-05 11:12:22'),
(3, 'Tom2', 28, 'test3@gblfy.com','2019-02-14 08:31:16'),
(4, 'Sandy2', 21, 'test4@gblfy.com','2019-01-14 09:15:15'),
(5, 'Billie2', 24, 'test5@gblfy.com','2019-01-14 09:48:16');

九、测试验证

9.1. 主库新增用户

http://localhost/user/addUserToMaster?name=gblfy&age=66&email=gbly02@gmail.com

在这里插入图片描述

9.2. 从库新增用户

http://localhost/user/addUserToSlave?name=gblfy02&age=66&email=gbly02@gmail.com

在这里插入图片描述

9.3. 获取主库用户列表

http://localhost/user/findMasterUserList

在这里插入图片描述

9.4. 获取从库用户列表

http://localhost/user/findSlaveUserList

在这里插入图片描述

9.5.

http://localhost/user/addUserToMaster?name=gblfy&age=66&email=gbly02@gmail.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度积极回应阿波龙项目不实报道;半数开发者认为学习新语言很困难;腾讯在长沙建立首个智慧产业总部……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 惠普在其官网上公布了即将发…

精打细算使用MaxCompute搭建数仓

摘要&#xff1a; MaxCompute是一套阿里自主研发的数据仓库解决方案。产品除了功能、性能、简单等优势外&#xff0c;还能在费用上节省下一大笔前。墨迹天气使用MaxCompute&#xff0c;除了性能和稳定性也有提升外&#xff0c;整体存储和计算的费用比之前节省70%。这是如何做到…

计算机知识产权 教学目标,计算机教学设计模板

计算机教学设计模板计算机是现今学生们学习的一个重点&#xff0c;那么关于计算机的教学设计又应该怎么进行呢?下面就随小编一起去阅读计算机教学设计模板&#xff0c;相信能带给大家启发。第一篇&#xff1a;计算机教学设计模板【学习目标】了解计算机网络的发展&#xff0c;…

linux 环境 安装nginx

文章目录一、Nginx简介&#xff1a;1.1 Nginx是什么&#xff1f;1.2 能干什么&#xff1f;1.3 有什么特点&#xff1f;二、Nginx安装依赖环境2.1 安装gcc2.2 安装pcre2.3 安装zlib2.4 安装openssl2.5 综合命令安装(一步到位)三、下载/解压/安装NGINX3.1 在线下载nginx3.2 解压n…

行!这下 CSDN 玩大了!粉丝:太良心

CSDN从建立之初&#xff0c;我们的初心就是为了帮助广大开发者解决技术问题&#xff0c;成为大家最喜爱的技术社区。今年是CSDN的20周年&#xff0c;我们也为大家准备了一份良心礼物&#xff0c;可谓吐血操作。我们与AI博士唐宇迪 / Oracle认证讲师等4位讲师&#xff0c;共同为…

markdown html vue,vue项目引入markdown

npm install showdown接下来是用法&#xff1a;export default {data () {return {content:,converter:null}},watch:{content:contentChanged},mounted(){ this.init(); },methods: {init(){var showdown require(showdown);var converter new showdown.Converter();this.co…

厉害了!阿里安全图灵实验室在ICDAR2017 MLT竞赛刷新世界最好成绩

摘要&#xff1a; 近日&#xff0c;阿里安全图灵实验室&#xff08;Alibaba Turing Lab&#xff09;的ATL Cangjie OCR算法在ICDAR2017的MLT&#xff08;Competition on Multi-lingual scene text detection&#xff09;自然场景多语言文本检测竞赛中刷新了世界最好成绩&#x…

Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

有的人可能会觉得题目有点夸张&#xff0c;其实不夸张&#xff0c;题目没有使用任何修辞手法&#xff01;认真读完本文&#xff0c;你就知道gblfy说的是对的了&#xff01; 文章目录一、背景二、分析思路三、实战1. 创建工程2. pom.xml3. redis配置4. 使用5. 项目打包6. 启动项…

孩子学计算机最佳年龄,孩子学编程最佳年龄是几岁

孩子学编程最佳年龄是几岁2021-01-18 16:58:11文/董玉莹孩子学习编程的最好是几岁&#xff1f;本文整理了相关内容&#xff0c;欢迎阅读。孩子学习编程的最好是几岁6-18岁&#xff01;从国内外的典型案例来看6-18岁是孩子学习“编程”的最佳时机&#xff0c;这个阶段的孩子左右…

python画两条曲线_python – 在Matplotlib中绘制两个图之间的线

在许多情况下,来自其他答案的解决方案是次优的(因为只有在计算点之后没有对图进行任何更改时它们才有效). 更好的解决方案是使用专门设计的ConnectionPatch&#xff1a; import matplotlib.pyplot as plt from matplotlib.patches import ConnectionPatch import numpy as np f…

5G基站功耗,到底有多大?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君来源 | 鲜枣课堂前不久&#xff0c;从某运营商流出的一张图&#xff0c;在小枣君的朋友圈里被广泛传播。就是这张&#xff08;点击可看放大观看&#xff09;&#xff1a;图中显示的&#xff0c;是该运营商在广州、深圳…

“前端+应用”两大监控利器商业化首发 ARMS领跑APM市场

摘要&#xff1a; 日前&#xff0c;阿里巴巴中间件&#xff08;Aliware&#xff09;旗下产品业务实时监控服务ARMS正式商用。首发商用的ARMS目前涵盖应用监控和前端监控两大功能。由此&#xff0c;ARMS的商业化正式填补了阿里云在APM(Application Performance Management)领域空…

Spring Boot2 整合 Shiro ,两种方式全总结!

前言:在 Spring Boot 中做权限管理&#xff0c;一般来说&#xff0c;主流的方案是 Spring Security &#xff0c;但是&#xff0c;仅仅从技术角度来说&#xff0c;也可以使用 Shiro。 文章目录一、Spring Security 和 Shiro 的比较二、原生的整合2.1. 创建一个 Spring Boot 项目…

html5 coverflow,使用FancyCoverFlow实现3D无限循环切换视图

FancyCoverFlow重写了gallery实现了画廊特效。这里记录下具体的使用方法&#xff1a;1 在布局文件中添加控件android:id"id/fancy_cover"android:layout_width"match_parent"android:layout_height"wrap_content"android:layout_marginTop"…

5G精华问答 | 5G关键技术解读

5G的概念虽然很早就已经提出&#xff0c;但是对于大多数用户来说&#xff0c;真正听到并且对5G有了初步的了解还是在今年。今天就让我们来看看关于5G的精华问答吧。1Q&#xff1a;5G标准是怎么来的&#xff0c;由谁制定的&#xff1f;A&#xff1a;5G是由“第三代合作伙伴计划组…

关于python的保留字_Python中的保留字

原博文 2020-01-29 20:03 − Python 包含的保留字可以执行如下命令进行查看&#xff1a; →import keyword →keyword.kwlist [False, None, True, and, as, assert, break, class, continue, d...01000 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的计算机程序设…

Spring Boot2 整合 Ehcache

用惯了 Redis &#xff0c;很多人已经忘记了还有另一个缓存方案 Ehcache &#xff0c;是的&#xff0c;在 Redis 一统江湖的时代&#xff0c;Ehcache 渐渐有点没落了&#xff0c;不过&#xff0c;我们还是有必要了解下 Ehcache &#xff0c;在有的场景下&#xff0c;我们还是会…

传奇谢幕,回顾霍金76载传奇人生

摘要&#xff1a; 根据外媒报道&#xff0c;著名物理学家斯蒂芬威廉霍金&#xff08;Stephen William Hawking&#xff09;去世&#xff0c;享年76岁&#xff0c;霍金的家人已经确认了这一消息。 原文地址&#xff1a;http://click.aliyun.com/m/43771/ “在爱因斯坦生日这天&a…

数据中台与苏秦挂六国相印

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 一一来源 | 边缘计算社区阅读本文前先思考一个问题&#xff1a;数据中台如何创造更多价值&#xff1f;1梁宁看中台——什么是数据中台梁宁老师是阿里巴巴的湖畔大学产品模块学术主任、百度集团顾问。有人问梁宁&#xff0c;中…

python中函数定义_Python中函数的定义与使用

原博文 2020-02-27 16:46 − 一、函数基本定义 定义函数的目的是为了让一段代码可以被重复使用 函数定义的语法&#xff1a; def 函数名([参数&#xff0c;参数.....]): 函数主体代码(多行代码) [return [返回值]]注&#xff1a;函数中的函数体都通过缩进来定义 实例一&#xf…