九、多数据源配置(MyBatis-Plus)
1. 应用场景说明
目标:模拟真实环境下多个数据库的使用场景,将商品相关表迁移至独立数据库,实现用户信息与商品信息的分库存储与查询。
数据库结构设计:
- 主数据库(mybatis_plus):用于存放用户表信息。
user
- 从数据库(mybatis_plus_1):专门用于管理商品表数据。
product
2. 实现流程
2.1 数据库操作
创建新数据库及对应数据表:
CREATE DATABASE `mybatis_plus_1`;
USE `mybatis_plus_1`;
CREATE TABLE product (
id BIGINT PRIMARY KEY COMMENT '主键ID',
name VARCHAR(30) COMMENT '商品名称',
price INT DEFAULT 0 COMMENT '价格',
version INT DEFAULT 0 COMMENT '乐观锁版本号'
);
INSERT INTO product (id, name, price) VALUES (1, '外星人笔记本', 100);
移除原库中的商品表(清理冗余数据):
USE `mybatis_plus`;
DROP TABLE IF EXISTS product;
2.2 添加必要依赖
在项目的依赖管理文件中引入支持多数据源的组件库:
编辑 pom.xml 文件并添加如下内容:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
注:上述操作基于 Spring Boot 项目结构进行。
pom.xml
2.3 多数据源连接配置
在配置文件 application.yml 中定义主从数据库的连接参数:
配置路径:
application.yml
具体配置内容示例:
spring:
datasource:
dynamic:
primary: master # 默认数据源
strict: false # 非严格模式(未匹配数据源时使用默认)
datasource:
master: # 主库配置
url: jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&characterEncoding=utf8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
slave_1: # 从库配置
url: jdbc:mysql://localhost:3306/mybatis_plus_1?useSSL=false&characterEncoding=utf8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
2.4 服务层数据源指定
通过使用特定注解明确指定某个服务类或方法所使用的数据库实例。该注解值需与配置文件中定义的数据源名称保持一致:
示例代码位置:
@DS
实际应用方式:
// 用户服务(主库)
@DS("master")
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
// 商品服务(从库)
@DS("slave_1")
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {}
2.5 功能测试与验证
执行测试用例以确认跨库查询功能是否正常工作:
@Test
public void testDynamicDataSource() {
// 查询用户(主库)
System.out.println(userService.getById(1L));
// 查询商品(从库)
System.out.println(productService.getById(1L));
}
预期结果:用户数据和商品数据均可成功查询,表明多数据源配置已生效。
3. 进阶应用:读写分离机制
实现原理:借助 AOP 技术或自定义注解,动态路由数据库操作——写入请求定向至主库,读取请求转发至从库。
- 写操作(如 insert、update、delete)指向主库:
INSERT/UPDATE/DELETE
- 读操作(如 select)路由到从库:
SELECT
参考代码实现:
@DS("master") // 写操作指定主库
public void saveUser(User user) {
userService.save(user);
}
@DS("slave_1") // 读操作指定从库
public User getUser(Long id) {
return userService.getById(id);
}
十、MyBatisX 插件介绍
1. 插件概述
定位:专为 IntelliJ IDEA 开发环境打造的 MyBatis 与 MyBatis-Plus 辅助开发工具,显著提升开发效率。
主要功能特性:
- 智能代码生成:根据现有数据库表结构,自动生成 Mapper 接口、XML 映射文件、Service 层代码等。
- SQL 智能提示与自动补全:提供关键字、表名、字段名的实时提示功能。
- XML 与接口快速跳转:通过快捷键实现 Mapper 接口与 XML 文件之间的双向导航。
Ctrl+B
- 动态 SQL 格式化支持:自动美化复杂的 SQL 语句,提高可读性。
2. 安装与初始化设置
安装方式
- 通过插件市场安装:
打开 IDEA → 进入插件中心 → 搜索“MyBatisX”→ 点击安装 → 重启 IDE。
- 手动安装模式:
下载插件 ZIP 包 → 导入本地插件:
File → Settings → Plugins → Install from disk
→ 重启 IDEA 完成加载。
数据库连接配置
启动 Database 工具窗口进行数据源设置:
Database
- 新增 MySQL 数据源
- 填写主机地址、端口、用户名、密码等信息
- 注意时区配置需正确设置:
serverTimezone=GMT
代码生成操作
右键选中目标数据库表 → 弹出菜单选择生成选项:
MyBatisX → Generate
- 勾选需要生成的模块类型(如 Mapper、Service、Entity 等)
- 设置输出目录路径
3. 实际使用案例
代码跳转功能
- 在 Mapper 接口的方法上按下快捷键:
Ctrl+B
→ 可直接跳转至对应的 XML 中的 SQL 定义。
- 在 XML 的 SQL 标签内使用相同快捷键:
Ctrl+B
→ 返回至对应的接口方法。
SQL 提示功能演示
编写 SQL 时自动弹出建议列表,辅助快速输入:
<!-- 输入时自动补全 -->
<select id="selectUser" resultType="User">
SELECT * FROM user WHERE id = #{id} <!-- 输入 `id` 时提示字段名 -->
</select>
4. 使用提醒事项
- 版本兼容要求:建议搭配 MyBatis-Plus 3.5.0 及以上版本使用,确保功能完整。
- 性能优化建议:首次完成代码生成后,推荐执行缓存清理操作以释放资源:
File → Invalidate Caches