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

Spring Boot(06):Spring Boot与MySQL搭配,打造极简高效的数据管理系统

1. 前言

        Spring Boot 是一个基于Spring框架的快速开发框架,可以使开发者快速搭建一个可靠的Java Web应用程序。而MySQL是最广泛使用的关系型数据库系统之一,也是Spring Boot整合数据库的首选。本文将介绍Spring Boot如何整合MySQL数据库。

2. 摘要

        本文将通过使用Spring Boot和MySQL数据库来创建一个简单的Java Web应用程序。首先,我们将介绍如何配置Spring Boot,然后我们将使用JPA(Java Persistence API)和Hibernate来管理实体类对象和数据库之间的映射。最后,我们将使用Spring Data JPA来查询和操作数据库中的数据。

3. 目录

  1. Spring Boot与MySQL的整合基础知识

  2. 配置Spring Boot的Maven依赖

  3. 配置MySQL数据库连接

  4. 使用JPA和Hibernate来管理实体类和数据库之间的映射

  5. 使用Spring Data JPA查询和操作数据库中的数据

  6. 测试用例

  7. 总结

4. 正文

4.1 Spring Boot与MySQL的整合基础知识

        Spring Boot是一个基于Spring框架的快速开发框架,可以使开发者快速搭建一个可靠的Java Web应用程序。Spring Boot提供了很多开箱即用的功能,例如自动配置、优雅的错误处理、嵌入式Web服务器、安全性、监控等。

        MySQL是最广泛使用的关系型数据库系统之一,也是Spring Boot整合数据库的首选。MySQL支持多种数据类型、主从复制、分区等特性。除此之外,MySQL也提供了很多优秀的支持工具,例如MySQL Workbench、MySQL Connector/J等。

4.2 配置Spring Boot的Maven依赖

        在开始之前,我们需要在Maven项目中添加Spring Boot和MySQL的依赖。在pom.xml文件中添加以下依赖:

<dependencies><!-- Spring Boot依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Spring Data JPA依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>
</dependencies>

4.3 配置MySQL数据库连接

        在配置MySQL数据库连接之前,我们需要在本地安装MySQL数据库。安装完成之后,我们需要创建数据库和用户。

在MySQL中创建数据库:

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

在MySQL中创建用户:

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';

为用户赋予对数据库的权限:

GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';

现在我们已经准备好了MySQL数据库,下一步是在Spring Boot中配置MySQL数据库连接。

在application.properties文件中添加以下配置:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf-8
spring.datasource.username=myuser
spring.datasource.password=mypassword

4.4 使用JPA和Hibernate来管理实体类和数据库之间的映射

        接下来,我们要使用JPA和Hibernate来管理实体类和数据库之间的映射。JPA是一个Java持久化规范,Hibernate是一个实现JPA规范的ORM框架,可以将Java中的对象映射到数据库中的表。

        在src/main/java目录下创建一个名为com.example.demo的包,并创建一个名为User的实体类:

@Entity
@Table(name = "user")
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// getter和setter方法省略
}

        在实体类上使用@Entity注解标注实体类,使用@Table注解对应数据库表名,在属性上使用@Id注解标识主键,使用@GeneratedValue注解指定主键值的生成策略。

        接下来,我们需要创建一个名为UserRepository的Repository接口来操作数据库。使用Spring Data JPA可以大大简化我们的开发工作。在src/main/java目录下创建一个名为com.example.demo.repository的包,并创建一个名为UserRepository的接口:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

        可以看到,这个接口继承了JpaRepository接口,该接口已经实现了基本的CRUD操作,我们不需要再手写这些操作的方法。

4.5 使用Spring Data JPA查询和操作数据库中的数据

        现在我们已经创建了User实体类和UserRepository接口,下一步是使用Spring Data JPA查询和操作数据库中的数据。

在src/main/java目录下创建一个名为com.example.demo.controller的包,并创建一个名为UserController的Controller类:

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserRepository userRepository;@GetMapping("")public List<User> getUsers() {return userRepository.findAll();}@PostMapping("")public User createUser(@RequestBody User user) {return userRepository.save(user);}
}

        在UserController类上使用@RestController注解标识该类为控制器类,使用@RequestMapping注解来指定映射路径。

        在getUser()方法中,我们使用userRepository.findAll()方法查询数据库中的所有用户,并返回一个用户列表。

        在createUser()方法中,我们使用@RequestBody注解将请求体中的JSON数据映射到User对象中,并使用userRepository.save(user)方法将User对象保存到数据库中,并返回保存后的User对象。

4.6 测试用例

        我们使用Postman来测试我们的应用程序。

发送GET请求并获取所有用户:

URL:http://localhost:8080/users
Method:GET

发送POST请求并创建一个新用户:

URL:http://localhost:8080/users
Method:POST
Body:{"name": "Tom","email": "tom@example.com"
}

5. 总结

        本文介绍了如何使用Spring Boot和MySQL来创建一个简单的Java Web应用程序。我们使用了JPA和Hibernate来管理实体类和数据库之间的映射,并使用了Spring Data JPA来查询和操作数据库中的数据。同时,我们也编写了测试用例来测试我们的应用程序。

        在本文中,我们学习了如何配置MySQL数据库连接、创建实体类、创建Repository接口、使用Spring Data JPA来操作数据库中的数据,以及如何编写测试用例。通过本文的介绍,相信读者已经了解了Spring Boot和MySQL的整合,并可以用它来快速搭建自己的Java Web应用程序。

相关文章:

Spring Boot(06):Spring Boot与MySQL搭配,打造极简高效的数据管理系统

1. 前言 Spring Boot 是一个基于Spring框架的快速开发框架&#xff0c;可以使开发者快速搭建一个可靠的Java Web应用程序。而MySQL是最广泛使用的关系型数据库系统之一&#xff0c;也是Spring Boot整合数据库的首选。本文将介绍Spring Boot如何整合MySQL数据库。 2. 摘要 本文…...

Vue3 + Vite 构建组件库发布到 npm

你有构建完组件库后&#xff0c;因为不知道如何发布到 npm 的烦恼吗&#xff1f;本教程手把手教你用 Vite 构建组件库发布到 npm 搭建项目 这里我们使用 Vite 初始化项目&#xff0c;执行命令&#xff1a; pnpm create vite my-vue-app --template vue这里以我的项目 vue3-xm…...

Vite多环境配置与打包:灵活高效的Vue开发工作流

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

从零实现诗词GPT大模型:数据集介绍和预处理

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 本章将介绍该系列文章中使用的数据集&#xff0c;并且编写预处理代码&#xff0c;处理成咱们需要的格式。 一、数据集介绍 咱们使用的数据集名称是chinese-poetry&#xff0c;是一个在github上开源的中文诗…...

45.HarmonyOS鸿蒙系统 App(ArkUI)创建列表(List)

列表是一种复杂的容器&#xff0c;当列表项达到一定数量&#xff0c;内容超过屏幕大小时&#xff0c;可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集&#xff0c;例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求&#xff08;如通讯录、音乐列…...

推荐算法之协同过滤

算法原理 透过百科&#xff0c;我们了解到协同过滤推荐&#xff08;Collaborative Filtering recommendation&#xff09;是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同&#xff0c;协同过滤算法结合用户行为分析用户…...

Kotlin 面试题

lifecycleScope.launchWhenResumed launchWhenResumed是一个扩展函数,它是LifecycleCoroutineScope的一部分,并且它是在Android的Lifecycle库中引入的。 这个函数的主要目的是在Lifecycle的对应组件(通常是Activity或Fragment)处于“resumed”状态时启动协程。 public fun …...

TCM(Tightly Coupled Memory)紧密耦合存储器简介

在ARM Cortex处理器中&#xff0c;TCM通常指的是紧密耦合存储器&#xff08;Tightly Coupled Memory&#xff09;。TCM是一种位于处理器核心旁边的高速存储器&#xff0c;它的设计目的是为了提供低延迟和高带宽的内存访问性能。 TCM的特点是它与处理器内核紧密耦合&#xff0c;…...

《自动机理论、语言和计算导论》阅读笔记:p172-p224

《自动机理论、语言和计算导论》学习第 8 天&#xff0c;p172-p224总结&#xff0c;总计 53 页。 一、技术总结 1.Context-Free Grammar(CFG) 2.parse tree (1)定义 p183&#xff0c;But perhaps more importantly, the tree, known as a “parse tree”, when used in a …...

typescript playwright 笔记

录制调式 命令 npx playwright codegen url npx playwright codegen https://www.baidu.com/typescript 中 format 和 split 的使用 import * as util from util;const str1 hellow %s; const format util.format; const str2 format(str1, word);// 提取taskId const str3…...

从零实现诗词GPT大模型:了解Transformer架构

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 这篇文档我们开始对GPT的核心组件Transformer进行一个详细的讲解, 加急编写中…...

温故知新之-TCP Keepalive机制及长短连接

[学习记录] 前言 TCP连接一旦建立&#xff0c;只要连接双方不主动 close &#xff0c;连接就会一直保持。但建立连接的双方并不是一直都存在数据交互&#xff0c;所以在实际使用中会存在两种情况&#xff1a;一种是每次使用完&#xff0c;主动close&#xff0c;即短连接&…...

架构师系列-搜索引擎ElasticSearch(七)- 集群管理之分片

集群健康检查 Elasticsearch 的集群监控信息中包含了许多的统计数据&#xff0c;其中最为重要的一项就是集群健康&#xff0c;它在 status字段中展示为 green&#xff08;所有主分片和副本分片都正常&#xff09;、yellow&#xff08;所有数据可用&#xff0c;有些副本分片尚未…...

基于Spring Boot实现的图书个性化推荐系统

基于Spring Boot实现的图书个性化推荐系统 开发语言&#xff1a;Java语言 数据库&#xff1a;MySQL工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统实现 前台首页功能模块 学生注册 登录 图书信息 个人信息 管理员功能模块 学生管理界面图 图书分类管理界面图 图书信息管…...

安全加速SCDN带的态势感知能为网站安全带来哪些帮助

随着安全加速SCDN被越来越多的用户使用&#xff0c;很多用户都不知道安全加速SCDN的态势感知是用于做什么的&#xff0c;德迅云安全今天就带大家来了解下什么是态势感知&#xff0c;态势感知顾名思义就是对未发生的事件进行预知&#xff0c;并提前进行防范措施的布置&#xff0…...

java面向对象.day21(继承02--super)

说明 super父 this当前 使用super时&#xff0c;首先要继承父类&#xff0c;其次是在子类里面才能使用super。 继承父类后&#xff0c;运行子类时会同时调用父类的构造方法&#xff0c;如果要显性调用父类的构造方法必须在子类的第一行调用。 单使用super()表示调用父类构造…...

【数据结构】4.List的介绍

目录 1.什么是List 2.常见接口介绍 3.List的使用 1.什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下&#xff1a; Iterable也是一个接口…...

acwing算法提高之图论--最近公共祖先

目录 1 介绍2 训练 1 介绍 本博客用来记录"对于有根图中&#xff0c;求最近公共祖先"的题目。 求解方法&#xff1a; 向上标记法。每次求两个结点的最近公共祖先的时间复杂度是O(N)。由于时间复杂度较高&#xff0c;通常不用。倍增法。 倍增法重要思路&#xff1…...

C语言 函数——断言与防御式编程

目录 如何确定假设的真假&#xff1f; 断言 防御式编程&#xff08;Defensive programming&#xff09; 如何确定假设的真假&#xff1f; 程序中的假设 *某个特定点的某个表达式的值一定为真 *某个特定点的某个表达式的值一定位于某个区间等 问题&#xff1a;如何确定这些…...

【opencv】示例-travelsalesman.cpp 使用模拟退火算法求解旅行商问题

// 载入 OpenCV 的核心头文件 #include <opencv2/core.hpp> // 载入 OpenCV 的图像处理头文件 #include <opencv2/imgproc.hpp> // 载入 OpenCV 的高层GUI(图形用户界面)头文件 #include <opencv2/highgui.hpp> // 载入 OpenCV 的机器学习模块头文件 #includ…...

西门子S7-300/400老系统改造:用DP/DP Coupler打通新旧产线数据(附Step7组态避坑点)

西门子S7-300/400老系统改造&#xff1a;用DP/DP Coupler打通新旧产线数据&#xff08;附Step7组态避坑点&#xff09; 在工业自动化领域&#xff0c;老旧产线升级改造往往面临新旧设备通讯协议不兼容的难题。当传统S7-300系统需要与现代化S7-400或带PN接口的PLC进行数据交互时…...

Sora 2 + After Effects 24.4终极联动教程:含LUT自动映射、运动追踪反哺、动态遮罩同步(附独家.jsx插件)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sora 2与After Effects 24.4深度整合概览 Adobe After Effects 24.4 正式引入对 OpenAI Sora 2 模型输出格式的原生支持&#xff0c;标志着生成式视频工作流首次在专业后期平台中实现端到端闭环。该整…...

AI智能体记忆系统设计:分层架构与向量化检索实战

1. 项目概述&#xff1a;一个为AI智能体设计的记忆系统最近在折腾AI智能体&#xff08;Agent&#xff09;相关的项目&#xff0c;发现一个挺有意思的痛点&#xff1a;如何让这些智能体拥有“记忆”&#xff1f;不是那种简单的对话历史记录&#xff0c;而是更接近人类工作记忆和…...

AI设计风格Prompt实战指南:从32种风格词典到精准生成

1. 项目概述&#xff1a;一份给AI设计师的“风格词典”如果你和我一样&#xff0c;经常用 Claude、Cursor 或者 v0 这类 AI 工具来生成网页界面&#xff0c;那你肯定遇到过这个头疼的问题&#xff1a;脑子里想的是“赛博朋克”或者“瑞士风格”&#xff0c;但打出来的 prompt 却…...

SITS 2026多目标优化落地指南:从梯度冲突到任务解耦,7步实现Pareto前沿精度提升23.6%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生多任务学习&#xff1a;SITS 2026多目标优化实战技巧 在SITS 2026竞赛框架下&#xff0c;AI原生多任务学习&#xff08;AI-Native Multi-Task Learning, AMTL&#xff09;不再依赖传统单任务迁移…...

电力系统网络安全:从风险认知到威胁建模的实战指南

1. 从日常运维到风险认知&#xff1a;重新审视大容量电力系统的安全基线在能源行业干了十几年&#xff0c;我见过太多同行把大容量电力系统&#xff08;Bulk Energy System, BES&#xff09;的运维简化为“确保别停电”。日常的告警处理、设备巡检、工单流转构成了工作的全部叙…...

从STM32到华大HC32F460:手把手移植USB HOST MSC + FatFs R0.13c(含源码对比与避坑指南)

从STM32到华大HC32F460&#xff1a;USB HOST MSC与FatFs移植实战全解析 1. 迁移背景与核心挑战 对于长期使用STM32的嵌入式开发者而言&#xff0c;切换到华大半导体HC32F460系列MCU既是一次技术升级&#xff0c;也面临实际移植的挑战。USB HOST MSC&#xff08;Mass Storage Cl…...

从“鸡尾酒会”到手机通话:用生活场景图解CDMA码分多址到底是怎么“听清”你的

鸡尾酒会里的通信密码&#xff1a;用生活场景拆解CDMA如何从噪音中识别你的声音 1. 当鸡尾酒会遇见通信技术 想象你站在一个嘈杂的鸡尾酒会现场&#xff0c;四周充斥着数十人同时进行的对话。神奇的是&#xff0c;尽管声波在空气中混杂叠加&#xff0c;你的大脑却能自动过滤无关…...

面试被问烂的20道编程基础题,你必须全会,不然别去面试

文章目录前言一、Python基础篇&#xff08;6道&#xff09;1. Python中list和tuple有什么区别&#xff1f;2. Python 3.7之后普通dict已经有序了&#xff0c;那OrderedDict还有存在的必要吗&#xff1f;3. Python中的深拷贝和浅拷贝有什么区别&#xff1f;4. Python中的*args和…...

智能设备语音交互进阶:从‘慢交互’到‘快交互’,详解ONESHOT模式下的音频残留音过滤实战

智能设备语音交互进阶&#xff1a;ONESHOT模式下的音频残留音过滤实战 在智能语音交互领域&#xff0c;ONESHOT模式已经成为提升用户体验的关键技术。这种允许用户在唤醒设备后无需二次唤醒即可直接下达指令的交互方式&#xff0c;正在重塑人机对话的自然流畅度。然而&#xff…...