Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源

关于Spring Boot 专栏收录该内容
176 篇文章 596 订阅

关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置。

其实关于多数据源,我的态度还是和之前一样,复杂的就直接上分布式数据库中间件,简单的再考虑多数据源。这是项目中的建议,技术上的话,当然还是各种技术都要掌握的。

工程创建

首先需要创建 MyBatis 项目,项目创建和前文的一样,添加 MyBatis、 MySQL 以及 Web 依赖:

在这里插入图片描述

项目创建完成后,添加 Druid 依赖,和 JdbcTemplate 一样,这里添加 Druid 依赖也必须是专为 Spring Boot 打造的 Druid,不能使用传统的 Druid。完整的依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.28</version>
    <scope>runtime</scope>
</dependency>

多数据源配置

接下来配置多数据源,这里基本上还是和 JdbcTemplate 多数据源的配置方式一致,首先在 application.properties 中配置数据库基本信息,然后提供两个 DataSource 即可,这里我再把代码贴出来,里边的道理条条框框的,大伙可以参考前面的文章,这里不再赘述。

application.properties 中的配置:

spring.datasource.one.url=jdbc:mysql:///test01?useUnicode=true&characterEncoding=utf-8
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.two.url=jdbc:mysql:///test02?useUnicode=true&characterEncoding=utf-8
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

然后再提供两个 DataSource,如下:

@Configuration
public class DataSourceConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    DataSource dsOne() {
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.two")
    DataSource dsTwo() {
        return DruidDataSourceBuilder.create().build();
    }
}

MyBatis 配置

接下来则是 MyBatis 的配置,不同于 JdbcTemplate,MyBatis 的配置要稍微麻烦一些,因为要提供两个 Bean,因此这里两个数据源我将在两个类中分开来配置,首先来看第一个数据源的配置:

@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {
    @Resource(name = "dsOne")
    DataSource dsOne;

    @Bean
    SqlSessionFactory sqlSessionFactory1() {
        SqlSessionFactory sessionFactory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dsOne);
            sessionFactory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sessionFactory;
    }
    @Bean
    SqlSessionTemplate sqlSessionTemplate1() {
        return new SqlSessionTemplate(sqlSessionFactory1());
    }
}

创建 MyBatisConfigOne 类,首先指明该类是一个配置类,配置类中要扫描的包是 org.javaboy.mybatis.mapper1 ,即该包下的 Mapper 接口将操作 dsOne 中的数据,对应的 SqlSessionFactory 和 SqlSessionTemplate 分别是 sqlSessionFactory1 和 sqlSessionTemplate1,在 MyBatisConfigOne 内部,分别提供 SqlSessionFactory 和 SqlSessionTemplate 即可, SqlSessionFactory 根据 dsOne 创建,然后再根据创建好的SqlSessionFactory 创建一个 SqlSessionTemplate。

这里配置完成后,依据这个配置,再来配置第二个数据源即可:

@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactory2",sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {
    @Resource(name = "dsTwo")
    DataSource dsTwo;

    @Bean
    SqlSessionFactory sqlSessionFactory2() {
        SqlSessionFactory sessionFactory = null;
        try {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dsTwo);
            sessionFactory = bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sessionFactory;
    }
    @Bean
    SqlSessionTemplate sqlSessionTemplate2() {
        return new SqlSessionTemplate(sqlSessionFactory2());
    }
}

好了,这样 MyBatis 多数据源基本上就配置好了,接下来只需要在 org.javaboy.mybatis.mapper1 和 org.javaboy.mybatis.mapper2 包中提供不同的 Mapper,Service 中注入不同的 Mapper 就可以操作不同的数据源。

mapper 创建

org.javaboy.mybatis.mapper1 中的 mapper:

public interface UserMapperOne {
    List<User> getAllUser();
}

对应的 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="org.javaboy.mybatis.mapper1.UserMapperOne">
    <select id="getAllUser" resultType="org.javaboy.mybatis.model.User">
        select * from t_user;
    </select>
</mapper>

org.javaboy.mybatis.mapper2 中的 mapper:

public interface UserMapper {
    List<User> getAllUser();
}

对应的 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="org.javaboy.mybatis.mapper2.UserMapper">
    <select id="getAllUser" resultType="org.javaboy.mybatis.model.User">
        select * from t_user;
    </select>
</mapper>

接下来,在 Service 中注入两个不同的 Mapper,不同的 Mapper 将操作不同的数据源。

好了,关于 MyBatis 多数据源本文就先说到这里。

重磅

今年 5 月份的时候,松哥发了一个视频资源库,当时和大家说,这个资源库会定期更新,后来却迟迟未更新,其实不是我没资源了,是因为当时的关键字是我一个一个在微信后台配置的,配置到后面发现,后台配置关键字有数量上限,没法继续配置了,所以这事就搁置下来了。

九月份松哥上线了自己的服务,和微信的后台对接起来,具体实现大家可以参考这两篇文章:

现在再配置关键字就没有限制了。于是最近抽空把资源更新了一波,废话不多说,大家在公众号【江南一点雨】后台回复相应的口令,就可以获取相应的视频下载地址。

Java 基础

资源名称口令
Java 基础语法javaboy4096
Java 面向对象javaboy6148
JavaSE 飞机大战项目javaboy2053
深入面向对象和数组javaboy8200
Java 常用类详解javaboy4105
Java 异常机制解析javaboy6157
Java 集合与数据结构javaboy2062
JavaIO 流全解析javaboy8209
深入理解 Java 多线程javaboy4114
Java 网络编程javaboy6166
手动开发一个 Web 服务器javaboy2071
深入理解 Java 注解+反射javaboy8218
Java23 种设计模式javaboy4123
学会 Java 正则表达式javaboy6175
JDBC 详解javaboy2080
独立开发 SORM 框架javaboy8227
快人一步,Java10 新特性全解析javaboy4132
Java 数据结构和算法javaboy6184
深入理解 Java 虚拟机javaboy2089
Java 解析XML文件javaboy8236

数据库

资源名称口令
Oracle 数据库安装及简单 SQLjavaboy4141
Oracle 账户管理及查询语句javaboy6193
Oracle 中的函数javaboy2098
Oracle 中的子查询javaboy8245
Oracle 中常见的表操作javaboy4150
Oracle 中的数据备份javaboy6202
MySQL 基础javaboy2107
PowerDesigner 教程javaboy8254
JDBC 操作数据库javaboy4159
MySQL 优化javaboy6211
Oracle 高级课程javaboy2116
数据库与 SQL 优化javaboy6283
数据库集群与高并发javaboy2188

Web 基础

资源名称口令
HTML 入门教程javaboy8263
CSS 教程javaboy4168
JavaScript 视频教程javaboy6220
jQuery 视频教程javaboy2125
EasyUI 视频教程javaboy8272
Servlet 基础javaboy4177
Servlet 中的 Request 和 Responsejavaboy6229
Servlet 请求转发与重定向javaboy2134
Session 和 Cookiejavaboy8281
JSP 详解javaboy4186
用户管理系统实战javaboy6238
Ajax 详解javaboy2143
EL 和 JSTLjavaboy8290
过滤器详解javaboy4195
监听器详解javaboy6247
KnockoutJS 实战视频javaboy2152

Java 高级

资源名称口令
IntelliJIDEA 视频教程javaboy4285
Java 高并发秒杀方案javaboy8299
Activiti 工作流实战解析javaboy4204
Java 并发编程与高并发实战javaboy6256
Linux 快速入门javaboy2161
Maven 详解javaboy8308
Git 应用详解javaboy4213
Svn 入门教程javaboy6265
高并发编程与线程池javaboy2170
系统优化与 JVM 调优javaboy8317
Java 编程规范javaboy4222
AIO、BIO、NIO 详解javaboy6274
Netty 高级视频教程javaboy2179
ActiveMQ 消息中间详解javaboy8326
单点登录视频教程javaboy4231
Dubbo 详解javaboy8335
Redis 全解析javaboy4240
VSFTPD+NGINX 视频教程javaboy6292
MyBatis 视频教程javaboy2197
Spring4 视频教程javaboy8344
SpringMVC 视频教程javaboy4249
SSM 框架整合视频教程javaboy6301
RBAC 权限控制视频教程javaboy2206
Hibernate4 视频教程javaboy8353
Jfinal 视频教程javaboy4258
Shiro 视频教程javaboy6310
Solr 视频教程javaboy2215
Struts2 视频教程javaboy8362
Nginx 视频教程javaboy4267
Redis 缓存详解javaboy6319
JVM 虚拟机优化javaboy2224
Zookeeper 详解视频javaboy8371
Linux 基本操作javaboy6328
架构师面试攻略(文档)javaboy2233
架构师面试攻略(视频)javaboy8380
JUC 视频教程javaboy6400
MySQL 高级教程javaboy2305
Java 邮件开发教程javaboy8452
Maven 实战视频javaboy8443
自己 DIY 一个 Tomcatjavaboy4339

大前端

资源名称口令
HTML5 新特性javaboy4276
AngularJS 视频教程javaboy6337
Grunt 视频教程javaboy2242
Gulp 视频教程javaboy8389
Webpack 视频教程javaboy4294
Bootstrap 视频教程javaboy6346
CSS3 视频教程javaboy2251
ES6 视频教程javaboy8398
HTML5 核心技术javaboy4303
HTML5 实战javaboy6355
HTML5 项目实战javaboy2260
JS 模块化视频教程javaboy8407
less 视频教程javaboy4312
NodeJS 视频教程javaboy6364
React 视频教程javaboy2269
Zepto 视频教程javaboy8416
HTML+CSS 实战视频javaboy4321
JavaScript140 集javaboy6373
jQuery 视频教程javaboy2278
JavaScript 高级语法视频教程javaboy8425
Vue 项目实战视频javaboy4330
CSS3 特效实战javaboy6382
HTML5 特效实战javaboy2287
HTML5+Canvas 实现刮刮卡javaboy8434
Gradle 从入门到精通javaboy6391
mpvue 项目实战javaboy2296
Vue 最新最全视频教程javaboy4348

大数据

资源名称口令
Linux 操作系统javaboy4357
Linux 基本命令javaboy6409
Linux 文件安装javaboy2314
Shell 编程javaboy8461
网络基础知识javaboy4366
LVS 集群与高并发javaboy6418
Nginx 和高并发javaboy2323
keepalive 和单点故障javaboy8470
HDFS 分布式文件系统javaboy4375
mapreduce 分布式计算javaboy6427
YARN 资源管理与任务调度javaboy2332
mapreduce 计算案例javaboy8479
HIVE 视频教程javaboy4384
Hbase 数据库详解javaboy6436
zookeeper 协同处理javaboy2341
CDH 使用javaboy8488
HUE 使用javaboy4393
IMPALA 详解javaboy6445
oozie 详解javaboy2350
elasticsearch 详解javaboy8497
Redis 内存数据javaboy4402
Scala 入门javaboy6454
Spark 详解javaboy2359
Spark 高级javaboy8506
Spark-Stream 流式计算javaboy4411
Kafka 分布式消息队列javaboy6463
STORM 流式计算框架javaboy2368
Python 语言基础javaboy8515
回归算法javaboy4420
分类算法、决策树javaboy6472
聚类算法、微博案例javaboy2377
推荐算法javaboy8524
大型电商日志分析(项目实战)javaboy4429
智慧交通(项目实战)javaboy6481
智能 App(项目实战)javaboy2386

人工智能

资源名称口令
人工智能入门javaboy8533
线性回归深入与代码实现javaboy4438
梯度下降算发实现javaboy6490
逻辑回归详解和应用javaboy2395
分类项目案例与神经网络算法javaboy8542
多分类、决策树分类与随机森林分类javaboy4447
分类评估与聚类javaboy6499
密度聚类与谱聚类javaboy2404
Tensorflow 安装并实现线性回归javaboy8551
TensorFlow 深入、TensorFlow可视化javaboy4456
DNN 深度神经网络手写图片识别javaboy6508
TensorBoard 可视化javaboy2413
卷积神经网络、CNN 识别图片javaboy8560
卷积神经网络深入,AlexNet 模型实现javaboy4465
Keras 深度学习框架javaboy6517

分布式相关

资源名称口令
ZooKeeper 简介javaboy2422
ZooKeeper 安装javaboy8569
ZooKeeper 基本数据模型javaboy4474
基于 Linux 的 ZK 客户端命令javaboy6526
选举模式和 ZK 集群安装javaboy2431
JavaAPI 操作 ZKjavaboy8578
ApacheCurator 客户端javaboy4483
Dubbo 入门到重构服务javaboy6535
分布式锁javaboy2440
Zookeeper 总结javaboy8587

项目实战

资源名称口令
OA 办公自动化项目1javaboy4492
OA 办公自动化项目2javaboy6544
OA 办公自动化项目3javaboy2449
OA 办公自动化项目4javaboy8596
备锋客户关系管理(CRM)系统javaboy4501
百战客户关系管理系统javaboy6553
宅急送项目javaboy2458
高仿人人网项目javaboy8605
Java 邮件开发项目javaboy4510
在线支付实战视频javaboy6562
俄罗斯方块游戏实战javaboy2467
贪吃蛇视频教程javaboy8614
交通灯管理系统javaboy4519
银行业务调度系统实战javaboy6571
供应链系统实战视频javaboy2476
网上商城项目实战javaboy8623
医药采购平台管理系统javaboy4528
点餐系统实战javaboy6580
杰信商贸 SSM 版javaboy2485
国家税务协同平台项目javaboy8632
javaWeb 聊天室javaboy4537
网上书店javaboy6589
手机进销存系统javaboy2494
QQ 聊天器javaboy8641
ERP 项目javaboy4546
坦克大战javaboy6598
五子棋游戏javaboy2503
报名系统 Activityjavaboy8650
OA 供应链系统javaboy4555
用户管理系统javaboy6607
JavaWeb 图书商城javaboy2512
VIP 商场javaboy8659
企业招聘系统javaboy4564
博客系统项目javaboy6616
超级玛丽javaboy2521
成绩管理系统javaboy8668
个人理财系统javaboy4573
人事管理系统javaboy6625
JBPM 采购申请系统javaboy2530
电子商务网站javaboy8677
跨平台 App 开发javaboy4582

文档资源

资源名称口令
Docker 教程docker
Redis 教程redis
RocketMQ 教程rocketmq
Java8 新特性文档java8
设计模式教程设计模式
网络协议教程网络
netty 教程netty
web 全栈指南web全栈

好了,本次就先更新这么多,如果这里没有你想要的,也也可以留言说说你需要的资料,松哥会及时更新资源哦。 另外,大家在公众号后台回复 资源 ,也可以获取本文电子版。

在这里插入图片描述

如果这些资源帮助到你了,欢迎转发给更多小伙伴哦。

在这里插入图片描述

  • 2
    点赞
  • 4
    评论
  • 14
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值