zoukankan      html  css  js  c++  java
  • 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全栈

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

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

  • 相关阅读:
    《高校大学生就业指导工作项目化管理研究》随笔
    《大学生就业网络信息服务模式研究》随笔
    文献随笔目录第五周
    申怡-《后危机时代大学生就业趋向调查研究》随笔
    文献随笔目录第四周
    《多媒体环境下大学生就业指导创新研究》随笔
    《企业参与大学生职业生涯规划对大学生就业能力的研究》随笔
    《高校就业服务信息交流平台构建研究》随笔
    《基于新媒体环境下创新高校就业创业指导工作的思考与探索》随笔
    《“双创”视阈下大学生就业教育研究》随笔
  • 原文地址:https://www.cnblogs.com/lenve/p/11842381.html
Copyright © 2011-2022 走看看