Spring Boot2 整合 MyBatis 多数据源

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.11.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.gblfy</groupId><artifactId>springboot-mybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-mybatis</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!--SpringBoot mvc启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--Mysql数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.28</version><scope>runtime</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><!--lombok 简化java代码--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><!--druid连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!--SpringBoot test 启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources></build></project>

首先在 application.properties 中配置数据库基本信息,然后提供两个 DataSource 即可

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.DruidDataSourcespring.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,如下:

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.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 配置
要提供两个 Bean,因此这里两个数据源我将在两个类中分开来配置,首先来看第一个数据源的配置:

mport org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.Resource;
import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.gblfy.springboot.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {@Resource(name = "dsOne")DataSource dsOne;@BeanSqlSessionFactory sqlSessionFactory1() {SqlSessionFactory sessionFactory = null;try {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dsOne);sessionFactory = bean.getObject();} catch (Exception e) {e.printStackTrace();}return sessionFactory;}@BeanSqlSessionTemplate sqlSessionTemplate1() {return new SqlSessionTemplate(sqlSessionFactory1());}
}

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

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

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.Resource;
import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.gblfy.springboot.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactory2",sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {@Resource(name = "dsTwo")DataSource dsTwo;@BeanSqlSessionFactory sqlSessionFactory2() {SqlSessionFactory sessionFactory = null;try {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dsTwo);sessionFactory = bean.getObject();} catch (Exception e) {e.printStackTrace();}return sessionFactory;}@BeanSqlSessionTemplate sqlSessionTemplate2() {return new SqlSessionTemplate(sqlSessionFactory2());}
}

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

import com.gblfy.springboot.mybatis.entity.User;import java.util.List;public interface UserMapperOne{List<User> getAllUser();
}

对应的 XML 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gblfy.springboot.mybatis.mapper1.UserMapperOne"><select id="getAllUser" resultType="com.gblfy.springboot.mybatis.entity.User">select * from user;</select>
</mapper>

com.gblfy.springboot.mybatis.mapper2中的 mapper:

import com.gblfy.springboot.mybatis.entity.User;import java.util.List;public interface UserMapper {List<User> getAllUser();
}

对应的 XML 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gblfy.springboot.mybatis.mapper2.UserMapper"><select id="getAllUser" resultType="com.gblfy.springboot.mybatis.entity.User">select * from user;</select>
</mapper>

实体类:

import lombok.Data;import java.io.Serializable;
import java.time.LocalDateTime;@Data
public class User implements Serializable {//主键private Long id;//姓名private String name;//年龄private Integer age;//邮箱private String email;//创建时间private LocalDateTime createTime;
}

数据库脚本;
one

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',create_time DATETIME DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (id)
);DELETE FROM user;INSERT INTO user (id, name, age, email, create_time) VALUES
(1, 'Jone', 18, 'test1@gblfy.com','2019-01-11 14:20:20'),
(2, 'Jack', 20, 'test2@gblfy.com','2019-02-05 11:12:22'),
(3, 'Tom', 28, 'test3@gblfy.com','2019-02-14 08:31:16'),
(4, 'Sandy', 21, 'test4@gblfy.com','2019-01-14 09:15:15'),
(5, 'Billie', 24, 'test5@gblfy.com','2019-01-14 09:48:16');

two

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',create_time DATETIME DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (id)
);DELETE FROM user;INSERT INTO user (id, name, age, email, create_time) VALUES
(1, 'Jone2', 18, 'test1@gblfy.com','2019-01-11 14:20:20'),
(2, 'Jack2', 20, 'test2@gblfy.com','2019-02-05 11:12:22'),
(3, 'Tom2', 28, 'test3@gblfy.com','2019-02-14 08:31:16'),
(4, 'Sandy2', 21, 'test4@gblfy.com','2019-01-14 09:15:15'),
(5, 'Billie2', 24, 'test5@gblfy.com','2019-01-14 09:48:16');

写一个测试controller

import com.gblfy.springboot.mybatis.entity.User;
import com.gblfy.springboot.mybatis.mapper1.UserMapperOne;
import com.gblfy.springboot.mybatis.mapper2.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class PageController {@Autowiredprivate UserMapperOne userMapperOne;@Autowiredprivate UserMapper userMapper;@GetMapping("/one")public List<User> getOneList() {return userMapperOne.getAllUser();}@GetMapping("/two")public List<User> getTwoList() {return userMapper.getAllUser();}
}

启动项目:
依次访问
http://localhost:8080/one

http://localhost:8080/two
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用阿里云打造感知零售平台

摘要&#xff1a; 一、背景介绍所谓感知零售是指的根据店铺顾客的情绪变化以及顾客在店铺内对商品货架停留位置来判断顾客对商品感兴趣程度&#xff0c;实时在线调整营销策略。帮助企业第一时间掌握顾客感受&#xff0c;第一时间下发营销策略&#xff0c;第一时间得到营销效果反…

Spark精华问答 | 怎么运行Spark?

戳蓝字“CSDN云计算”关注我们哦&#xff01;为什么要学习Spark&#xff1f;作为一个用来实现快速而通用的集群计算的平台。扩展广泛使用的MapReduce计算模型&#xff0c;而且高效地支持更多的计算模式&#xff0c;包括交互式查询和流处理。Spark的一个重要特点就是能够在内存中…

mac抹掉磁盘重装系统未能与服务器取得联系_【工具】mac笔记本rm -rf 后 如何恢复删除的文件...

本来是要cp -rf 到另一个地方的&#xff0c;然后用git管理起来的。当时不知道怎么了&#xff0c;可能是最近加班多了直接执行了rm -rf 。这种一般是可以恢复的就是要来回折腾&#xff0c;不过也没办法只有折腾了&#xff0c;写了几天的内容可不想再重写一边~这里做一下恢复的记…

基于AliOS Things玩转智能语音

摘要&#xff1a; 随着AI技术的进步&#xff0c;智能语音开始将人机交互从手眼睛的传统模式中解放出来。带给人们更便捷、更风趣、更有人情味的体验&#xff0c;让被操作对象变得不再只是一个死板的工具&#xff0c;而更像是一个有生命的助理。“帮我打开空调”&#xff0c;“明…

SpringBoot2.0整合Mybatis-Plus多数据源

文章目录一、pom依赖二、application.yml多数据源配置三、持久层3.1. UserMapper 接口3.2. 接口映射UserMapper.xml(可以不写)四、逻辑处理层4.1. IUserService 接口4.2. 接口实现类IUserServiceImpl五、通用返回对象封装六、测试UserController七、启动类加扫描mapper注解八、…

百度积极回应阿波龙项目不实报道;半数开发者认为学习新语言很困难;腾讯在长沙建立首个智慧产业总部……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 惠普在其官网上公布了即将发…

精打细算使用MaxCompute搭建数仓

摘要&#xff1a; MaxCompute是一套阿里自主研发的数据仓库解决方案。产品除了功能、性能、简单等优势外&#xff0c;还能在费用上节省下一大笔前。墨迹天气使用MaxCompute&#xff0c;除了性能和稳定性也有提升外&#xff0c;整体存储和计算的费用比之前节省70%。这是如何做到…

计算机知识产权 教学目标,计算机教学设计模板

计算机教学设计模板计算机是现今学生们学习的一个重点&#xff0c;那么关于计算机的教学设计又应该怎么进行呢?下面就随小编一起去阅读计算机教学设计模板&#xff0c;相信能带给大家启发。第一篇&#xff1a;计算机教学设计模板【学习目标】了解计算机网络的发展&#xff0c;…

linux 环境 安装nginx

文章目录一、Nginx简介&#xff1a;1.1 Nginx是什么&#xff1f;1.2 能干什么&#xff1f;1.3 有什么特点&#xff1f;二、Nginx安装依赖环境2.1 安装gcc2.2 安装pcre2.3 安装zlib2.4 安装openssl2.5 综合命令安装(一步到位)三、下载/解压/安装NGINX3.1 在线下载nginx3.2 解压n…

行!这下 CSDN 玩大了!粉丝:太良心

CSDN从建立之初&#xff0c;我们的初心就是为了帮助广大开发者解决技术问题&#xff0c;成为大家最喜爱的技术社区。今年是CSDN的20周年&#xff0c;我们也为大家准备了一份良心礼物&#xff0c;可谓吐血操作。我们与AI博士唐宇迪 / Oracle认证讲师等4位讲师&#xff0c;共同为…

markdown html vue,vue项目引入markdown

npm install showdown接下来是用法&#xff1a;export default {data () {return {content:,converter:null}},watch:{content:contentChanged},mounted(){ this.init(); },methods: {init(){var showdown require(showdown);var converter new showdown.Converter();this.co…

厉害了!阿里安全图灵实验室在ICDAR2017 MLT竞赛刷新世界最好成绩

摘要&#xff1a; 近日&#xff0c;阿里安全图灵实验室&#xff08;Alibaba Turing Lab&#xff09;的ATL Cangjie OCR算法在ICDAR2017的MLT&#xff08;Competition on Multi-lingual scene text detection&#xff09;自然场景多语言文本检测竞赛中刷新了世界最好成绩&#x…

Spring Boot 一个依赖搞定 session 共享,没有比这更简单的方案了!

有的人可能会觉得题目有点夸张&#xff0c;其实不夸张&#xff0c;题目没有使用任何修辞手法&#xff01;认真读完本文&#xff0c;你就知道gblfy说的是对的了&#xff01; 文章目录一、背景二、分析思路三、实战1. 创建工程2. pom.xml3. redis配置4. 使用5. 项目打包6. 启动项…

孩子学计算机最佳年龄,孩子学编程最佳年龄是几岁

孩子学编程最佳年龄是几岁2021-01-18 16:58:11文/董玉莹孩子学习编程的最好是几岁&#xff1f;本文整理了相关内容&#xff0c;欢迎阅读。孩子学习编程的最好是几岁6-18岁&#xff01;从国内外的典型案例来看6-18岁是孩子学习“编程”的最佳时机&#xff0c;这个阶段的孩子左右…

python画两条曲线_python – 在Matplotlib中绘制两个图之间的线

在许多情况下,来自其他答案的解决方案是次优的(因为只有在计算点之后没有对图进行任何更改时它们才有效). 更好的解决方案是使用专门设计的ConnectionPatch&#xff1a; import matplotlib.pyplot as plt from matplotlib.patches import ConnectionPatch import numpy as np f…

5G基站功耗,到底有多大?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 小枣君来源 | 鲜枣课堂前不久&#xff0c;从某运营商流出的一张图&#xff0c;在小枣君的朋友圈里被广泛传播。就是这张&#xff08;点击可看放大观看&#xff09;&#xff1a;图中显示的&#xff0c;是该运营商在广州、深圳…

“前端+应用”两大监控利器商业化首发 ARMS领跑APM市场

摘要&#xff1a; 日前&#xff0c;阿里巴巴中间件&#xff08;Aliware&#xff09;旗下产品业务实时监控服务ARMS正式商用。首发商用的ARMS目前涵盖应用监控和前端监控两大功能。由此&#xff0c;ARMS的商业化正式填补了阿里云在APM(Application Performance Management)领域空…

Spring Boot2 整合 Shiro ,两种方式全总结!

前言:在 Spring Boot 中做权限管理&#xff0c;一般来说&#xff0c;主流的方案是 Spring Security &#xff0c;但是&#xff0c;仅仅从技术角度来说&#xff0c;也可以使用 Shiro。 文章目录一、Spring Security 和 Shiro 的比较二、原生的整合2.1. 创建一个 Spring Boot 项目…

html5 coverflow,使用FancyCoverFlow实现3D无限循环切换视图

FancyCoverFlow重写了gallery实现了画廊特效。这里记录下具体的使用方法&#xff1a;1 在布局文件中添加控件android:id"id/fancy_cover"android:layout_width"match_parent"android:layout_height"wrap_content"android:layout_marginTop"…

5G精华问答 | 5G关键技术解读

5G的概念虽然很早就已经提出&#xff0c;但是对于大多数用户来说&#xff0c;真正听到并且对5G有了初步的了解还是在今年。今天就让我们来看看关于5G的精华问答吧。1Q&#xff1a;5G标准是怎么来的&#xff0c;由谁制定的&#xff1f;A&#xff1a;5G是由“第三代合作伙伴计划组…