如何使用Spring boot框架实现图书管理系统

使用 Spring Boot 框架实现图书管理系统可以按照以下步骤进行,涵盖了从项目搭建、数据库设计、后端接口开发到前端页面展示的整个流程。

1. 项目搭建

可以使用 Spring Initializr(https://start.spring.io/ )来快速创建一个 Spring Boot 项目,选择以下依赖:

  • Spring Web:用于构建 RESTful API 和 Web 应用。
  • Spring Data JPA:用于简化数据库操作。
  • MySQL Driver:如果使用 MySQL 数据库。
  • Thymeleaf:作为模板引擎来构建前端页面。

2. 数据库设计

设计图书管理系统的数据库,主要涉及两个实体:图书(Book)和用户(User),这里以 MySQL 为例创建相应的表。

2.1 创建数据库

收起

sql

CREATE DATABASE book_management;
USE book_management;
2.2 创建图书表

收起

sql

CREATE TABLE books (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,author VARCHAR(255) NOT NULL,isbn VARCHAR(20) UNIQUE
);

3. 配置数据库连接

在 src/main/resources/application.properties 中配置数据库连接信息:

收起

properties

spring.datasource.url=jdbc:mysql://localhost:3306/book_management
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

4. 创建实体类

在 src/main/java 下创建相应的实体类,例如 Book 类:

收起

java

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Book {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String title;private String author;private String isbn;// 无参构造函数public Book() {}// 有参构造函数public Book(String title, String author, String isbn) {this.title = title;this.author = author;this.isbn = isbn;}// Getter 和 Setter 方法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 String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}
}

5. 创建数据访问层(Repository)

创建一个 BookRepository 接口,继承 JpaRepository 来实现对 Book 实体的基本数据库操作:

收起

java

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

6. 创建服务层(Service)

创建一个 BookService 类来处理图书的业务逻辑:

收起

java

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

7. 创建控制器层(Controller)

创建一个 BookController 类来处理 HTTP 请求:

收起

java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import java.util.List;@Controller
@RequestMapping("/books")
public class BookController {@Autowiredprivate BookService bookService;@GetMappingpublic String getAllBooks(Model model) {List<Book> books = bookService.getAllBooks();model.addAttribute("books", books);return "books";}@GetMapping("/add")public String showAddBookForm(Model model) {model.addAttribute("book", new Book());return "add-book";}@PostMapping("/add")public String addBook(@ModelAttribute Book book) {bookService.saveBook(book);return "redirect:/books";}@GetMapping("/edit/{id}")public String showEditBookForm(@PathVariable Long id, Model model) {Book book = bookService.getBookById(id);model.addAttribute("book", book);return "edit-book";}@PostMapping("/edit/{id}")public String editBook(@PathVariable Long id, @ModelAttribute Book book) {book.setId(id);bookService.saveBook(book);return "redirect:/books";}@GetMapping("/delete/{id}")public String deleteBook(@PathVariable Long id) {bookService.deleteBook(id);return "redirect:/books";}
}

8. 创建前端页面

在 src/main/resources/templates 目录下创建相应的 Thymeleaf 模板页面。

8.1 books.html

收起

html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>图书列表</title>
</head>
<body><h1>图书列表</h1><a href="/books/add">添加图书</a><table><thead><tr><th>ID</th><th>标题</th><th>作者</th><th>ISBN</th><th>操作</th></tr></thead><tbody><tr th:each="book : ${books}"><td th:text="${book.id}"></td><td th:text="${book.title}"></td><td th:text="${book.author}"></td><td th:text="${book.isbn}"></td><td><a th:href="@{/books/edit/{id}(id=${book.id})}">编辑</a><a th:href="@{/books/delete/{id}(id=${book.id})}">删除</a></td></tr></tbody></table>
</body>
</html>
8.2 add-book.html

收起

html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>添加图书</title>
</head>
<body><h1>添加图书</h1><form method="post" th:action="@{/books/add}" th:object="${book}"><label for="title">标题:</label><input type="text" id="title" th:field="*{title}" required><br><label for="author">作者:</label><input type="text" id="author" th:field="*{author}" required><br><label for="isbn">ISBN:</label><input type="text" id="isbn" th:field="*{isbn}" required><br><input type="submit" value="添加"></form><a href="/books">返回图书列表</a>
</body>
</html>
8.3 edit-book.html

收起

html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>编辑图书</title>
</head>
<body><h1>编辑图书</h1><form method="post" th:action="@{/books/edit/{id}(id=${book.id})}" th:object="${book}"><label for="title">标题:</label><input type="text" id="title" th:field="*{title}" required><br><label for="author">作者:</label><input type="text" id="author" th:field="*{author}" required><br><label for="isbn">ISBN:</label><input type="text" id="isbn" th:field="*{isbn}" required><br><input type="submit" value="保存"></form><a href="/books">返回图书列表</a>
</body>
</html>

9. 启动应用程序

创建一个主应用类,通常命名为 BookManagementSystemApplication,并添加 @SpringBootApplication 注解:

收起

java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class BookManagementSystemApplication {public static void main(String[] args) {SpringApplication.run(BookManagementSystemApplication.class, args);}
}

运行 main 方法启动 Spring Boot 应用程序,访问 http://localhost:8080/books 即可看到图书列表页面,并且可以进行图书的添加、编辑和删除操作。

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

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

相关文章

【网络安全 | 漏洞挖掘】账户接管+PII+原漏洞绕过

文章目录 前言正文前言 本文涉及的所有漏洞测试共耗时约三周,成果如下: 访问管理面板,成功接管目标列出的3000多家公司。 获取所有员工的真实指纹、机密文件及个人身份信息(PII)。 绕过KYC认证,成功接管电话号码。 绕过此前发现的漏洞。 正文 在测试目标时,我发现了一…

深度学习学习笔记(34周)

目录 摘要 Abstracts 简介 Hourglass Module&#xff08;Hourglass 模块&#xff09; 网络结构 Intermediate Supervision&#xff08;中间监督&#xff09; 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》&#xf…

JVM类文件结构深度解析:跨平台基石与字节码探秘

目录 一、类文件&#xff1a;Java生态的通用语言 1.1 字节码的桥梁作用 1.2 类文件核心优势 二、类文件二进制结构剖析 2.1 整体结构布局 2.2 魔数与版本控制 2.3 常量池&#xff1a;类文件的资源仓库 2.4 访问标志位解析 三、核心数据结构详解 3.1 方法表结构 3.2 …

wps中zotero插件消失,解决每次都需要重新开问题

参考 查看zotero目录 D:\zotero\integration\word-for-windows 加载项点击 dotm即可 长期解决 把dom 复制到 C:\Users\89735\AppData\Roaming\kingsoft\office6\templates\wps\zh_CN还是每次都需要重新开的话 重新加载一下

如何设计合理的树状结构表:平衡查询效率与维护效率

树状结构广泛应用于数据建模中&#xff0c;例如 商品分类、组织架构、权限管理 等场景。合理设计树形结构的数据库表&#xff0c;能够有效提升 查询效率 和 维护效率。本文将探讨如何在设计时平衡这两者&#xff0c;详细介绍常用的几种树状结构存储方式及其适用场景。 一、树状…

List 接口中的 sort 和 forEach 方法

List 接口中的 sort 和 forEach 方法是 Java 8 引入的两个非常实用的函数&#xff0c;分别用于 排序 和 遍历 列表中的元素。以下是它们的详细介绍和用法&#xff1a; sort 函数 功能 对列表中的元素进行排序。 默认使用自然顺序&#xff08;如数字从小到大&#xff0c;字符…

深度学习驱动的车牌识别:技术演进与未来挑战

一、引言 1.1 研究背景 在当今社会&#xff0c;智能交通系统的发展日益重要&#xff0c;而车牌识别作为其关键组成部分&#xff0c;发挥着至关重要的作用。车牌识别技术广泛应用于交通管理、停车场管理、安防监控等领域。在交通管理中&#xff0c;它可以用于车辆识别、交通违…

GitCode 助力至善云学:构建智慧教育平台

项目仓库&#xff1a; 前端&#xff1a;https://gitcode.com/Fer_Amiya/vue-ZhiShanYunXue-Client 后端&#xff1a;https://gitcode.com/Fer_Amiya/go-ZhiShanYunXue-Server 突破传统教学困境&#xff0c;探索教育新解法 传统教学的习题讲评环节&#xff0c;教师面临着难以…

系统架构设计师备考策略

一、备考痛点 系统架构设计师考试以 知识体系庞杂、实践性强 著称&#xff0c;官方教材《系统架构设计师教程&#xff08;第2版&#xff09;》厚达 700 余页&#xff0c;若盲目通读耗时费力。根据近三年考情分析&#xff0c;“抓重点 分层突破 实战输出” 是高效通关的核心策…

nnUNet V2修改网络——加入MultiResBlock模块

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 MultiRes Block 是 MultiResUNet 中核心组件之一,旨在解决传统 U-Net 在处理多尺度医学图像时的局…

verilog基础知识

一,Verilog和VHDL区别 全世界高层次数字系统设计领域中,应用Verilog和VHDL的比率是80%和20%;这两种语言都是用于数字电路系统设计的硬件描述语言, 而且都已经是 IEEE 的标准。 VHDL 是美国军方组织开发的,VHDL1987年成为标准;Verilog 是由一个公司的私有财产转化而来,…

HarmonyOS 开发套件 介绍——下篇

HarmonyOS 开发套件 介绍——下篇 在HarmonyOS的生态中&#xff0c;开发套件作为支撑整个系统发展的基石&#xff0c;为开发者提供了丰富而强大的工具和服务。本文将深入继续介绍HarmonyOS SDK、ArkCompiler、DevEco Testing、AppGallery等核心组件&#xff0c;帮助开发者全面掌…

小怿学习日记(七) | Unreal引擎灯光架构

灯光的布局对于HMI场景中车模的展示效果有着举足轻重的地位。本篇内容将简单介绍ES3.1的相关知识&#xff0c;再深入了解Unreal引擎中车模的灯光以及灯光架构。 一、关于ES3.1 1.1 什么是ES3.1 ES3.1这个概念对于美术的同学可能比较陌生&#xff0c;ES3.1指的是OpenGL ES3.1&…

【洛谷排序算法】P1012拼数-详细讲解

这道题本质上是通过确定数字的拼接顺序来得到最大拼接数&#xff0c;虽然主要思路是利用字符串及其比较规则来实现&#xff0c;但也可以基于数组结合一些转换操作来解决&#xff0c;以下是大致思路和代码示例&#xff1a; 【算法思路】 首先将输入的数字存储在数组中。然后自…

2025前端框架最新组件解析与实战技巧:Vue与React的革新之路

作者&#xff1a;飞天大河豚 引言 2025年的前端开发领域&#xff0c;Vue与React依然是开发者最青睐的框架。随着Vue 3的全面普及和React 18的持续优化&#xff0c;两大框架在组件化开发、性能优化、工程化支持等方面均有显著突破。本文将从最新组件特性、使用场景和编码技巧三…

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Docker 部署AnythingLLM

两个指令搞定 1.下载镜像 docker pull mintplexlabs/anythingllm 2.运行容器 export STORAGE_LOCATION$HOME/anythingllm mkdir -p $STORAGE_LOCATION chmod -R 777 $STORAGE_LOCATION touch "$STORAGE_LOCATION/.env" docker run -d -p 3001:3001 \ --cap-add SY…

java开发——为什么要使用动态代理?

举个例子&#xff1a;假如有一个杀手专杀男的&#xff0c;不杀女的。代码如下&#xff1a; public interface Killer {void kill(String name, String sex);void watch(String name); }public class ManKiller implements Killer {Overridepublic void kill(String name, Stri…

Moonshot AI 新突破:MoBA 为大语言模型长文本处理提效论文速读

前言 在自然语言处理领域&#xff0c;随着大语言模型&#xff08;LLMs&#xff09;不断拓展其阅读、理解和生成文本的能力&#xff0c;如何高效处理长文本成为一项关键挑战。近日&#xff0c;Moonshot AI Research 联合清华大学、浙江大学的研究人员提出了一种创新方法 —— 混…

Linux中的查看命令

路径分为相对路径&#xff08;行相对当前工作目录开始的路径&#xff09;和绝对路径&#xff08;不管是&#xff09;#&#xff1a;命令提示符&#xff0c;从这个位置可以开始输入命令&#xff0c;另一个提示符为$&#xff0c;如果是root&#xff0c;则提示为#&#xff1b;如果是…