【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析

目录

一、前言

二、Spring Boot 简介

三、Spring Boot 核心模块

四、Spring Boot 项目实战:构建一个简单的 RESTful API

1. 创建 Spring Boot 项目

2. 配置数据库

3. 创建实体类

4. 创建 JPA 仓库接口

5. 创建服务层

6. 创建控制器层

7. 测试 API

8. 运行效果


一、前言

在现代的企业级应用开发中,Spring Boot 已成为最受欢迎的框架之一。它简化了 Java Web 应用的开发流程,特别是在构建微服务架构时,Spring Boot 的优势尤为明显。借助 Spring Boot,开发者可以快速创建独立的、生产级的 Spring 应用,而不需要复杂的配置。本文将介绍 Spring Boot 的核心概念、使用场景以及一个实际的示例,帮助你更好地掌握这个强大的框架。

二、Spring Boot 简介

Spring Boot 是基于 Spring Framework 的一个开源框架,它提供了开箱即用的功能,能够简化 Spring 应用的设置和开发过程。Spring Boot 提供了以下几个特点:

  • 自动配置Spring Boot 根据项目中的依赖自动配置 Spring 应用,无需手动配置。
  • 内嵌服务器:Spring Boot 内置了 Tomcat、Jetty 等容器,免去传统部署到外部应用服务器的步骤。
  • 快速开发:Spring Boot 提供了许多开发者友好的工具,比如 Spring Boot Starter、Spring Boot DevTools 等,提升了开发效率。
  • 生产级应用Spring Boot 通过提供健康检查、外部配置、日志管理等功能,使得开发者能够构建高可用的应用。

三、Spring Boot 核心模块

  1. Spring Boot Starter:它是一组预配置的 Maven 依赖,可以帮助我们快速集成常见功能模块。比如 spring-boot-starter-web,可以快速构建一个 Web 应用。

  2. 自动配置Spring Boot 会根据项目的依赖自动配置合适的 Beans。例如,如果项目依赖了 spring-boot-starter-web,Spring Boot 会自动配置 Tomcat 作为嵌入式 Web 容器。

  3. Spring Boot Actuator:Spring Boot 提供了一组用于监控和管理 Spring Boot 应用的功能,如健康检查、指标监控等。

  4. Spring Boot DevTools:用于提升开发效率,自动重启应用程序、热加载等功能。

四、Spring Boot 项目实战:构建一个简单的 RESTful API

在接下来的部分,我们将展示如何使用 Spring Boot 构建一个简单的 RESTful API。该 API 允许用户进行基本的 CRUD(增删改查)操作。

1. 创建 Spring Boot 项目

使用 Spring Initializr(https://start.spring.io/)创建一个新的 Spring Boot 项目。选择以下依赖:

  • Spring Web
  • Spring Data JPA
  • H2 Database(用于内存数据库示例)

生成并下载项目后,解压并导入到你喜欢的 IDE(如 IntelliJ IDEA)。

2. 配置数据库

我们使用 H2 数据库作为示例。在 src/main/resources/application.properties 中配置数据源:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

这段配置表示我们将使用内存数据库,并启用 H2 控制台来查看数据库的内容。

3. 创建实体类

接下来,我们创建一个简单的 Book 实体类,表示图书对象。该类将映射到数据库中的 book 表。

package com.example.demo.model;import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;@Entity
public class Book {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String title;private String author;private double price;// Getters and Setterspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}

4. 创建 JPA 仓库接口

接下来,我们为 Book 实体创建一个 Repository 接口,继承 JpaRepository,用于操作数据库

package com.example.demo.repository;import com.example.demo.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;public interface BookRepository extends JpaRepository<Book, Long> {
}

JpaRepository 提供了许多便捷的方法,例如 save()findAll()findById() 等,极大地减少了编写数据库操作代码的工作量。

5. 创建服务层

为了更好地管理业务逻辑,我们创建一个 BookService 服务类:

package com.example.demo.service;import com.example.demo.model.Book;
import com.example.demo.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Optional;@Service
public class BookService {@Autowiredprivate BookRepository bookRepository;public List<Book> getAllBooks() {return bookRepository.findAll();}public Optional<Book> getBookById(Long id) {return bookRepository.findById(id);}public Book saveBook(Book book) {return bookRepository.save(book);}public void deleteBook(Long id) {bookRepository.deleteById(id);}
}

6. 创建控制器层

最后,我们创建一个 RESTful API 控制器类 BookController,它将暴露 API 接口,允许用户进行 CRUD 操作:

package com.example.demo.controller;import com.example.demo.model.Book;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;
import java.util.Optional;@RestController
@RequestMapping("/api/books")
public class BookController {@Autowiredprivate BookService bookService;@GetMappingpublic List<Book> getAllBooks() {return bookService.getAllBooks();}@GetMapping("/{id}")public Optional<Book> getBookById(@PathVariable Long id) {return bookService.getBookById(id);}@PostMappingpublic Book createBook(@RequestBody Book book) {return bookService.saveBook(book);}@PutMapping("/{id}")public Book updateBook(@PathVariable Long id, @RequestBody Book book) {book.setId(id);return bookService.saveBook(book);}@DeleteMapping("/{id}")public void deleteBook(@PathVariable Long id) {bookService.deleteBook(id);}
}

7. 测试 API

运行 Spring Boot 应用后,可以使用 Postman 或 CURL 来测试我们的 RESTful API。

  • GET /api/books - 获取所有图书
  • GET /api/books/{id} - 根据 ID 获取图书
  • POST /api/books - 创建新图书
  • PUT /api/books/{id} - 更新指定 ID 的图书
  • DELETE /api/books/{id} - 删除指定 ID 的图书

8. 运行效果

启动 Spring Boot 应用后,可以访问 H2 控制台查看数据库中保存的图书数据,URL 为 http://localhost:8080/h2-console

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

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

相关文章

土地档案管理关系[源码+文档]

目录 摘 要 Abstract 1 绪论 1.1 可行性研究编写目的 1.2 项目背景 1.3 土地管理现状 1.4 土地档案管理研究方向 1.5 项目目标 1.6 项目设计原则 1.6.1 实用性原则 1.6.2 经济性原则 1.6.3 合法性原则 2 相关技术介绍 2.1 三层架构的选择 2.2 编程…

使用C语言编写UDP循环接收并打印消息的程序

使用C语言编写UDP循环接收并打印消息的程序 前提条件程序概述伪代码C语言实现编译和运行C改进之自由设定端口注意事项在本文中,我们将展示如何使用C语言编写一个简单的UDP服务器程序,该程序将循环接收来自指定端口的UDP消息,并将接收到的消息打印到控制台。我们将使用POSIX套…

Audiocraft智能音频和音乐生成工具部署及使用

1、概述 Facebook开源了一款名为AudioCraft的AI音频和音乐生成工具。 该工具可以直接从文本描述和参考音乐生成高质量的音频和音乐。AudioCraft包含MusicGen、AudioGen和EnCodec三个模型&#xff0c;分别实现音乐生成、音频生成和自定义音频模型构建。 2、项目地址 https://…

vulnhub靶场【DriftingBlues】之7

前言 靶机&#xff1a;DriftingBlues-6&#xff0c;IP地址192.168.1.65 攻击&#xff1a;kali&#xff0c;IP地址192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24 信息收集 使用nmap扫描端口 SSH服务&…

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥&#xff0c;为什么会有给样卷不自带解析的&#xff0c;对答案都没得对&#xff0c;故整理一篇 样卷1 一、选择题 1、为了遍历shell脚本调用时传入的参数&#xff0c;需要在shell脚本中使用_____。 A.$#表示参数的个数B.S表示所有参数C.$0表示脚本名D.$1表示…

spring\strust\springboot\isp前后端那些事儿

后端 一. 插入\更新一条数据&#xff08;老&#xff09; Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…

对golang的io型进程进行off-cpu分析

背景&#xff1a; 对于不能占满所有cpu核数的进程&#xff0c;进行on-cpu的分析是没有意义的&#xff0c;因为可能程序大部分时间都处在阻塞状态。 实验例子程序&#xff1a; 以centos8和golang1.23.3为例&#xff0c;测试下面的程序&#xff1a; pprof_netio.go package m…

CSS Grid 布局:属性及使用详解

CSS Grid 布局&#xff1a;属性及使用详解 一、CSS Grid 布局的基础概念二、主要的 CSS Grid 属性1、display: grid / display: inline-grid声明 Grid 容器2、grid-template-columns / grid-template-rowsGrid 容器中列和行的尺寸3、 grid-template-areas命名布局区域4、gap/ g…

【数学建模】利用Matlab绘图(2)

一、Matlab中plot函数的基本用法 在matlab中&#xff0c;函数的基本用法主要包括以下几种 第一类&#xff1a; plot(X,Y,LineSpec) 第二类&#xff1a; plot(tbl,xvar,yvar) 1.1 第一类 1.1.1x-y坐标 x和y的选择取决于绘图所需的数据类型以及图像的类型。下表列出了几种…

编写工具模块

文章目录 1.新建模块1.新建模块sun-common-tool2.sun-dependencies指定依赖3.sun-common统一管理sun-common-tool子模块4.sun-common-tool的pom.xml5.清除掉创建模块时默认sun-frame对sun-common-tool进行管理 2.常用工具类1.DateUtils.java2.EncodeUtils.java3.IpUtils.java4.…

构建一个rust生产应用读书笔记四(实战3)

从这一节开始&#xff0c;我们将继续完善邮件订阅生产级应用&#xff0c;根据作者的选型sqlx作为数据库操作的类库&#xff0c;它有如下优点&#xff1a; 它旨在提供高效、安全且易于使用的数据库交互体验。sqlx 支持多种数据库&#xff0c;包括 PostgreSQL、MySQL 和 SQLite&…

视频直播点播平台EasyDSS推拉流技术结合无人机推流在道路交通巡检场景中的应用

随着城市化进程的加速&#xff0c;交通网络日益复杂&#xff0c;交通巡检工作面临着前所未有的挑战。传统的巡检方式往往依赖于人工巡查或地面监控设备&#xff0c;但这些方法存在巡检范围有限、效率低下等缺点。 无人机凭借其高空视野、灵活机动、实时监控等优势&#xff0c;…

VBA技术资料MF238:ADO提取多文件区域指定数据到工作表

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Mapper代理开发

引入 Mybatis入门方式中&#xff0c;以下代码仍存在硬编码问题 Mapper 代理开发&#xff1a; 目的&#xff1a; 解决原生方式中的硬编码 简化后期执行sql ------下图中&#xff0c;第一段代码是原生硬编码代码块&#xff0c;第二个是引入了Mapper代理开发的代码块。 Mapper代…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

使用C语言连接MySQL

库的准备 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的connect库&#xff0c;可以去官网下载&#xff0c;由于我们要下载到 Linux 操作系统中&#xff0c;也可以使用如下指令进行安装库 sudo apt-get install libmysqlclient-dev MySQL连接C/C的库通常会安装在/us…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换操作符5. 网络请求嵌套回调 FlatMap6. 网络请求出错重连…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

PyTorch基础入门

目录 前言一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from333.999.0.0)1. 张量的广播特性2. 逐点&规约&比较运算 二、张量的线性代数运算1. BLAS & LAPACK2. 矩阵形变及特殊矩阵构造3. 矩阵基本运算4. 矩阵的线性代数运…

【VSCode】常用插件汇总

1 Path Autocomplete&#xff08;路径提示的插件&#xff09; 步骤一&#xff1a;在vscode的扩展搜索中直接搜索Path Autocomplete&#xff0c;直接安装 步骤二&#xff1a;配置 配置 VS Code settings.json "path-autocomplete.pathMappings": {"": &q…