Spring Boot 整合 MyBatis Plus实现多数据源的两种方式
第一种:使用配置类的方式:
项目结构
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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>multi-datasource-parent</artifactId><groupId>com.ganbo</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>multi-datasource-config</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><!-- mybatis-plus代码生成器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version></dependency><!-- mysql连接 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
多数据源配置类(DataSource -> SqlsessionFactory -> SqlSessionTemplate -> DataSourceTransactionManager)
DataSourceUserConfig 配置类:
package com.multidb.configdemo.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.multidb.configdemo.dao.user", sqlSessionTemplateRef = "userSqlSessionTemplate")
public class DataSourceUserConfig {@Primary //设置主数据源@Bean(name = "userDataSource")@ConfigurationProperties(prefix = "spring.datasource.user")public DataSource userDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "userSqlSessionFactory")public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception {//工厂bean SqlSessionFactoryMybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//设置数据源bean.setDataSource(dataSource);//加载映射文件bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/user/*.xml"));return bean.getObject();}// 数据源事务管理器public DataSourceTransactionManager db1TransactionManager(@Qualifier("userDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "userSqlSessionTemplate")public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}}
DataSourceOrderConfig 配置类:
package com.multidb.configdemo.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = "com.multidb.configdemo.dao.order", sqlSessionTemplateRef = "orderSqlSessionTemplate")
public class DataSourceOrderConfig {// @Primary@Bean(name = "orderDataSource")@ConfigurationProperties(prefix = "spring.datasource.order")public DataSource orderDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "orderSqlSessionFactory")public SqlSessionFactory orderSqlSessionFactory(@Qualifier("orderDataSource") DataSource dataSource) throws Exception {//工厂bean SqlSessionFactoryMybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//设置数据源bean.setDataSource(dataSource);//加载映射文件bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/order/*.xml"));return bean.getObject();}// 数据源事务管理器public DataSourceTransactionManager db1TransactionManager(@Qualifier("orderDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "orderSqlSessionTemplate")public SqlSessionTemplate orderSqlSessionTemplate(@Qualifier("orderSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}}
多个mapper接口:
application.properties 配置文件
spring:datasource:user:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootjdbc-url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=falseorder:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rootjdbc-url: jdbc:mysql://127.0.0.1:3306/order?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=falsemybatis-plus:
# mapper-locations: classpath:mapper/*.xml # xml文件路径configuration:map-underscore-to-camel-case: true # 驼峰转换cache-enabled: false # 是否开启缓存log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印sql
# global-config: # 全局配置
# db-column-underline: true # 数据库字段驼峰下划线转换
# id-type: 0 # id自增类型(数据库id自增)
第二种:使用@DS 注解 切换数据源
新增pom依赖:
<!-- Mybatis plus多数据源支持,版本与 mybatis-plus保存一致 --><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.3.1</version></dependency>
application.yml 配置
spring:datasource:dynamic:primary: user #设置默认的数据源或者数据源组,默认值即为masterstrict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源datasource:user:url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver #3.2.0开始支持SPI可省略此配置order:url: jdbc:mysql://127.0.0.1:3306/order?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Drivermybatis-plus:mapper-locations: classpath:mapper/**/*.xml #xml文件路径configuration:map-underscore-to-camel-case: true #驼峰转换cache-enabled: false #是否开启缓存log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql# global-config: #全局配置# db-column-underline: true #数据库字段驼峰下划线转换# id-type: 0 #id自增类型(数据库id自增)
添加 @DS注解 切换数据源
import com.baomidou.dynamic.datasource.annotation.DS;
import com.multidb.annotationdemo.dao.order.OrderDao;
import com.multidb.annotationdemo.entity.order.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
@DS("order")
public class OrderService {@AutowiredOrderDao orderDao;public Order getOrder() {return orderDao.selectByPrimaryKey(1L);}}
package com.multidb.annotationdemo.service;import com.baomidou.dynamic.datasource.annotation.DS;
import com.multidb.annotationdemo.dao.user.UserDao;
import com.multidb.annotationdemo.entity.user.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
@DS("user")
public class UserService {@AutowiredUserDao userDao;public User getUser() {return userDao.selectByPrimaryKey(1L);}}
启动类配置扫描mapper接口:
@SpringBootApplication
@MapperScan("com.multidb.annotationdemo.dao.**")
public class Datasource1Application {public static void main(String[] args) {SpringApplication.run(Datasource1Application.class, args);}}
测试
@RestController
public class IndexController {@AutowiredUserService userService;@AutowiredOrderService orderService;@GetMapping("/getUser")public User getUser() {return userService.getUser();}@GetMapping("/getOrder")public Order getOrder() {return orderService.getOrder();}}
项目源码以及数据库脚本: multi-datasource-parent: Spring boot 整合 MyBatis 实现多数据源。
Spring Boot 整合 MyBatis Plus实现多数据源的两种方式相关推荐
- 3. mysql的注解驱动的三种方式_上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。...
1.引入依赖 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot- ...
- Spring boot 加Mybatis加dubble多数据源配置
Spring boot 整合Mybatis+dubble +maven单数据源的例子很多,但是多数据源配置需要将原本封装好的重写一遍,有点麻烦,对框架的理解要求比较高, 在这详细给大家介绍下如何配置使 ...
- spring boot整合mybatis步骤
spring boot整合mybatis步骤 官方说明:MyBatis-Spring-Boot-Starter will help you use MyBatis with Spring Boot 其 ...
- Spring Boot 整合MyBatis(23)
Spring Boot 整合MyBatis Spring Boot 整合 Druid 引入依赖 配置 application.yml pring Boot 整合 tk.mybatis 引入依赖 配置 ...
- 干货必看|Spring Boot整合MyBatis框架详解
在开发中,我们通常会对数据库的数据进行操作,Sprirng Boot对关系型数据库和非关系型数据库的访问操作都提供了非常好的整合支持.所以今天壹哥就给大家讲解一下,如何在SpringBoot环境中整合 ...
- Spring Boot整合Mybatis【超详细】
pring Boot整合Mybatis 配置文件形式 pom.xml 配置数据源 UserMapper.xml UserMapper 配置springboot整合mybatis 在运行类上添加@Map ...
- 2021-5-10:Spring Boot整合MyBatis
Spring Boot整合MyBatis Spring Boot 整合MyBatis (一)基础环境搭建 1.数据准备 创建数据库.数据表并插入一定的数据 (1)创建博客数据库blog 在Navica ...
- Spring Boot 教程(三): Spring Boot 整合Mybatis
教程简介 本项目内容为Spring Boot教程样例.目的是通过学习本系列教程,读者可以从0到1掌握spring boot的知识,并且可以运用到项目中.如您觉得该项目对您有用,欢迎点击收藏和点赞按钮, ...
- spring boot 整合mybatis 无法输出sql的问题
使用spring boot整合mybatis,测试功能的时候,遇到到了sql问题,想要从日志上看哪里错了,但是怎么都无法输出执行的sql,我使用的是log4j2,百度了一下,很多博客都说,加上下面的日 ...
最新文章
- Android开发实战三之导入现有Android工程项目
- openwrt里面的高深代码-两行shell脚本
- oracle的rownum理解
- NOI Online能力测试2视频版,让我们看看出题专家怎么说!(入门组)
- 《推理的迷宫》读书笔记之一
- junper srx配置思路
- diskgenius创建efi分区_找不到引导分区 启动分区不存在 怎么创建efi系统分区
- js设计模式之命令模式
- windows主机防火墙启用ICMP入站
- [USACO2008 Mar]土地购买
- 基于Android技术的物联网应用开发
- Unity AreaLight使用
- spotlight搜索失效_如何在OS X的Spotlight中使用自然语言搜索
- 基于jsp+java+ssm的大学生缴费系统
- 【Vue项目】仿哔哩哔哩网页
- SpringBoot整合Shiro搭建登录注册认证授权权限项目模板
- 手机中好用的软件有哪些?让我来告诉你吧
- java scel_使用java将搜狗词库.scel文件转化为.txt文件
- Y480安装联想一键恢复
- SQL SERVER数据库逆向生成PDM文件
热门文章
- 叶武滨老师时间管理学习感悟
- ​雷军辟谣拒投腾讯阿里:想1000万收购网易,丁磊拒了;Gitlab 禁止使用 Windows | EA周报...
- 微信小程序——富文本
- 防灌水php,自己借鉴写了个防灌水的函数
- 转载:区块链:关于软分叉与硬分叉以及什么是共识
- 使用 Unlock Music 解锁加密的音乐文件
- 考研小助手 Mathematica 麦酱教你算不定积分 wolfram alpha
- 织梦DedeCMS在自定义表单里加入验证码的方法
- 信息安全行业从业者----鱼龙混杂也藏龙卧虎
- Docker的安装部署及优化详解(汇总版,学习docker这一篇就够了)