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

上海渣渣体育有限公司 2026/09/09 18:20:30

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


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

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

银川网站建设山西网站建设

Hunyuan-MT-7B-WEBUI:让大模型翻译真正“用得上”在内容全球化加速的今天,语言早已不再是简单的交流工具,而成为信息流动、文化传播和商业拓展的关

2026/06/30 11:41:26

广州网站建设工作室宁波网站建设公司

一、反射1. 反射获取构造方法在Java中,反射获取构造方法是实现动态创建对象的关键技术。它使程序能够在运行时:动态加载未知类突破私有访问限制(如私有构造方法

2026/06/30 12:27:01

福田网站建设遵义网站建设

在当今复杂的网络环境中,网络设备配置的及时备份已成为保障业务连续性的关键环节。传统的手动备份方式不仅效率低下,还容易因人为疏忽导致关键配置丢失。本文将为网络运维工程师提供一

2026/06/30 11:03:23

肇庆网站建设胶州网站建设

你的Windows 11是否经常出现响应迟缓、应用启动缓慢、系统卡顿等问题?这些问题不仅影响日常使用体验,更会降低工作效率。本文将为你提供一套完整的系统性能优化方案

2026/06/30 10:30:20

网站建设总结机票网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:开发一个代码效率对比工具,能够:1. 记录开发者

2026/06/30 11:49:27

企业网站建设方案潜江网站建设

🔥 阿里通义千问团队刚刚发布的Qwen3-14B开源大模型,凭借其革命性的双模推理架构,正在重新定义AI落地的成本效率边界!这个仅14B参数的

2026/06/30 10:35:20

成都建设网站云网站建设

OpenLDAP 高级配置与目录覆盖层详解1. 减少dbnosync风险使用dbnosync运行时存在一定风险,但可以通过checkpoint指令来降低(虽不能完全消除)。设置checkpoint会使

2026/06/30 11:42:26

免费企业网站建设福州网站建设

vJoy虚拟控制器终极指南:为什么开发者都在用这个开源解决方案?【免费下载链接】vJoyVirtual Joystick项目地址: https://gitcode.com/

2026/06/30 13:00:04

门户网站建设网站建设和

DBSyncer终极指南:一站式数据库同步工具完全攻略【免费下载链接】dbsyncerDBSyncer(简称dbs)是一款开源的数据同步中间件,

2026/06/30 12:29:01

鞍山网站建设益阳网站建设

Pony V7:AuraFlow驱动的超高清角色生成新工具【免费下载链接】pony-v7-base项目地址: https://ai.gitcode.com/hf_mirrors/purp

2026/06/30 10:42:51