Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源
关于多数据源的配置,前面和大伙介绍过 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 数据库安装及简单 SQL | javaboy4141 |
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 和 Response | javaboy6229 |
Servlet 请求转发与重定向 | javaboy2134 |
Session 和 Cookie | javaboy8281 |
JSP 详解 | javaboy4186 |
用户管理系统实战 | javaboy6238 |
Ajax 详解 | javaboy2143 |
EL 和 JSTL | javaboy8290 |
过滤器详解 | 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 一个 Tomcat | javaboy4339 |
大前端
资源名称 | 口令 |
---|---|
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 操作 ZK | javaboy8578 |
ApacheCurator 客户端 | javaboy4483 |
Dubbo 入门到重构服务 | javaboy6535 |
分布式锁 | javaboy2440 |
Zookeeper 总结 | javaboy8587 |
项目实战
资源名称 | 口令 |
---|---|
OA 办公自动化项目1 | javaboy4492 |
OA 办公自动化项目2 | javaboy6544 |
OA 办公自动化项目3 | javaboy2449 |
OA 办公自动化项目4 | javaboy8596 |
备锋客户关系管理(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 |
报名系统 Activity | javaboy8650 |
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全栈 |
好了,本次就先更新这么多,如果这里没有你想要的,也也可以留言说说你需要的资料,松哥会及时更新资源哦。 另外,大家在公众号后台回复 资源 ,也可以获取本文电子版。
如果这些资源帮助到你了,欢迎转发给更多小伙伴哦。