前言
在上期内容中,我们详细介绍了如何使用 MyBatis Plus 的代码生成器。通过代码生成器,我们能够根据数据库表结构自动生成实体类、Mapper 接口、服务类、控制器和 XML 映射文件,大大提高了开发效率,并减少了重复劳动。同时,我们还探讨了如何进行代码生成器的自定义配置,使其生成的代码更加符合项目规范。
本期内容将深入探讨 MyBatis Plus 的多数据源配置。多数据源配置在需要连接多个数据库的场景下非常实用,能够显著提高应用程序的灵活性和扩展性。通过本期内容,你将学会如何实现多数据源配置,并通过实例演示如何在项目中应用这些技术。
一、引入依赖
首先,我们需要在 pom.xml
文件中添加多数据源相关的依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.2.1</version>
</dependency>
二、配置多数据源
接下来,我们需要在 application.yml
文件中配置多个数据源。
spring:
datasource:
dynamic:
primary: master # 设置默认数据源
datasource:
master:
url: jdbc:mysql://localhost:3306/mybatis_plus_master?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
url: jdbc:mysql://localhost:3306/mybatis_plus_slave?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
三、配置数据源管理
在项目中创建一个配置类,用于配置数据源的管理。
package com.example.mybatisplusdemo.config;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider;
import com.baomidou.dynamic.datasource.provider.YmlDynamicDataSourceProvider;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DataSourceConfig {
@Bean
public DynamicDataSourceProvider dynamicDataSourceProvider(DynamicDataSourceProperties properties) {
return new YmlDynamicDataSourceProvider(properties);
}
@Bean
public DynamicRoutingDataSource dynamicRoutingDataSource(DynamicDataSourceProvider dynamicDataSourceProvider) {
DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
dynamicRoutingDataSource.setPrimary("master");
dynamicRoutingDataSource.setProvider(dynamicDataSourceProvider);
return dynamicRoutingDataSource;
}
}
四、使用多数据源
在服务类或方法上使用 @DS
注解,指定使用的数据源。
-
在服务类中使用多数据源:
-
在
UserService
接口中定义方法:IPage<User> findAllFromSlave(Page<User> page);
-
在
UserServiceImpl
类中实现方法,并使用@DS
注解指定数据源:@DS("slave") @Override public IPage<User> findAllFromSlave(Page<User> page) { return baseMapper.selectPage(page, null); }
-
-
在控制器中提供多数据源查询接口:
- 在
UserController
类中编写接口,接收查询请求并调用服务层方法:@GetMapping("/listFromSlave") public IPage<User> listFromSlave(@RequestParam int pageNo, @RequestParam int pageSize) { Page<User> page = new Page<>(pageNo, pageSize); return userService.findAllFromSlave(page); }
- 在
五、测试多数据源配置
-
启动 Spring Boot 应用:
- 在 IDE 中运行
MybatisPlusDemoApplication
类,启动项目。
- 在 IDE 中运行
-
测试多数据源查询:
- 使用浏览器或 Postman 访问
http://localhost:8080/user/listFromSlave?pageNo=1&pageSize=5
,查看从从库查询的数据结果。
- 使用浏览器或 Postman 访问
六、动态切换数据源
MyBatis Plus 还支持在运行时动态切换数据源。我们可以通过编程方式动态切换数据源,以满足更复杂的业务需求。
-
在服务层中动态切换数据源:
-
在
UserService
接口中定义方法:IPage<User> findAllFromDynamicDataSource(Page<User> page, String datasource);
-
在
UserServiceImpl
类中实现方法,使用编程方式动态切换数据源:@Override public IPage<User> findAllFromDynamicDataSource(Page<User> page, String datasource) { DynamicRoutingDataSource dataSource = (DynamicRoutingDataSource) DynamicDataSourceContextHolder.peek(); DynamicDataSourceContextHolder.push(datasource); IPage<User> result = baseMapper.selectPage(page, null); DynamicDataSourceContextHolder.poll(); return result; }
-
-
在控制器中提供动态切换数据源的接口:
- 在
UserController
类中编写接口,接收请求并调用服务层方法:@GetMapping("/listFromDynamic") public IPage<User> listFromDynamic(@RequestParam int pageNo, @RequestParam int pageSize, @RequestParam String datasource) { Page<User> page = new Page<>(pageNo, pageSize); return userService.findAllFromDynamicDataSource(page, datasource); }
- 在
-
测试动态切换数据源:
- 使用浏览器或 Postman 访问
http://localhost:8080/user/listFromDynamic?pageNo=1&pageSize=5&datasource=slave
,查看从指定数据源查询的数据结果。
- 使用浏览器或 Postman 访问
七、总结
通过本篇文章,你已经学会了如何在 MyBatis Plus 中配置和使用多数据源,并在运行时动态切换数据源。我们详细介绍了多数据源配置的实现方法,并通过实例演示了如何在项目中应用这些技术。多数据源配置能够显著提高应用程序的灵活性和扩展性,满足复杂的业务需求。
下期预告
在下一期内容中,我们将深入探讨 MyBatis Plus 的高级功能,包括自定义 SQL 注解、批量操作以及数据加密与解密。通过这些高级功能,你将学会如何实现更复杂的数据操作和安全性措施,进一步提升项目的开发效率和安全性。敬请期待!
通过本系列教程的学习,你将系统地掌握 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!