- 在线文档
------------------------------------------功能------------------------------------------ 1.支持 数据源分组 ,适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 2.支持数据库敏感配置信息 加密 ENC()。 3.支持每个数据库独立初始化表结构schema和数据库database。 4.支持无数据源启动,支持懒加载数据源(需要的时候再创建连接)。 5.支持 自定义注解 ,需继承DS(3.2.0+)。 6.提供并简化对Druid,HikariCp,BeeCp,Dbcp2的快速集成。 7.提供对Mybatis-Plus,Quartz,ShardingJdbc,P6sy,Jndi等组件的集成方案。 8.提供 自定义数据源来源 方案(如全从数据库加载)。 9.提供项目启动后 动态增加移除数据源 方案。 10.提供Mybatis环境下的 纯读写分离 方案。 11.提供使用 spel动态参数 解析数据源方案。内置spel,session,header,支持自定义。 12.支持 多层数据源嵌套切换 。(ServiceA >>> ServiceB >>> ServiceC)。 13.提供 **基于seata的分布式事务方案。 14.提供 本地多数据源事务方案。 ------------------------------------------约定------------------------------------------ 1.本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。 2.配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。 3.切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。 4.默认的数据源名称为 master ,你可以通过 spring.datasource.dynamic.primary 修改。 5.方法上的注解优先于类上注解。 6.DS支持继承抽象类上的DS,暂不支持继承接口上的DS。
- 项目创建
- pom.xml
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.6.1</version> </dependency>
- application.yml
spring: datasource: dynamic: primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: url: jdbc:mysql://localhost:3306/dynamic username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver slave_1: url: jdbc:mysql://localhost:3307/dynamic username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver slave_2: url: jdbc:mysql://localhost:3308/dynamic username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver oracle: url: jdbc:oracle:thin:@192.168.1.97:1521:ORCLCDB username: c##oracle19c password: 123456 driver-class-name: oracle.jdbc.driver.OracleDriver
- 数据库连接
- 数据表创建
1.MySQL脚本 DROP TABLE IF EXISTS `Student`; CREATE TABLE Student ( id INT PRIMARY KEY, name VARCHAR(255), age INT, email VARCHAR(255) ); 2.Oracle脚本 -- DROP TABLE Student; CREATE TABLE Student ( id NUMBER(10) PRIMARY KEY, name VARCHAR2(255), age NUMBER(3), email VARCHAR2(255) );
选中数据库Ctrl+Shift+Q打开控制台-->粘贴并选中SQL脚本-->Ctrl+Enter执行SQL脚本
- 代码生成(MybatisX)
参考:https://blog.csdn.net/tongxin_tongmeng/article/details/128627980
- Mapper扫描
@SpringBootApplication @MapperScan("com.mybatis.plus.mapper") public class MybatisPlusApplication { public static void main(String[] args) { SpringApplication.run(MybatisPlusApplication.class, args); } }
- 测试接口
1.@DS 可以注解在方法上或类上,同时存在就近原则 方法上注解 优先于 类上注解。 2.没有@DS则使用默认数据源,@DS("dsName")中dsName可以为组名也可以为具体某个库的名称。
@RestController @RequestMapping("/student") public class StudentController { @Autowired private StudentService studentService; // 没有@DS则使用默认数据源master @GetMapping("/masterSave") public Boolean masterSave(@RequestBody Student student) { return studentService.save(student); } // 没有@DS则使用默认数据源master @GetMapping("/masterList") public List<Student> masterList() { return studentService.list(); } // @DS("dsName")中dsName为组名slave-->slave_1与slave_2交替保存 @DS("slave") @GetMapping("/slaveSave") public Boolean slaveSave(@RequestBody Student student) { return studentService.save(student); } // @DS("dsName")中dsName为组名slave-->slave_1与slave_2交替查询 @DS("slave") @GetMapping("/slaveList") public List<Student> slaveList() { return studentService.list(); } // @DS("dsName")中dsName为数据源oracle @DS("oracle") @GetMapping("/oracleSave") public Boolean oracleSave(@RequestBody Student student) { return studentService.save(student); } // @DS("dsName")中dsName为数据源oracle @DS("oracle") @GetMapping("/oracleList") public List<Student> oracleList() { return studentService.list(); } }
-
master创建及查询
{ "id": 111, "name": "master", "age": 111, "email": "master" }
-
slave创建及查询
{ "id": 222, "name": "slave", "age": 222, "email": "slave" }
{ "id": 333, "name": "slave", "age": 333, "email": "slave" }
1.向slave数据源组插入数据时,交替向slave_1和slave_2分别插入一条数据。 2.向slave数据源组查询数据时,交替向slave_1和slave_2分别查询一条数据。
-
oracle创建及查询
{ "id": 444, "name": "oracle", "age": 444, "email": "oracle" }
MyBatis-Plus多数据源
![](https://img-home.csdnimg.cn/images/20240711042549.png)