文章目录

  • 一、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

SpringBoot2.0整合Mybatis-Plus多数据源相关推荐

  1. SpringBoot2.0应用(五):SpringBoot2.0整合MyBatis

    如何整合MyBatis 1.pom依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><arti ...

  2. 【夏目鬼鬼分享】SpringBoot2.0整合mybatis

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  3. SpringBoot2.0整合多数据源拆分

    前言 本文环境承接springboot2.0整合使用mybatis(数据访问篇) 一.什么是多数据源 公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库垂直业务数据库.垂直根据业务划分具体 ...

  4. SpringBoot2x整合Mybatis(多数据源)

    SpringBoot2x整合Mybatis(多数据源)现在基本上都有各大项目必须的配置,一个项目需要多个数据源进行操作多个数据库,下面以三数据源为例,如果有更多数据源直接照着弄即可. 1.pom依赖 ...

  5. SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题

    SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...

  6. SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用

    一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层 ...

  7. SpringBoot2.0 整合 Redis集群 ,实现消息队列场景

    本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 一.Redis集群简介 1.RedisCluster概念 Re ...

  8. SpringBoot2.0 整合 QuartJob ,实现定时器实时管理

    一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...

  9. SpringBoot2.0 整合 Swagger2 ,构建接口管理界面

    一.Swagger2简介 1.Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档.省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试 ...

  10. SpringBoot2.0整合SpringCache和Redis(lettuce)攻略

    Redis Redis 是一个高性能的key-value数据库,广泛应用于互联网业务的缓存,如token池,商品缓存等等热点数据的缓存. linux原版官方地址 http://redis.io win ...

最新文章

  1. MySQL 索引方式
  2. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.6 将吉他谱伴奏,转换成MIDI音乐伴奏...
  3. python 定时器_python 线程之四:定时器(Timer),非阻塞
  4. 作者:徐晔(1964-),男,博士,中国科学院云计算产业技术创新与育成中心公共安全研究院研究员、院长。...
  5. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)
  6. ES(Elasticsearch)更改字段索引
  7. iOS 开发技巧(一)
  8. 偷窥JCache API(JSR 107)
  9. 电商小程序如何实现分账?
  10. 深度学习 | 《深度学习》“花书”知识点笔记
  11. 大麦网抢票python代码_damai_ticket
  12. 密码学RSA解密之Pollard_rho分解
  13. mac下keytool 错误: java.lang.Exception: 密钥库文件不存在
  14. 每日小技巧,用python给喜欢的主播自动发弹幕
  15. 黄芪桂圆枸杞红枣茶的作用
  16. 物联网安全研究之二:IoT系统攻击面定义分析
  17. URL地址中的%2F、%3F、%3D、%3A是什么意思
  18. 我的C++回调函数的理解
  19. js之一个有意思的逻辑题
  20. 索尼计划把区块链用于数字版权数据

热门文章

  1. 《世界已无法阻挡Python入侵!》(附学习资源)
  2. 延长天文学家寿命的发现——纳皮尔发现对数
  3. 汉诺塔java程序_Java编写一个汉诺塔的过程
  4. java http 异步请求框架_GitHub - huangdali/MyHttpUtils: 一个非常好用的异步网络请求框架...
  5. ear的英语怎么念_ear英语怎么读
  6. 如何基于Dataphin实现敏感数据保护
  7. 案例|自建or现成工具?小型创业团队敏捷研发探索
  8. 中国数据库OceanBase登顶之路
  9. 2018最有用的六个机器学习项目
  10. 阿里云 x 蒙牛 | 打通数据孤岛,基于MaxCompute实现产销协同的智慧运营