MyBatis-Plus多数据源的示例代码

 更新时间:2024年05月23日 09:49:46   作者:guiying712  
本文主要介绍了MyBatis-Plus多数据源的示例代码,包括依赖配置、数据源配置、Mapper 和 Service 的定义,具有一定的参考价值,感兴趣的可以了解一下

下面是一个完整的 MyBatis-Plus 多数据源支持的示例代码,包括依赖配置、数据源配置、Mapper 和 Service 的定义。

1. 添加依赖

在 pom.xml 中添加 MyBatis-Plus 和多数据源相关的依赖:

<dependencies>
    <!-- MyBatis-Plus 依赖 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3.4</version>
    </dependency>
    <!-- HikariCP 连接池依赖 -->
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>3.4.5</version>
    </dependency>
    <!-- MySQL 驱动依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
</dependencies>

2. 配置数据源

在 application.yml 中配置多个数据源:

spring:
  datasource:
    primary:
      jdbc-url: jdbc:mysql://localhost:3306/primary_db
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver
    secondary:
      jdbc-url: jdbc:mysql://localhost:3306/secondary_db
      username: root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver

3. 数据源配置类

创建数据源配置类 DataSourceConfig.java

import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return new HikariDataSource();
    }

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
        return new HikariDataSource();
    }

    @Primary
    @Bean(name = "primaryTransactionManager")
    public DataSourceTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource primaryDataSource) {
        return new DataSourceTransactionManager(primaryDataSource);
    }

    @Bean(name = "secondaryTransactionManager")
    public DataSourceTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
        return new DataSourceTransactionManager(secondaryDataSource);
    }

    @Primary
    @Bean(name = "primarySqlSessionFactory")
    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(primaryDataSource);
        return sessionFactoryBean.getObject();
    }

    @Bean(name = "secondarySqlSessionFactory")
    public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) throws Exception {
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(secondaryDataSource);
        return sessionFactoryBean.getObject();
    }
}

4. 指定 Mapper 扫描路径

在不同的包路径下创建 Mapper 接口,并使用 @MapperScan 注解指定使用的 SqlSessionFactory

创建 PrimaryDataSourceConfig.java

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "com.example.primary.mapper", sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {
}

创建 SecondaryDataSourceConfig.java

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "com.example.secondary.mapper", sqlSessionFactoryRef = "secondarySqlSessionFactory")
public class SecondaryDataSourceConfig {
}

5. 创建实体类和 Mapper 接口

创建两个实体类 PrimaryEntity 和 SecondaryEntity

// PrimaryEntity.java
package com.example.primary.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("primary_table")
public class PrimaryEntity {
    @TableId
    private Long id;
    private String name;

    // Getters and Setters
}

// SecondaryEntity.java
package com.example.secondary.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("secondary_table")
public class SecondaryEntity {
    @TableId
    private Long id;
    private String name;

    // Getters and Setters
}

创建 Mapper 接口:

// PrimaryMapper.java
package com.example.primary.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.primary.entity.PrimaryEntity;

public interface PrimaryMapper extends BaseMapper<PrimaryEntity> {
}

// SecondaryMapper.java
package com.example.secondary.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.secondary.entity.SecondaryEntity;

public interface SecondaryMapper extends BaseMapper<SecondaryEntity> {
}

6. 创建 Service 类

创建 Service 类,分别处理不同数据源的业务逻辑:

// PrimaryService.java
package com.example.primary.service;

import com.example.primary.entity.PrimaryEntity;
import com.example.primary.mapper.PrimaryMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class PrimaryService {

    @Autowired
    private PrimaryMapper primaryMapper;

    public List<PrimaryEntity> getAll() {
        return primaryMapper.selectList(null);
    }
}

// SecondaryService.java
package com.example.secondary.service;

import com.example.secondary.entity.SecondaryEntity;
import com.example.secondary.mapper.SecondaryMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SecondaryService {

    @Autowired
    private SecondaryMapper secondaryMapper;

    public List<SecondaryEntity> getAll() {
        return secondaryMapper.selectList(null);
    }
}

7. 创建 Controller 类

最后,为每个数据源创建对应的控制器以提供 RESTful 接口:

// PrimaryController.java
package com.example.primary.controller;

import com.example.primary.entity.PrimaryEntity;
import com.example.primary.service.PrimaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/primary")
public class PrimaryController {

    @Autowired
    private PrimaryService primaryService;

    @GetMapping("/all")
    public List<PrimaryEntity> getAll() {
        return primaryService.getAll();
    }
}

// SecondaryController.java
package com.example.secondary.controller;

import com.example.secondary.entity.SecondaryEntity;
import com.example.secondary.service.SecondaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/secondary")
public class SecondaryController {

    @Autowired
    private SecondaryService secondaryService;

    @GetMapping("/all")
    public List<SecondaryEntity> getAll() {
        return secondaryService.getAll();
    }
}

通过上述步骤,就可以在 Spring Boot 项目中使用 MyBatis-Plus 实现多数据源支持了。这种配置方式可以方便地管理和使用不同的数据源,适应不同的业务需求。

到此这篇关于MyBatis-Plus多数据源的示例代码的文章就介绍到这了,更多相关MyBatis-Plus多数据源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot使用IDEA远程Debug

    springboot使用IDEA远程Debug

    项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug,本文就来介绍一下如何使用
    2021-06-06
  • Java中synchronized锁的深入理解

    Java中synchronized锁的深入理解

    这篇本文主要对Java中synchronized锁进行深入理解,文中通过synchronized的优化,synchronized的实现原理及synchronized的升级过程来介绍Java中synchronized锁,感兴趣的同学可以跟着小编一起来学习
    2023-05-05
  • Java中的ClassLoader双亲委派机制详解

    Java中的ClassLoader双亲委派机制详解

    这篇文章主要介绍了Java中的ClassLoader双亲委派机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • java虚拟机学习笔记基础篇

    java虚拟机学习笔记基础篇

    在本篇文章里小编给大家整理的是关于java虚拟机学习笔记的相关内容,分享了一些基础知识点,需要的朋友们参考下。
    2019-06-06
  • 浅析Java中StringBuffer和StringBuilder的使用

    浅析Java中StringBuffer和StringBuilder的使用

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。本文就来和大家简单聊聊这二者的使用与区别吧,希望对大家有所帮助
    2023-04-04
  • Java可重入锁的实现示例

    Java可重入锁的实现示例

    在java中,可重入锁分为两种,即synchronized锁以及ReentrantLock及其实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • @RequestBody时第二个字母大写,映射不到的解决

    @RequestBody时第二个字母大写,映射不到的解决

    这篇文章主要介绍了@RequestBody时第二个字母大写,映射不到的解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot3 整合Docker-Compose的实现步骤

    SpringBoot3 整合Docker-Compose的实现步骤

    本文主要介绍了SpringBoot3 整合Docker-Compose的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • Java实现json数据处理的常用脚本分享

    Java实现json数据处理的常用脚本分享

    这篇文章主要为大家详细介绍了Java实现json数据处理的常用脚本,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以学习一下
    2023-03-03
  • java获取一个文本文件的编码(格式)信息

    java获取一个文本文件的编码(格式)信息

    这篇文章主要介绍了java获取一个文本文件的编码(格式)信息,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论