在项目中经常会存在操作不同数据库得情况,最为典型就是后管系统,如果不走接口进行调用,那么势必会有多个数据源作为数据管理的得突破口。在此我们可以想一下到底是微服务接口暴露模式的后管好还是基于多数据源的模式好?虽然都是管理数据,而且效果都差不多。但是接口模式的管理对开发不太友好。所以这块我们稍微学习一下mybatis的多数据配置,我们想要的结果是项目兼容任意多个数据库,这里我们用mysql做为研究对象。至于其他的数据库也是一样的。

在之前我们学习mybatis的时候说mybatis是java的orm框架,然后这个orm框架要和spring进行整合,需要mybatis-spring这样一个桥的东西。当然在springboot中提供了基于自动配置的mybatis,这块我们学的是原生的.

首先我们导入相关的maven依赖

<!--        数据库--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version></dependency><!--        orm--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--        orm spring--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!--        数据源--><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.6</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.9</version></dependency>

数据源这块采用druid,这块为了实践,我们采用MapperFactoryBean和MapperScannerConfigurer两种方式进行探讨。代码如下:

@Configuration
public class MybatisConfig {public DruidDataSource getDruidDataSource(String url,String userName,String password) throws SQLException {DruidDataSource ds = new DruidDataSource();ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);try {ds.setFilters("stat,mergeStat,slf4j");} catch (Exception var18) {}ds.setMaxActive(50);ds.setInitialSize(1);ds.setMinIdle(1);ds.setMaxWait(60000);ds.setTimeBetweenEvictionRunsMillis(120000);ds.setMinEvictableIdleTimeMillis(300000);ds.setValidationQuery("SELECT 'x'");ds.setPoolPreparedStatements(true);ds.setMaxPoolPreparedStatementPerConnectionSize(30);ds.setTestWhileIdle(true);ds.setTestOnReturn(false);ds.setTestOnBorrow(false);ds.init();return ds;}@Bean(name = "dataO")public SqlSessionFactoryBean getSqlSessionFactoryOne1() throws Exception {//xml和实体的映射SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(getDruidDataSource("jdbc:mysql://127.0.0.1:3306/tianjl?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true","root","tianjingle"));sqlSessionFactoryBean.setTypeAliasesPackage("com.example.demo.one");Resource[] resources = new Resource[]{new ClassPathResource("tian/one/OneMapper.xml")};sqlSessionFactoryBean.setMapperLocations(resources);return sqlSessionFactoryBean;}@Bean(name = "dataTwo")public MapperFactoryBean getSqlSessionFactoryTwo() throws Exception {//xml和实体的映射SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(getDruidDataSource("jdbc:mysql://127.0.0.1:3306/tianjl?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true","root","tianjingle"));sqlSessionFactoryBean.setTypeAliasesPackage("com.example.demo.two");sqlSessionFactoryBean.setMapperLocations(new ClassPathResource("tian/two/TwoMapper.xml"));//单个数据源所有的数据库映射MapperFactoryBean mapperFactoryBean=new MapperFactoryBean();//设置sqlSessionTemplate,zhuru yong demapperFactoryBean.setMapperInterface(TwoMapper.class);mapperFactoryBean.setSqlSessionFactory(sqlSessionFactoryBean.getObject());return mapperFactoryBean;}@Bean@ConditionalOnBean(name = "dataO")public static MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage("com.example.demo.one.mapper");
//这块指定扫描的接口mapperScannerConfigurer.setSqlSessionFactoryBeanName("dataO");return mapperScannerConfigurer;}
}

在完成上述方法之后,我们编写测试方法

    @Resourceprivate OneMapper oneMapper;@Resourceprivate TwoMapper twoMapper;@GetMapping(value = "/one")public BaikeResponse one(){BaikeResponse baikeResponse=new BaikeResponse();baikeResponse.setData(oneMapper.one());return baikeResponse;}@GetMapping(value = "/two")public BaikeResponse two(){BaikeResponse baikeResponse=new BaikeResponse();baikeResponse.setData(twoMapper.two());return baikeResponse;
}

小结:这块我们采用比较原始的方式配置了了两种多数据源的实现,这块我们也可以对此进行扩展,封装成让习惯了使用starter的同学摸不着头脑的形式。好了,本次demo就演示到这里了。

晚安~

Mybatis配置多数据源相关推荐

  1. mybatis配置mysql数据源_springboot+mybatis+Druid配置多数据源(mysql+postgre)

    springboot+mybatis+Druid配置多数据源(mysql+postgre) 引入pom依赖 org.mybatis.spring.boot mybatis-spring-boot-st ...

  2. 【spring boot】 mybatis配置双数据源/多数据源

    前言 spring boot 2.0.0.RELEASE maven 3.5 eclipse 4.9.0 mybatis 1.3.2 mybatis generator 1.3.2 pagehelpe ...

  3. SpringBoot中mybatis配置多数据源

    首先需要创建多个数据库 简单的user表 CREATE TABLE `user` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAU ...

  4. Springboot环境下mybatis配置多数据源配置

    mybatis多数据源配置(本文示例为两个),方便实现数据库的读写分离,分库分表功能 本文基于springboot2进行的配置,如版本为springboot1系列则需修改yml的配置(在文末附带) m ...

  5. mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源

    山石彦 | 作者 urlify.cn/vQzIne | 来源 最近工作中有用到双数据源,一个项目(中台)中需要操作两个不同的数据库.当时考虑到了两种方式, 1.通过http请求访问(A项目访问d1数据 ...

  6. SpringBoot实战(三):整合Mybatis配置多数据源

    [前言] 最近接到一个新需求,经过分析后做了相应的设计:其中需要在一个项目中操做不同的数据源:于是进行了相关验证:在此记录一下验证过程. [实战多数据源]          一.Pom中引入相应的Ja ...

  7. mybatis 配置多数据源 java,SpringBoot+MyBatisPlus配置多数据源读写分离

    首先呢,我们这里使用MySQL的数据库,可以简单配置一下主从备份来实现两个数据库的数据同步 项目的配置目录大概是这样的作为参考 第一步.定义一个枚举类声明当前的数据源类型 package com.yu ...

  8. spring mybatis 配置多数据源

    为什么80%的码农都做不了架构师?>>>    package com.*.blive.common;/*** Created by longjunping on 2017/1/8. ...

  9. SpringBoo Mybatis Druid配置多数据源

    SpringBoo Mybatis Druid配置多数据源 前言:当单个数据库无法满足大量读写操作需求的时候,就需要用到多个数据库实现读写分离了.那么,这个时候,就需要去配置多数据源了.那么具体如何配 ...

最新文章

  1. python上海培训哪里比较好-python培训机构上海哪里好?
  2. 模板:无旋treap
  3. php 扩展 suhosin 配置不当引发的报错及其解决方法
  4. Android人脸识别开发入门--基于虹软免费SDK实现
  5. LeetCode刷题(21)
  6. oracle12C 创建用户学习
  7. 计信院计算机英语期末考试,计算机英语考试题two
  8. mysql修改有外键约束的表结构
  9. 原文是:机器人工程师学习计划
  10. 杭州地铁行业十四五发展可行性及投资机遇研究报告2022版
  11. 怎么用C++实现点对点通信
  12. CPU天梯图2022
  13. 2021.03.12——学习公司项目
  14. 所谓的特征值和特征向量
  15. python unix时间戳_Python 获得13位unix时间戳的方法
  16. java图片管理系统_基于Java的图片管理信息系统的设计与实现
  17. Dataset之mpg:mpg汽车油耗数据集的简介、下载、使用方法之详细攻略
  18. 改变PowerPoint2003中超链接的颜色
  19. Elasticsearch搜索类型(SearchType)详解
  20. php dtu,DTU知识大盘点 DTU产品类型作用及应用

热门文章

  1. 强化学习经典算法笔记(十九):无监督策略学习算法Diversity Is All You Need
  2. 墨竹:黄金空头落入帷幕,短线多头仍是最佳抉择!
  3. 【JavaScript】JS执行机制--同步与异步
  4. Famp;amp;C游戏推荐Canvas2~茜色的调色盘~~茜色のパレット~介绍下载
  5. NO.7 Monitor(管程)是什么意思?Java中Monitor(管程)的介绍
  6. R数据分析:孟德尔随机化实操
  7. CTO眼中的系统高可用
  8. Winform 通用遮罩层
  9. 当你明白无常,你就不会张扬
  10. 论“正确”的使用步道乐跑(二)