Spring Boot 集成 MySQL 的详细指南

news2024/9/28 5:28:08

在现代软件开发中,Spring Boot 因其简单易用而成为构建 Java 应用程序的热门选择。结合 MySQL这一常用关系型数据库,开发者可以快速构建出功能完善的后端服务。本文将详细介绍如何将 Spring Boot 与 MySQL 集成,提供从环境搭建到代码实现的全方位指导。

一、环境准备

在开始之前,请确保你已经具备以下环境:

  1. JDK: Java Development Kit (JDK) 8 及以上版本。
  2. Maven: 用于管理项目和依赖。
  3. MySQL: 已安装并可访问的 MySQL 数据库。
  4. IDE: 安装的 Java 集成开发环境,如 IntelliJ IDEA 或 Eclipse。

1.1 安装 MySQL

如果你还没有安装 MySQL,可以通过以下链接获取:MySQL Downloads

安装完成后,使用命令行或 MySQL Workbench 创建一个新的数据库,例如 test_db

CREATE DATABASE test_db;

二、创建 Spring Boot 项目

2.1 使用 Spring Initializr 创建项目

  1. 访问 Spring Initializr,选择以下配置项:
    • Project: Maven Project
    • Language: Java
    • Spring Boot: 选择最新的稳定版本
    • Packaging: Jar
    • Java: 选择相应版本
  2. Dependencies 中添加:
    • Spring Web
    • Spring Data JPA
    • MySQL Driver
  3. 生成项目,并下载压缩包,解压后在 IDE 中打开。

2.2 项目结构

解压后的项目结构如下:

src
└── main
    ├── java
    │   └── com
    │       └── example
    │           └── demo
    │               ├── DemoApplication.java
    │               └── ...
    └── resources
        ├── application.properties
        └── ...

三、配置 MySQL 数据库连接

打开 application.properties 文件,添加以下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

3.1 配置详解

  • spring.datasource.url: 数据库连接 URL,包含数据库名 test_db
  • spring.datasource.username: 数据库用户,默认是 root
  • spring.datasource.password: 数据库用户的密码。
  • spring.jpa.hibernate.ddl-auto: 自动创建或更新数据库表。
  • spring.jpa.show-sql: 显示执行的 SQL 语句,方便调试。

四、创建实体类

com.example.demo 包下创建一个实体类 User 代表 users 表:

package com.example.demo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

五、创建数据访问层

接下来,我们需要创建一个接口来访问数据库,通常使用 Spring Data JPA 进行数据访问。

com.example.demo 包下创建一个接口 UserRepository

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // 这里可以添加自定义查询方法
}

六、创建服务层

创建一个服务类来管理用户的业务逻辑。

com.example.demo 包下创建 UserService 类:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User createUser(User user) {
        return userRepository.save(user);
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

七、创建控制器

最后,我们需要一个控制器来处理 HTTP 请求。在 com.example.demo 包下创建 UserController 类:

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
        User user = userService.getUserById(id);
        return ResponseEntity.ok(user);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}

八、测试与运行

8.1 测试数据库连接

在项目根目录下,运行以下命令以启动应用程序:

mvn spring-boot:run

确认你的 MySQL 数据库已启动,并且能够在 localhost:3306 访问。

8.2 使用 Postman 测试 API

  • 获取所有用户: 发送 GET 请求到 http://localhost:8080/api/users
  • 创建用户: 发送 POST 请求到 http://localhost:8080/api/users,并在正文中包含 JSON 数据,例如:
{
    "name": "John Doe",
    "email": "john.doe@example.com"
}
  • 获取用户: 发送 GET 请求到 http://localhost:8080/api/users/{id}
  • 删除用户: 发送 DELETE 请求到 http://localhost:8080/api/users/{id}

九、总结

恭喜你!现在你已经成功地将 Spring Boot 应用程序与 MySQL 数据库集成。本文涵盖了从环境搭建、项目创建到代码实现的多个方面,希望能帮助你快速上手开发基于 Spring Boot 的 Web 应用。

9.1 后续学习

  • 掌握更多的 Spring Data JPA 特性,如复杂查询和分页。
  • 学习如何进行异常处理和输入验证。
  • 探索 Spring Security 来保护 REST API。
  • 学习如何部署 Spring Boot 应用到云服务。

希望本文能够为你后续的开发之路提供帮助。如果你有任何问题或建议,请随时联系我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机之视觉导航算法篇

一、图像采集与预处理 图像采集&#xff1a;无人机通过其搭载的摄像头或其他视觉传感器实时采集周围环境的图像信息。 图像预处理&#xff1a;对采集到的图像进行预处理&#xff0c;包括滤波、降噪、增强等操作&#xff0c;以提高图像的质量和清晰度&#xff0c;为后续的特征…

Linux当中的权限问题

文章目录 一、Linux权限的概念1. Linux中的用户分类2. 不同用户之间的转换(1) 普通用户->root(2) root->普通用户(3) 普通用户->普通用户 二、Linux权限管理1. 文件访问者的分类2. 文件类型和访问权限&#xff08;1&#xff09;文件后缀在Linux中的作用&#xff08;2&…

三个视觉领域常用数据标注工具:labelImg 解压安装基础使用、 label-studio 的安装和基础使用【检测数据标注】

&#x1f947; 版权: 本文由【墨理学AI】原创、在CSDN首发、各位大佬、敬请查阅&#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 本次博文主要对如下三个视觉领域常用数据标注工具进行初步整理 labelImglabel-studio 工具Robo…

生成式AI如何辅助医药行业智能营销

生成式AI在医药行业的智能营销中发挥着日益重要的作用&#xff0c;它通过多种方式辅助医药企业提升市场洞察能力、优化营销策略、增强客户互动和体验&#xff0c;从而推动销售增长和品牌价值的提升。以下是生成式AI如何辅助医药行业智能营销的具体方式&#xff1a;一、精准市场…

微软Win11 22H2/23H2 九月可选更新KB5043145发布!

系统之家于9月27日发出最新报道&#xff0c;微软针对Windows11系统&#xff0c;发布了九月最新可选更新补丁KB5043145&#xff0c;22H2用户安装后&#xff0c;系统版本号升至22621.4249&#xff0c;23H2用户安装后升至22631.4249。本次更新修复了Edge使用IE模式有时会停止响应等…

JS逆向基础-谷歌浏览器调试技巧(详细)

概述 浏览器的调试工具在 JavaScript 逆向工程中&#xff0c;帮助开发者分析和理解代码执行流程、变量值及其变化&#xff0c;从而揭示隐藏逻辑和加密机制&#xff0c;为破解、修改或复现代码提供重要支持。 调试面板详解 谷歌浏览器的调试面板概览&#xff1a; 顶部操作栏 …

直线模组降噪攻略

直线模组作为现代机械自动化中不可或缺的重要组件&#xff0c;其性能与稳定性直接影响到整个设备的运行效果。在使用过程中&#xff0c;直线模组有时会出现噪音&#xff0c;可能由多种因素导致&#xff0c;当噪音出现时&#xff0c;可以试试以下几个方法&#xff1a; 1、设备选…

Apache Iceberg 数据类型参考表

Apache Iceberg 概述-链接 Apache Iceberg 数据类型参考表 数据类型描述实例方法注意事项BOOLEAN布尔类型&#xff0c;表示真或假true, false用于条件判断&#xff0c;例如 WHERE is_active true。确保逻辑条件的正确性。INTEGER32位有符号整数42, -7可用于计算、聚合&#xf…

检查一个CentOS服务器的配置的常用命令

在CentOS系统中&#xff0c;查看服务器配置的常用命令非常丰富&#xff0c;这些命令可以帮助用户快速了解服务器的硬件信息、系统状态以及网络配置等。以下是一些常用的命令及其简要说明&#xff1a; 1. 查看CPU信息 (1) cat /proc/cpuinfo&#xff1a;显示CPU的详细信息&…

【YashanDB知识库】如何dump数据文件,转换rowid, 查询对应内容

本文来自YashanDB官网&#xff0c;具体内容可见https://www.yashandb.com/newsinfo/7459464.html?templateId1718516 问题现象 客户环境有时候会遇到文件损坏的情况&#xff0c;需要dump文件&#xff0c;根据rowid查询数据情况。 问题的风险及影响 熟练掌握崖山数据文件du…

ROS理论与实践学习笔记——2 ROS通信机制之通信机制实践

5.1 话题发布 需求描述&#xff1a;编码实现乌龟运动控制&#xff0c;让小乌龟做圆周运动。 实现分析&#xff1a; ①乌龟运动控制实现&#xff0c;关键节点有两个&#xff0c;一个是乌龟运动显示节点 turtlesim_node&#xff0c;另一个是控制节点&#xff0c;二者是订阅发布模…

公交换乘C++

题目&#xff1a; 样例解释&#xff1a; 样例#1&#xff1a; 第一条记录&#xff0c;在第 3 分钟花费 10 元乘坐地铁。 第二条记录&#xff0c;在第 46 分钟乘坐公交车&#xff0c;可以使用第一条记录中乘坐地铁获得的优惠票&#xff0c;因此没有花费。 第三条记录&#xff0c;…

基于微信小程序的智慧社区的设计与实现

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

docker拉取镜像失败

docker拉取镜像失败 错误提示检查linux服务器是否开通防火墙开放端口重启防火墙查看已开放的端口 修改配置文件 错误提示 检查linux服务器是否开通防火墙 firewall-cmd --staterunning表示防火墙正在运行&#xff0c;显示not running表示未运行&#xff0c;使用以下命令开启防…

vite 底层解析

vite 目前大多数框架的前端构建工具都已经被vite取代&#xff0c;相信你已经使用过vite了。可是在使用过程中&#xff0c;vite对我来说一直是模糊的&#xff0c;现在就来一探究竟&#xff0c;为啥它更好&#xff1f; 接下来我将为从以下几点出发&#xff0c;究其原理 一、原生…

基于大数据技术的智慧居家养老服务平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

Redis实战篇-短信登入

Redis实战篇-短信登入 该笔记是来源于黑马程序员的Redis项目课程,为了后续方便复习。将笔记记录在博客之中 实战篇我们要学习一些什么样的内容 1.本期任务 短信登录 使用redis共享session来实现 商户查询缓存 理解缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩等问题 …

基于冲突动态监测算法的健身房预约管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着健身热潮的兴起&#xff0c;健身房管理面临着日益增长的会员需求与资源分配的挑战。传统的人工预约方式不仅效率低下&#xff0c;且容易出现时间冲突和资源浪费的情况。为了解决这一问题&#xff0c;基于冲突动态监测算法的…

【CSS/HTML】CSS实现两列布局,一列固定宽度,一列宽度自适应方法

文章目录 1.固定宽度区浮动&#xff0c;自适应区不设宽度而设置 margin2.float与margin配合使用3.固定宽度区使用绝对定位&#xff0c;自适应区设置margin4.使用display:table实现 不管是左是右&#xff0c;反正就是一边宽度固定&#xff0c;一边宽度自适应。 博客的很多主题也…

Python学习(3):画散点图和箱线图

1. 散点图&#xff08;matplotlib库&#xff09; 1.1 代码示例 import matplotlib.pyplot as plt# 准备数据 x [1, 2, 3, 4, 5] y [2, 4, 6, 8, 10]# 绘制散点图 plt.scatter(x, y)# 添加标题和标签 plt.title("散点图示例") plt.xlabel("X 轴") plt.y…