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

云南北宸电力电子设备有限公司 2026/09/09 19:00: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 的分库分表。我们使用了一个简单的用户登录表作为示例,带你一步步实现了分库分表的功能。
这种方式不仅能优化数据库性能,还能提高系统的可扩展性。


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

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

网站建设招聘网站建设咨询

第一章:智谱清言的Open-AutoGLM功能怎么使用Open-AutoGLM 是智谱清言平台推出的一项自动化大模型任务处理功能,旨在帮助开发者快速构建、调试和部署基于 G

2026/06/30 10:18:19

pc网站建设内蒙古网站建设

群晖DSM 7.2.2系统Video Station功能完整恢复终极指南:3个步骤实现完美安装【免费下载链接】Video_Station_for_DSM_722Script to ins

2026/06/30 10:56:22

上海网站建设西安网站建设公司

用JavaScript监听ComfyUI事件实现DDColor进度条更新在处理老照片修复这类视觉任务时,用户最怕的不是等待本身,而是“不知道还要等多久”。尤其是在使用 Co

2026/06/30 13:03:34

电器网站建设机票网站建设

Mac的权限是非常严密的,一旦没有数字签名,系统就会直接拒绝运行,但是有一种方法可以再次运行,在设置->隐私和安全性->最下面会出现

2026/06/30 13:59:08

莆田网站建设遵义网站建设

Odigos:基于eBPF和OpenTelemetry的零侵入式可观测性革命【免费下载链接】odigosDistributed tracing without code changes.

2026/06/30 10:28:50

建设部网站容桂网站建设

导读:在Linux宿主机上玩Docker,net.ipv4.ip_forward这个内核参数绝对是绕不开的关键。很多运维和开发同学会疑惑:这个参数默认是1&#

2026/06/30 13:19:35

河南网站建设石家庄网站建设

Boofuzz模糊测试实战指南:从入门到精通【免费下载链接】boofuzzA fork and successor of the Sulley Fuzzing Framework项目地址

2026/06/30 13:41:06

医院网站建设宜昌网站建设

Web3 系统的开发已经从“炒作驱动”转向“实用驱动”。开发一个区块链 Web3 系统不再仅仅是写几个智能合约,而是构建一个涵盖去中心化身份 (DID)、高性能 L2/L3 网络以及AI

2026/06/30 13:34:36