news 2026/5/22 9:08:28

Java毕业设计实战:基于Spring Boot的在线图书管理系统(完整版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java毕业设计实战:基于Spring Boot的在线图书管理系统(完整版)

前言

毕业设计是Java学习过程中最重要的综合实践环节。本文将带大家从零开始,开发一个完整的在线图书管理系统,采用当前主流的Spring Boot + MyBatis + Thymeleaf技术栈,涵盖前后端交互、数据库设计、权限控制等核心模块。项目代码结构清晰,注释详细,非常适合作为毕业设计或课程设计参考。


一、项目概述

1.1 项目背景

随着高校图书馆藏书的增多,传统人工管理方式效率低下且易出错。本系统旨在提供一个轻量级的在线图书管理平台,实现图书信息的数字化管理、借阅流程自动化,并支持多用户角色(管理员、普通用户)操作。

1.2 系统功能

  • 用户模块:注册、登录、个人信息修改、密码重置。

  • 图书管理:图书增删改查、分类管理、批量导入导出。

  • 借阅管理:用户借书、还书、续借、查看借阅历史。

  • 权限控制:基于Spring Security实现角色权限区分(管理员可管理图书和用户,普通用户仅可借阅)。

  • 数据统计:图书借阅排行榜、用户活跃度统计(可选)。


二、技术选型

技术说明版本
Spring Boot后端基础框架2.7.0
MyBatis持久层框架3.5.10
Thymeleaf模板引擎3.0.15
Spring Security安全与权限控制5.7.3
MySQL关系型数据库8.0
Bootstrap前端UI框架5.1
Maven项目管理工具3.8+

三、数据库设计

3.1 E-R图(简略)

系统主要包含三张核心表:user(用户)、book(图书)、borrow_record(借阅记录),以及辅助表category(图书分类)。

3.2 表结构

user表

sql

CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(100) NOT NULL COMMENT '密码(加密后)', `email` varchar(100) DEFAULT NULL, `role` varchar(20) DEFAULT 'ROLE_USER' COMMENT '角色', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

book表

sql

CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL, `author` varchar(100) DEFAULT NULL, `isbn` varchar(20) DEFAULT NULL, `category_id` int(11) DEFAULT NULL, `publisher` varchar(100) DEFAULT NULL, `publish_date` date DEFAULT NULL, `total` int(11) DEFAULT '1' COMMENT '总库存', `available` int(11) DEFAULT '1' COMMENT '可借数量', PRIMARY KEY (`id`), KEY `category_id` (`category_id`), CONSTRAINT `book_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

borrow_record表

sql

CREATE TABLE `borrow_record` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `book_id` int(11) NOT NULL, `borrow_time` datetime DEFAULT CURRENT_TIMESTAMP, `return_time` datetime DEFAULT NULL, `status` tinyint(1) DEFAULT '1' COMMENT '1-借出 0-已归还', PRIMARY KEY (`id`), KEY `user_id` (`user_id`), KEY `book_id` (`book_id`), CONSTRAINT `borrow_record_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`), CONSTRAINT `borrow_record_ibfk_2` FOREIGN KEY (`book_id`) REFERENCES `book` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

category表

sql

CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

四、项目结构与核心实现

4.1 项目结构(Maven)

text

src/main/java/com/library/ ├── config/ # 配置类(Security、WebMvc) ├── controller/ # 控制器 │ ├── BookController.java │ ├── BorrowController.java │ └── UserController.java ├── mapper/ # MyBatis接口 │ ├── BookMapper.java │ ├── BorrowRecordMapper.java │ └── UserMapper.java ├── model/ # 实体类 │ ├── Book.java │ ├── User.java │ └── BorrowRecord.java ├── service/ # 业务层 │ ├── BookService.java │ └── UserService.java └── LibraryApplication.java # 启动类

4.2 关键代码示例

4.2.1 Spring Security配置

java

@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers("/", "/register", "/css/**", "/js/**").permitAll() .requestMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .defaultSuccessUrl("/") .permitAll() ) .logout(logout -> logout.permitAll()); return http.build(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
4.2.2 借书业务逻辑(Service层)

java

@Service @Transactional public class BorrowService { @Autowired private BookMapper bookMapper; @Autowired private BorrowRecordMapper borrowRecordMapper; public boolean borrowBook(Integer userId, Integer bookId) { // 检查图书是否可借 Book book = bookMapper.selectById(bookId); if (book == null || book.getAvailable() <= 0) { return false; } // 创建借阅记录 BorrowRecord record = new BorrowRecord(); record.setUserId(userId); record.setBookId(bookId); record.setBorrowTime(new Date()); record.setStatus(1); borrowRecordMapper.insert(record); // 更新库存 book.setAvailable(book.getAvailable() - 1); bookMapper.updateById(book); return true; } }
4.2.3 Controller示例(图书管理)

java

@Controller @RequestMapping("/admin/books") public class BookController { @Autowired private BookService bookService; @GetMapping public String list(Model model, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { PageInfo<Book> pageInfo = bookService.findByPage(page, size); model.addAttribute("pageInfo", pageInfo); return "admin/book_list"; } @GetMapping("/add") public String addForm(Model model) { model.addAttribute("book", new Book()); return "admin/book_form"; } @PostMapping("/save") public String save(Book book) { bookService.save(book); return "redirect:/admin/books"; } }

4.3 前端页面(Thymeleaf片段)

借书列表页(user/books.html)

html

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>图书列表</title> <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"> </head> <body> <div class="container mt-4"> <h2>可借阅图书</h2> <table class="table table-bordered"> <thead> <tr> <th>书名</th> <th>作者</th> <th>可借数量</th> <th>操作</th> </tr> </thead> <tbody> <tr th:each="book : ${books}"> <td th:text="${book.title}">书名</td> <td th:text="${book.author}">作者</td> <td th:text="${book.available}">可借数量</td> <td> <a th:href="@{/borrow/{id}(id=${book.id})}" class="btn btn-sm btn-primary">借阅</a> </td> </tr> </tbody> </table> </div> </body> </html>

五、项目部署与运行

5.1 环境要求

  • JDK 1.8+

  • MySQL 8.0+

  • Maven 3.5+

5.2 运行步骤

  1. 创建数据库library_db,执行上述SQL脚本。

  2. 修改application.yml中的数据库连接信息。

  3. 在项目根目录执行mvn clean package打包。

  4. 运行java -jar target/library-0.0.1-SNAPSHOT.jar

  5. 访问http://localhost:8080,默认管理员账号:admin / 123456(需提前插入)。

5.3 效果截图(示意)

  • 登录页:简洁的Bootstrap表单。

  • 管理员后台:图书增删改查、借阅记录管理。

  • 用户首页:显示所有图书,支持按分类筛选。


六、常见问题与解决方案

  1. 登录后无权限访问:检查Spring Security角色配置,确保数据库user.role字段为ROLE_ADMINROLE_USER

  2. 借书时库存未更新:确认事务注解@Transactional是否生效,或在Service层手动管理事务。

  3. 中文乱码:在application.yml中配置字符编码:

    yaml

    spring: datasource: url: jdbc:mysql://localhost:3306/library_db?useUnicode=true&characterEncoding=utf8

七、项目总结

通过这个完整的在线图书管理系统,我们实践了Spring Boot整合MyBatis、Thymeleaf、Spring Security等主流技术,掌握了MVC分层架构、数据库设计、权限控制等核心技能。本系统可以作为毕业设计的基础,后续可扩展功能如:邮件通知、图书预约、Excel导出、RESTful API等。

项目完整代码已上传至GitHub:https://github.com/yourname/library-system(示例链接)

欢迎大家在评论区交流,如果有任何问题,我会及时回复!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/22 9:07:19

智能技能验证系统:AI能力评估的完整实战指南

智能技能验证系统&#xff1a;AI能力评估的完整实战指南 【免费下载链接】skills Public repository for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills 在当今AI技术快速发展的时代&#xff0c;如何科学验证AI技能的实际效能成为了开发者…

作者头像 李华
网站建设 2026/4/1 17:29:34

GLM-Image开源大模型部署:HuggingFace Hub私有模型加载方法详解

GLM-Image开源大模型部署&#xff1a;HuggingFace Hub私有模型加载方法详解 1. 项目概述与背景 GLM-Image是智谱AI开发的先进文本到图像生成模型&#xff0c;能够根据文字描述生成高质量的AI图像。这个项目提供了一个基于Gradio的Web交互界面&#xff0c;让用户能够轻松使用G…

作者头像 李华
网站建设 2026/4/1 17:28:02

基于Qwen3.5-9B的MySQL智能运维:安装配置优化与SQL调优

基于Qwen3.5-9B的MySQL智能运维&#xff1a;安装配置优化与SQL调优 1. 引言&#xff1a;当AI遇见数据库运维 数据库管理员的一天通常是这样开始的&#xff1a;检查慢查询日志、分析性能瓶颈、调整配置参数、优化SQL语句...这些重复性工作不仅耗时耗力&#xff0c;还容易因为人…

作者头像 李华