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

北京市泰赐传媒有限公司 2026/09/09 19:28:29

【超简单三分钟学会】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 的分库分表。我们使用了一个简单的用户登录表作为示例,带你一步步实现了分库分表的功能。
这种方式不仅能优化数据库性能,还能提高系统的可扩展性。


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

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

牡丹江网站建设聊城网站建设

PyTorch-CUDA-v2.7镜像如何应对OOM内存溢出问题在深度学习项目推进过程中,你是否曾遇到这样的场景:训练脚本刚跑起来,显存使用瞬间飙升ÿ

2026/06/30 11:40:27

胶州网站建设网站设计与建设

微PE启动优盘驱动老旧设备运行IndexTTS2:让旧电脑也能发声在许多学校机房、社区服务中心甚至偏远地区的办公室里,仍有不少尘封已久的“老古董”电脑——它们或许是十年前的

2026/06/30 11:17:54

东莞网站建设网站建设高端

HuggingFace镜像网站同步更新lora-scripts项目,加速模型加载速度在生成式人工智能(AIGC)技术席卷各行各业的今天,越来越多

2026/06/30 13:32:36

网站建设合同盐城网站建设

还在为繁重的职教平台课程任务而烦恼吗?hcqHome智能刷课助手通过自动化技术,帮你轻松应对职教云、智慧职教、资源库三大平台的课程学习需求。这款开源工具不仅能够大幅节省你的

2026/06/30 14:11:39

广西网站建设浙江省建设信息港网站

Kotaemon能否用于图书馆检索?公共文化服务创新在智能问答系统日益普及的今天,图书馆这类传统知识服务机构正面临一个根本性问题:如何让沉睡在书架与数据库中的

2026/06/30 10:23:49

开县网站建设湖南网站建设

Sonic未来版本路线图:或将加入全身动作生成功能在短视频内容爆炸式增长的今天,一个现实摆在创作者面前:观众对“真人出镜”的期待越来越高,但拍摄

2026/06/30 11:23:55

郑州建设网站辽宁网站建设

如何快速部署YimMenu:GTA V玩家的终极防护指南【免费下载链接】YimMenuYimMenu, a GTA V menu protecting against a wide ra

2026/06/30 12:51:33

网站建设学习国家建设部网站

Langchain-Chatchat用于法律文书查询的可行性分析在律师事务所的日常工作中,一个常见的场景是:律师需要快速查找《劳动合同法》中关于经济补偿金的具体计算方式。传

2026/06/30 13:16:35

青海网站建设装饰网站建设

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 论文查重https://www.paperzz.cc/check论文提交前的 “查重环节”

2026/06/30 11:51:28

成都网站建设公司顺德网站建设

Saladict:跨平台桌面翻译工具的快速上手指南【免费下载链接】saladict-desktop✨✨桌面划词与翻译工具,聚合了 N 多词典,功能强大

2026/06/30 12:12:59