SpringBoot3.4.2基于MyBatis和MySQL8多数据源使用示例
SpringBoot3.4.2基于MyBatis和MySQL8多数据源使用示例

前一篇本专栏文章SpringBoot3.4.1基于MySQL8和Quartz实现定时任务管理。今天分享SpringBoot3.4.2基于MyBatis和MySQL8多数据源使用示例。我们在实际的项目开发过程中会同时连接多个数据库进行企业级应用系统功能的开发,基于此背景今天实现多数据源功能。
完整代码在文章最后,如果觉得本篇文章对你有用,记得点赞、关注、收藏哦。你的支持是我持续更新的动力!
文章最后可以加入免费的Java&AI技术和支付系统沟通社群,一起探讨Java/你的产品如何与AI结合,请按照要求加入。在群中可以聊开发、系统设计、架构、行业趋势、AI等等话题
SpringBoot3专栏软件环境
- JDK17.0.12
- SpringBoot3.4.2
- MyBatis3.5.19
- MySQL8.4.3
- IDEA2024.3.3
我们先看本篇文章对应的项目结构,请看下图

1 项目搭建
1.1 pom依赖配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.itbeien</groupId>
<artifactId>springboot3-labs-master</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>springboot-mybatis-multi-datasource</artifactId>
<properties>
<mysql-connector-java-version>8.0.33</mysql-connector-java-version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
1.2 配置信息
mybatis.type-aliases-package=cn.itbeien.multi.entity
spring.datasource.testone.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.testone.username=root
spring.datasource.testone.password=rootpwd20241215
spring.datasource.testone.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.testtwo.jdbc-url=jdbc:mysql://localhost:3306/test2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.testtwo.username=root
spring.datasource.testtwo.password=rootpwd20241215
spring.datasource.testtwo.driver-class-name=com.mysql.cj.jdbc.Driver
1.3 代码实现
1.3.1 多数据源配置
package cn.itbeien.multi.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
@Configuration
@MapperScan(basePackages = "cn.itbeien.multi.mapper.testone", sqlSessionTemplateRef = "testOneSqlSessionTemplate")
public class DataSourceOneConfig {
@Bean(name = "testOneDataSource")
@ConfigurationProperties(prefix = "spring.datasource.testone")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "testOneSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("testOneDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "testOneTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("testOneDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "testOneSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testOneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
1.3.2 数据持久层
package cn.itbeien.multi.mapper.testone;
import cn.itbeien.multi.entity.SysUser;
import org.apache.ibatis.annotations.*;
import java.util.List;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
public interface UserOneMapper {
@Select("SELECT * FROM sys_user")
@Results({
@Result(property = "userSex", column = "user_sex"),
@Result(property = "nickName", column = "nick_name")
})
List<SysUser> getAll();
@Select("SELECT * FROM sys_user WHERE id = #{id}")
@Results({
@Result(property = "userSex", column = "user_sex"),
@Result(property = "nickName", column = "nick_name"),
@Result(property = "userName", column = "user_name")
})
SysUser getOne(Long id);
@Insert("INSERT INTO sys_user(user_name,password,user_sex) VALUES(#{userName}, #{password}, #{userSex})")
void insert(SysUser user);
@Update("UPDATE sys_user SET user_name=#{userName},nick_name=#{nickName} WHERE id =#{id}")
void update(SysUser user);
@Delete("DELETE FROM sys_user WHERE id =#{id}")
void delete(Long id);
}
1.3.3 单元测试
package cn.itbeien.multi;
import cn.itbeien.multi.entity.SysUser;
import cn.itbeien.multi.mapper.testone.UserOneMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* @author itbeien
* 项目网站:https://www.itbeien.cn
* 公众号:贝恩聊架构
* 全网同名,欢迎小伙伴们关注
* Java/AI学习社群
* Copyright© 2025 itbeien
*/
@SpringBootTest
public class MultiBootTest {
@Autowired
private UserOneMapper userMapper;
@Test
public void testInsert() throws Exception {
userMapper.insert(new SysUser("itbeien", "123", "0"));
userMapper.insert(new SysUser("itdatong", "12", "1"));
userMapper.insert(new SysUser("abc", "123", "1"));
}
@Test
public void testQuery() throws Exception {
List<SysUser> users = userMapper.getAll();
if(users==null || users.isEmpty()){
System.out.println("is null");
}else{
System.out.println(users.size());
}
}
@Test
public void testUpdate() throws Exception {
SysUser user = userMapper.getOne(1000l);
System.out.println(user.toString());
user.setNickName("itbeien");
userMapper.update(user);
}
}
2 多数据源代码测试
分别执行数据源1和数据源2单元测试用例,如下图




以上就是今天SpringBoot3.4.2基于MyBatis和MySQL8多数据源使用示例全部内容,文章最后有源码下载地址
欢迎大家关注我的项目实战内容itbeien.cn,一起学习一起进步,在项目和业务中理解各种技术。

欢迎沟通交流技术和支付业务,一起探讨聚合支付/预付卡系统业务、技术、系统架构、微服务、容器化。并结合聚合支付系统深入技术框架/微服务原理及分布式事务原理。加入我的知识星球吧

AI专栏
01IDEA&VsCode集成DeepSeek-V3 API提高编程效率
02IntelliJ IDEA集成主流 AI 编程助手及特性介绍
03Spring AI快速入门-基于DeepSeek&智谱实现聊天应用
04Spring AI中流式对话API如何使用-基于DeepSeek
06SpringAI实现角色扮演(自定义人设)和Prompts模板语法-基于DeepSeek
07LangChain4j实战-Java AI应用开源框架之LangChain4j和Spring AI
SpringBoot3专栏
01SpringBoot3专栏-SpringBoot3.4.0整合Mybatis-plus和Mybatis
02SpringBoot3.4.0结合Mybatis-plus实现动态数据源
03mapstruct对象映射在Springboot3中这样用就对了
04RocketMQ5.3.1集成SpringBoot3.4.0就这样简单
05SpringBoot3.4.0整合Redisson实现分布式锁
06MySQL增量数据同步利器Canal1.1.7环境搭建流程
07SpringBoot3.4.0集成Canal1.1.7实现MySQL实时同步数据到Redis
08基于Docker-SpringBoot3.4.0集成Apache Pulsar4.0.1实现消息发布和订阅
09SpringBoot3.4.0整合消息中间件Kafka和RabbitMQ
10SpringBoot3.4.0整合ActiveMQ6.1.4
11SpringBoot3整合Spring Security6.4.2 安全认证框架实现简单身份认证
12SpringBoot3.4.1和Spring Security6.4.2实现基于内存和MySQL的用户认证
13SpringBoot3.4.1和Spring Security6.4.2结合OAuth2实现GitHub授权登录
14SpringBoot3.4.1和Spring Security6.4.2结合JWT实现用户登录
16SpringBoot3.4.1基于MySQL8和Quartz实现定时任务管理
跟着我学微服务系列
01跟着我学微服务,什么是微服务?微服务有哪些主流解决方案?
05SpringCloudAlibaba之图文搞懂微服务核心组件在企业级支付系统中的应用
06JDK17+SpringBoot3.4.0+Netty4.1.115搭建企业级支付系统POS网关
07JDK17+SpringCloud2023.0.3搭建企业级支付系统-预付卡支付交易微服务
08JDK17+Dubbo3.3.2搭建企业级支付系统-预付卡支付交易微服务
09JDK17+SpringBoot3.3.6+Netty4.1.115实现企业级支付系统POS网关签到功能
贝恩聊架构-项目实战地址
欢迎大家一起讨论学习,加我备注"Java/AI"拉你进入Java&AI技术讨论群,备注"聚合支付"拉你进入支付系统讨论群,在技术学习、成长、工作的路上不迷路!加我后不要急,每天下午6点左右通过!营销号免入

3 源码地址
贝恩聊架构-SpringBoot3专栏系列文章、资料和源代码会同步到以下地址,代码和资料每周都会同步更新
该仓库地址主要用于存放贝恩聊架构-SpringBoot3专栏、贝恩聊架构-AI专栏、基于企业级支付系统学习微服务整体技术栈所有资料和源码
