全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
201 0
2025-12-02

九、多数据源配置(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. 安装与初始化设置

安装方式
  1. 通过插件市场安装:
    打开 IDEA → 进入插件中心 → 搜索“MyBatisX”→ 点击安装 → 重启 IDE。
  2. 手动安装模式:
    下载插件 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
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群