Spring Boot2 系列教程(二十二)整合 MyBatis 多數據源

關於多數據源的配置,前面和大夥介紹過 JdbcTemplate 多數據源配置,那個比較簡單,本文來和大夥說說 MyBatis 多數據源的配置。前端

其實關於多數據源,個人態度仍是和以前同樣,複雜的就直接上分佈式數據庫中間件,簡單的再考慮多數據源。這是項目中的建議,技術上的話,固然仍是各類技術都要掌握的。vue

工程建立

首先須要建立 MyBatis 項目,項目建立和前文的同樣,添加 MyBatis、 MySQL 以及 Web 依賴:java

項目建立完成後,添加 Druid 依賴,和 JdbcTemplate 同樣,這裏添加 Druid 依賴也必須是專爲 Spring Boot 打造的 Druid,不能使用傳統的 Druid。完整的依賴以下:mysql

<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 便可,這裏我再把代碼貼出來,裏邊的道理條條框框的,大夥能夠參考前面的文章,這裏再也不贅述。web

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,所以這裏兩個數據源我將在兩個類中分開來配置,首先來看第一個數據源的配置:redis

@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。算法

這裏配置完成後,依據這個配置,再來配置第二個數據源便可:spring

@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全棧

好了,本次就先更新這麼多,若是這裏沒有你想要的,也也能夠留言說說你須要的資料,鬆哥會及時更新資源哦。 另外,你們在公衆號後臺回覆 資源 ,也能夠獲取本文電子版。

若是這些資源幫助到你了,歡迎轉發給更多小夥伴哦。

相關文章
相關標籤/搜索