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

news2024/12/22 11:35:58

目录

一、前言

二、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 Setters
    public 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 {

    @Autowired
    private 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 {

    @Autowired
    private BookService bookService;

    @GetMapping
    public List<Book> getAllBooks() {
        return bookService.getAllBooks();
    }

    @GetMapping("/{id}")
    public Optional<Book> getBookById(@PathVariable Long id) {
        return bookService.getBookById(id);
    }

    @PostMapping
    public 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.coloradmin.cn/o/2263724.html

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

相关文章

css 动画实现从中间到两边亮度逐渐变暗的流水灯效果

先看效果&#xff1a; 快结束效果 随着离中心点距离逐渐边远&#xff0c;亮度逐渐变暗 完整的视线代码如下&#xff1a; <template><div class"container"><div class"runner bottom to-right"></div><div class"runner …

k8s迁移——岁月云实战笔记

新系统使用rockylinux9.5&#xff0c;旧系统虚拟机装的是centos7 1 目标服务器 1.1 禁止swap swapoff -a vi /etc/fstab #/dev/mapper/rl-swap none swap defaults 0 0 #执行&#xff0c;swap一行都是0 free -h 1.2 关闭防火墙 只是为了减…

Vulnhub靶场Apache解析漏洞

一.apache_parsing 原理&#xff1a;Apache HTTPD ⽀持⼀个⽂件拥有多个后缀&#xff0c;并为不同后缀执⾏不同的指令。在Apache1.x/2.x中Apache 解析⽂件的规则是从右到左开始判断解析,如果后缀名为不可识别⽂件解析,就再往左判断。如 1.php.xxxxx 打开靶场 创建一个名为1.p…

《Java核心技术I》Swing中单选按钮

单选按钮 构造ButtonGroup类型对象。 将JRadioButton对象添加到按钮组中。 new JRadioButton("Small",false)&#xff0c;第二个参数是初始状态。 buttonGroup.getSelection().getActionCommand()获得当前选中的按钮动作命令。 选择字体大小案例 package swing…

在window环境下安装openssl生成钥私、证书和签名,nodejs利用express实现ssl的https访问和测试

在生成我们自己的 SSL 证书之前&#xff0c;让我们创建一个简单的 Express应用程序。 要创建一个新的 Express 项目&#xff0c;让我们创建一个名为node-ssl -server 的目录&#xff0c;用终端cmd中进入node-ssl-server目录。 cd node-ssl-server 然后初始化一个新的 npm 项目…

Webpack学习笔记(5)

1.拆分开发环境和生产环境配置 很多配置在开发环境和生产环境存在不一致的情况&#xff0c;比如开发环境没有必要设置缓存&#xff0c;生产环境需要设置公共路径等等。 2.公共路径 使用publicPath配置项&#xff0c;可以通过它指定应用程序中所有资源的基础路径。 webpack.…

桌面图形界面生成原理:从流水灯到电脑屏幕

桌面图形界面是我们在使用电脑时接触最多的一个部分。它的美观、简洁、易用都给我们的生活带来了极大的便利。但是&#xff0c;你是否想过&#xff0c;这样的界面是如何生成的呢&#xff1f;让我们从流水灯的原理开始&#xff0c;一步步揭开桌面图形界面生成的奥秘。 一、流水…

html+css网页设计 美食 百味美食4个页面

htmlcss网页设计 美食 百味美食4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xf…

WPF DataTemplate 数据模板

DataTemplate 顾名思义&#xff0c;数据模板&#xff0c;在 wpf 中使用非常频繁。 它一般用在带有 DataTemplate 依赖属性的控件中&#xff0c;如 ContentControl、集合控件 ListBox、ItemsControl 、TabControls 等。 1. 非集合控件中使用 <UserControl.Resources>&l…

【CSS in Depth 2 精译_084】第 14 章:CSS 蒙版、形状与剪切概述 + 14.1:CSS 滤镜

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 14 章 蒙版、形状与剪切】 ✔️ 14.1 滤镜 ✔️ 14.1.1 滤镜的类型 ✔️14.1.2 背景滤镜 ✔️ 14.2 蒙版 文章目录 第 14 章 蒙版、形状与剪切 Masks, shapes, and…

excel 使用vlook up找出两列中不同的内容

当使用 VLOOKUP 函数时&#xff0c;您可以将其用于比较两列的内容。假设您要比较 A 列和 B 列的内容&#xff0c;并将结果显示在 C 列&#xff0c;您可以在 C1 单元格中输入以下公式&#xff1a; 这个公式将在 B 列中的每个单元格中查找是否存在于 A 列中。如果在 A 列中找不到…

java_章节作业

第1题 package com.hspedu.homework;/*** author:寰愬悏瓒&#xfffd;* date:2024/12/19 version:1.0*/ public class Homework01 {public static void main(String[] args) {//初始化Person对象数组&#xff0c;有3个Person对象&#xff1b;Person[] persons new Person[3];…

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起&#xff0c;最近需要识别法国电影《地下铁》的法语字幕&#xff0c;使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…

Fiddler勾选https后google浏览器网页访问不可用

一、说明 最近电脑重新安装系统后&#xff0c;之前的所有工具都需要重新安装和配置&#xff0c;有个项目需要抓包https包查看一下请求的内容&#xff0c;通过Fiddler工具&#xff0c;但是开启后&#xff0c;发现https的无法抓取&#xff0c;同时google浏览器也不无法访问互联网…

OpenAI 12天发布会(12 Days of OpenAI)总结

在OpenAI的“12 Days of OpenAI”活动中&#xff0c;每一天都会发布新的功能或技术&#xff0c;展示公司在AI领域的最新进展。首先展示下全部功能发布完成后&#xff0c;现在ChatGPT的界面&#xff1a; 以下是每一天的简要概述及其意义&#xff1a; 第1天 - 完整版O1模型 今天…

LLaMA-Factory 单卡3080*2 deepspeed zero3 微调Qwen2.5-7B-Instruct

环境安装 git clone https://gitcode.com/gh_mirrors/ll/LLaMA-Factory.git 下载模型 pip install modelscope modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /root/autodl-tmp/models/Qwen/Qwen2.5-7B-Instruct 微调 llamafactory-cli train \--st…

Vue3组件封装技巧与心得

摘要&#xff1a; 日常开发中&#xff0c;用Vue组件进行业务拆分&#xff0c;代码解耦是一个很好的选择&#xff1b; 今天就来分享一下我在使用Vue3进行组件封装的一些技巧和心得&#xff0c;希望能够帮助到大家&#xff1b; 1. 组件特性&#xff1a; 在Vue中组件是一个独立的…

图漾相机-ROS1_SDK_ubuntu版本编译(新版本)

文章目录 官网编译文档链接官网SDK下载链接1、下载 Camport ROS1 SDK1.下载git2、下载链接 2、准备编译工作1、安装 catkin2、配置环境变量3. 将Camport3中的linux库文件拷贝到 user/lib目录下4、修改lunch文件制定相机&#xff08;可以放在最后可以参考在线文档&#xff09;**…

十二、从0开始卷出一个新项目之瑞萨RZN2L 基于IAR coremark fsp200工程构建和iar icf链接文件修改方法

目录 一、概述 二、rzn2l_fsp2.0.0_coremark工程构建 2.1 目录结构 2.2 项目一览 2.3 iar工程打开报错如何处理 三、代码优化的问题 3.1 system.c中复制内存 3.2 iar代码优化等级与volatile关键字 3.3 iar配置优化单个文件与预编译宏的范围 四、iar .icf链接文件修改…

内容与资讯API优质清单

作为开发者&#xff0c;拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源&#xff0c;为你的开发工作提供了强大的支持&#xff01;无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个合集都能满足你的需求。你可以通过这些免费API获…