网站建设书青岛网站建设哪家好

合肥小火炉餐饮服务有限公司 2026/09/09 18:02:50

【超简单三分钟学会】Spring Boot 项目实现 MySQL 分库分表——用用户登录数据做示范

在这个教程中,我们将通过一个简单的用户登录表示例,来学习如何在Spring Boot项目中实现MySQL 分库分表。通过这个分布式数据库的技术,你将能够处理更大规模的数据量,提高系统的性能和可扩展性。


本教程适合的对象:

  • Spring Boot 初学者
  • 对 MySQL 分库分表有兴趣的开发者
  • 希望优化数据库性能的人

🛠️ 环境配置

我们需要的开发环境配置如下:

  • Spring Boot 版本:2.x
  • MySQL 版本:5.x 或 8.x
  • ShardingSphere-JDBC 版本:3.x(用于分库分表)
  • MyBatis(用于操作数据库)

1. 引入必要的依赖

pom.xml文件中,添加以下依赖:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- ShardingSphere JDBC --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-core</artifactId><version>5.0.0</version></dependency><!-- MyBatis 框架 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!-- Spring Boot Starter JDBC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency></dependencies>

2. 配置数据库连接(分库分表)

application.yml中配置数据库连接以及 ShardingSphere 的分库分表规则。

application.yml配置示例

spring:datasource:url:jdbc:mysql://localhost:3306/db1,localhost:3307/db2username:rootpassword:passworddriver-class-name:com.mysql.cj.jdbc.Driverhikari:maximum-pool-size:10minimum-idle:2# ShardingSphere 配置shardingsphere:datasource:names:ds0,ds1datasource:ds0:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/db0username:rootpassword:passwordds1:type:com.zaxxer.hikari.HikariDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3307/db1username:rootpassword:passwordsharding:tables:user_login:actual-data-nodes:ds$->{0..1}.user_login_$->{0..1}table-strategy:inline:sharding-column:user_idalgorithm-expression:user_login_$->{user_id % 2}

配置解释:

  • 数据源配置:配置了ds0ds1两个数据库,分别连接到 MySQL 的不同数据库实例。
  • 分库分表配置:通过user_id % 2来决定数据存储在哪个user_login_0user_login_1表中。

3. 创建数据库和表

在 MySQL 中创建数据库和对应的分表。

SQL 脚本

CREATEDATABASEdb0;CREATEDATABASEdb1;-- 创建分库分表CREATETABLEdb0.user_login_0(user_idINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(100),last_login_timeDATETIME);CREATETABLEdb0.user_login_1(user_idINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(100),last_login_timeDATETIME);CREATETABLEdb1.user_login_0(user_idINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(100),last_login_timeDATETIME);CREATETABLEdb1.user_login_1(user_idINTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(100),last_login_timeDATETIME);
  • user_login_0user_login_1:表将根据user_id % 2来决定数据的存储位置。

4. 编写 Mapper 接口和 Mapper XML 文件

4.1 创建 Mapper 接口

mapper包下创建UserLoginMapper.java接口,定义插入和查询方法。

packagecom.example.demo.mapper;importcom.example.demo.model.UserLogin;importorg.apache.ibatis.annotations.Insert;importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Select;importorg.apache.ibatis.annotations.Param;@MapperpublicinterfaceUserLoginMapper{// 插入数据@Insert("INSERT INTO user_login_${user_id % 2} (user_id, username, password, last_login_time) "+"VALUES (#{userId}, #{username}, #{password}, #{lastLoginTime})")voidinsertUserLogin(UserLoginuserLogin);// 根据 user_id 查询数据@Select("SELECT * FROM user_login_${user_id % 2} WHERE user_id = #{userId}")UserLogingetUserLoginById(@Param("userId")intuserId);}

4.2 创建 Mapper XML 文件

然后在resources/mapper目录下创建UserLoginMapper.xml文件,添加 SQL 语句映射。

<?xml version="1.0" encoding="UTF-8" ?><mappernamespace="com.example.demo.mapper.UserLoginMapper"><!-- 插入用户登录数据 --><insertid="insertUserLogin"parameterType="com.example.demo.model.UserLogin">INSERT INTO user_login_${user_id % 2} (user_id, username, password, last_login_time) VALUES (#{userId}, #{username}, #{password}, #{lastLoginTime})</insert><!-- 根据 user_id 查询用户登录信息 --><selectid="getUserLoginById"resultType="com.example.demo.model.UserLogin">SELECT * FROM user_login_${user_id % 2} WHERE user_id = #{userId}</select></mapper>

4.3 创建UserLogin实体类

model包下创建UserLogin.java实体类。

packagecom.example.demo.model;importjava.util.Date;publicclassUserLogin{privateintuserId;privateStringusername;privateStringpassword;privateDatelastLoginTime;// Getters and Setters}

5. 测试与验证

现在你可以通过 Spring Boot 应用来测试你的分库分表配置是否生效。

  1. 启动 Spring Boot 项目。

  2. 使用 Postman 或浏览器测试接口,插入一条用户登录数据并查询。

    @AutowiredprivateUserLoginMapperuserLoginMapper;publicvoidtestInsertAndQuery(){UserLoginuserLogin=newUserLogin();userLogin.setUserId(1);userLogin.setUsername("testuser");userLogin.setPassword("password");userLogin.setLastLoginTime(newDate());// 插入数据userLoginMapper.insertUserLogin(userLogin);// 查询数据UserLoginqueriedUser=userLoginMapper.getUserLoginById(1);System.out.println(queriedUser.getUsername());}

END

通过本教程,你已经学会了如何在Spring Boot项目中使用MyBatis配置 MySQL 的分库分表。我们使用了一个简单的用户登录表作为示例,带你一步步实现了分库分表的功能。
这种方式不仅能优化数据库性能,还能提高系统的可扩展性。


如果你对本教程有任何疑问,欢迎留言!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

唐山网站建设网站建设技术

如何在5分钟内彻底解决macOS上res-downloader的配置难题【免费下载链接】res-downloader资源下载器、网络资源嗅探,支持微信视频号下载、网页抖音无水印下载、网页

2026/06/30 10:17:19

佛山网站建设建设公司网站

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等

2026/06/30 11:58:58

珠海网站建设黑龙江网站建设

用自然语言描述生成情绪化语音?IndexTTS 2.0 + Qwen-3 实现情感驱动在短视频、虚拟主播和有声书内容爆发的今天,一个声音是否“有情绪”,

2026/06/30 10:32:50

长沙网站建设公司哈尔滨网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:创建一个React Agent应用,能够根据用户输入的需求自动

2026/06/30 12:46:03

广西网站建设建设网站建设

小米运动刷步神器:微信支付宝自动同步终极指南【免费下载链接】mimotion小米运动刷步数(微信支付宝)支持邮箱登录项目地址: https://gitcode

2026/06/30 10:24:19

建设局网站泉州网站建设

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等

2026/06/30 13:38:36

建设厅网站洛阳网站建设

基于单片机的多路温湿度采集与WIFI智能报警控制系统设计点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_5106148

2026/06/30 14:07:38

河南网站建设大庆网站建设

游戏DLC解锁工具终极指南:快速免费获取完整游戏体验【免费下载链接】CreamApi项目地址: https://gitcode.com/gh_mirrors/cr/CreamApi想要免

2026/06/30 12:09:59

永州网站建设遵义网站建设

网络扫描检测与psad应用全解析1. UDP扫描特性与检测UDP扫描相较于TCP扫描,由于UDP协议本身比TCP简单,且不存在类似TCP“连接”的概念,因此其扫描表现没有TCP扫描丰富。不过,ipta

2026/06/30 13:27:06