当前位置: 首页 > news >正文

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

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


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

http://www.rkmt.cn/news/122533.html

相关文章:

  • 从“十五五”规划建议看智慧工厂重点发展方向
  • 如何快速解决乱码问题:编码转换工具深度使用指南
  • 模板匹配定位与找圆找线卡尺ROI跟随 - C# OpenCVSharp与自定义控件库
  • 加班写公文到 10 点?2025年6款AI公文写作软件实测,帮你省 80% 写作时间!
  • 基于八种智能优化算法在CEC2017的测试与Friedman评价指标的matlab实现:运行效果展示
  • LeetDown免费降级工具:A6/A7设备完整降级终极指南
  • 服务器性能优化实战:从资源瓶颈定位到极致调优(附租赁服务器适配指南)
  • 【计算机毕业设计案例】基于springboot的ai识别宠物小程序快速识别宠物品种、年龄、健康状况(程序+文档+讲解+定制)
  • Simulink微网多逆变器下垂控制仿真模型:固定与可调的下垂系数、SVPWM与算法控制的并联运行
  • No096:苏轼AI:智能的文学综合与人生智慧
  • 汇编语言全接触-34.RichEdit 控件:更多的正文操作
  • Java并发编程中的线程安全问题与解决方案全解析
  • Oracle DBCA命令删除数据库
  • 2025年最受好评的清障车企业,你选对了吗?,常奇清障车/程力清障车/五十铃清障车/落地清障车/清障车/8吨清障车企业排行榜 - 品牌推荐师
  • 2025最新螺旋叶片厂家 Top5 推荐:聚焦实力企业,精准适配多元需求 - 深度智识库
  • 速藏!Java程序员转AI大模型:从编码到AI的职业升级宝典
  • 测试博文标题 at 12/18/2025 6:09:29 PM
  • 2025年12月GEO,GEO优化,GEO技术公司推荐:AI搜索适配评测与选型实用指南 - 品牌鉴赏师
  • DevUI 实战教程:从零构建电商后台管理系统(完整版) - 指南
  • 【必收藏】2025年AI大模型学习路线图与资源包,含300+面试题+1200+工具
  • AI 时代顶极人才的五力能力
  • 程序员职业发展路线图
  • 调用OutlinedTextField遇到的问题
  • 2025义乌国际物流服务商综合竞争力推荐榜—聚焦美国双清包税与DDP服务,甄选本地可靠合作伙伴 - 呼呼拉呼
  • VC6.0常用快捷键介绍,涵盖编辑、编译、调试等环节
  • 【强烈收藏】大模型应用架构详解:零基础也能掌握的六大层次实战指南
  • Synbo项目重点进展|完成可扩展的流动性市场框架集成设计
  • 详细介绍:Python 编程实战 进阶与职业发展:Web 全栈(Django / FastAPI)
  • StaMPS:从卫星雷达数据提取地面形变信息的专业工具
  • 如何用Kotaemon连接向量数据库并优化检索效率?