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
SpringBoot2.0整合Mybatis-Plus多数据源相关推荐
- SpringBoot2.0应用(五):SpringBoot2.0整合MyBatis
如何整合MyBatis 1.pom依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><arti ...
- 【夏目鬼鬼分享】SpringBoot2.0整合mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- SpringBoot2.0整合多数据源拆分
前言 本文环境承接springboot2.0整合使用mybatis(数据访问篇) 一.什么是多数据源 公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库垂直业务数据库.垂直根据业务划分具体 ...
- SpringBoot2x整合Mybatis(多数据源)
SpringBoot2x整合Mybatis(多数据源)现在基本上都有各大项目必须的配置,一个项目需要多个数据源进行操作多个数据库,下面以三数据源为例,如果有更多数据源直接照着弄即可. 1.pom依赖 ...
- SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题
SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...
- SpringBoot2.0 整合 Dubbo框架 ,实现RPC服务远程调用
一.Dubbo框架简介 1.框架依赖 图例说明: 1)图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层 ...
- SpringBoot2.0 整合 Redis集群 ,实现消息队列场景
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/middle-ware-parent 一.Redis集群简介 1.RedisCluster概念 Re ...
- SpringBoot2.0 整合 QuartJob ,实现定时器实时管理
一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...
- SpringBoot2.0 整合 Swagger2 ,构建接口管理界面
一.Swagger2简介 1.Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档.省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试 ...
- SpringBoot2.0整合SpringCache和Redis(lettuce)攻略
Redis Redis 是一个高性能的key-value数据库,广泛应用于互联网业务的缓存,如token池,商品缓存等等热点数据的缓存. linux原版官方地址 http://redis.io win ...
最新文章
- MySQL 索引方式
- 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——1.6 将吉他谱伴奏,转换成MIDI音乐伴奏...
- python 定时器_python 线程之四:定时器(Timer),非阻塞
- 作者:徐晔(1964-),男,博士,中国科学院云计算产业技术创新与育成中心公共安全研究院研究员、院长。...
- linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)
- ES(Elasticsearch)更改字段索引
- iOS 开发技巧(一)
- 偷窥JCache API(JSR 107)
- 电商小程序如何实现分账?
- 深度学习 | 《深度学习》“花书”知识点笔记
- 大麦网抢票python代码_damai_ticket
- 密码学RSA解密之Pollard_rho分解
- mac下keytool 错误: java.lang.Exception: 密钥库文件不存在
- 每日小技巧,用python给喜欢的主播自动发弹幕
- 黄芪桂圆枸杞红枣茶的作用
- 物联网安全研究之二:IoT系统攻击面定义分析
- URL地址中的%2F、%3F、%3D、%3A是什么意思
- 我的C++回调函数的理解
- js之一个有意思的逻辑题
- 索尼计划把区块链用于数字版权数据
热门文章
- 《世界已无法阻挡Python入侵!》(附学习资源)
- 延长天文学家寿命的发现——纳皮尔发现对数
- 汉诺塔java程序_Java编写一个汉诺塔的过程
- java http 异步请求框架_GitHub - huangdali/MyHttpUtils: 一个非常好用的异步网络请求框架...
- ear的英语怎么念_ear英语怎么读
- 如何基于Dataphin实现敏感数据保护
- 案例|自建or现成工具?小型创业团队敏捷研发探索
- 中国数据库OceanBase登顶之路
- 2018最有用的六个机器学习项目
- 阿里云 x 蒙牛 | 打通数据孤岛,基于MaxCompute实现产销协同的智慧运营