0


SpringBoot2.6.x 整合Mybatis-Plus3.5.1 实现多数据源切换

文章目录

Mybatis-Plus多数据源插件源码地址

前言

dynamic-datasource-spring-boot-starter 是一个基于springboot的快速集成多数据源的启动器。

其支持 Jdk 1.7+, SpringBoot 1.4.x 1.5.x 2.x.x。

官方免费文档

特性

  • 支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。
  • 支持数据库敏感配置信息 加密 ENC()。
  • 支持每个数据库独立初始化表结构schema和数据库database。
  • 支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。
  • 支持 自定义注解 ,需继承DS(3.2.0+)。
  • 提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。
  • 提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。
  • 提供 自定义数据源来源 方案(如全从数据库加载)。
  • 提供项目启动后 动态增加移除数据源 方案。
  • 提供Mybatis环境下的 纯读写分离 方案。
  • 提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。
  • 支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。
  • 提供 基于seata的分布式事务方案。
  • 提供 本地多数据源事务方案。 附:不能和原生spring事务混用。

准备数据库

如下图所示, 我这边有名为cloud_order ,cloud_user两个数据库,并且创建了相同表结构的表
在这里插入图片描述
cloud_order.dynamic 数据
在这里插入图片描述
cloud_user.dynamic 数据
在这里插入图片描述


SpringBoot整合Mp

1、创建工程

在这里插入图片描述


2、添加依赖

这里springboot使用2.6.3版本, mp使用3.5.1

<parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.6.3</version></parent><modelVersion>4.0.0</modelVersion><packaging>jar</packaging><artifactId>Mp-Dynamic-datasource-SpringBoot2.6.x</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.22</version></dependency><!-- MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- MyBatis-Plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency></dependencies>

3、配置文件

server:port:8081application:name: dynamic-datasource
  datasource:dynamic:primary: order
      datasource:order:url: jdbc:mysql://127.0.0.1:3306/cloud_order?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8username: root
          password:123456driver-class-name: com.mysql.cj.jdbc.Driver
        user:url: jdbc:mysql://127.0.0.1:3306/cloud_user?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8username: root
          password:123456driver-class-name: com.mysql.cj.jdbc.Driver

# mybatis-plus相关配置mybatis-plus:# xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)mapper-locations: classpath:mapper/*/*.xml# 以下配置均有默认值,可以不设置global-config:db-config:#主键类型  auto:"数据库ID自增" 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";id-type: auto
      #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"field-strategy: NOT_EMPTY
      #数据库类型db-type: MYSQL
  configuration:# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射map-underscore-to-camel-case:true# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段call-setters-on-nulls:true# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

4、生成代码

entity
packagetop.fate.entity;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableId;importlombok.Getter;importlombok.Setter;importjava.io.Serializable;/**
 * @author fate急速出击
 * @since 2022-06-08
 */@Getter@SetterpublicclassDynamicimplementsSerializable{privatestaticfinallong serialVersionUID =1L;@TableId(value ="id", type =IdType.AUTO)privateLong id;privateString context;}
mapper
packagetop.fate.mapper;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importtop.fate.entity.Dynamic;/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author fate急速出击
 * @since 2022-06-08
 */publicinterfaceDynamicMapperextendsBaseMapper<Dynamic>{}
DynamicMapper.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="top.fate.mapper.DynamicMapper"></mapper>
service
packagetop.fate.service;importcom.baomidou.mybatisplus.extension.service.IService;importtop.fate.entity.Dynamic;/**
 * <p>
 *  服务类
 * </p>
 *
 * @author fate急速出击
 * @since 2022-06-08
 */publicinterfaceIDynamicServiceextendsIService<Dynamic>{}
serviceimpl
packagetop.fate.service.impl;importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importorg.springframework.stereotype.Service;importtop.fate.entity.Dynamic;importtop.fate.mapper.DynamicMapper;importtop.fate.service.IDynamicService;/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author fate急速出击
 * @since 2022-06-08
 */@ServicepublicclassDynamicServiceImplextendsServiceImpl<DynamicMapper,Dynamic>implementsIDynamicService{}

测试

这里我为了偷懒直接在controller切数据源了, 不建议学习这里我图快
packagetop.fate.controller;importcom.baomidou.dynamic.datasource.annotation.DS;importio.swagger.annotations.Api;importio.swagger.annotations.ApiOperation;importlombok.AllArgsConstructor;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;importtop.fate.entity.Dynamic;importtop.fate.service.IDynamicService;importjava.util.List;/**
 *  控制器
 *
 * @author fate急速出击
 * @since 2022-06-08
 */@RestController@AllArgsConstructor@RequestMapping("/dynamic")publicclassDynamicController{privateIDynamicService dynamicService;@DS("user")@GetMapping("list1")publicList<Dynamic>list1(){return dynamicService.list();}@DS("order")@GetMapping("list2")publicList<Dynamic>list2(){return dynamicService.list();}}

写在最后

在这里插入图片描述

原创不易 ,请大家留个赞再走吧 !


本文转载自: https://blog.csdn.net/weixin_43627706/article/details/125183689
版权归原作者 fate急速出击 所有, 如有侵权,请联系我们删除。

“SpringBoot2.6.x 整合Mybatis-Plus3.5.1 实现多数据源切换”的评论:

还没有评论