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

张开发
2026/4/3 16:18:02 15 分钟阅读
Java毕业设计实战:基于Spring Boot的在线图书管理系统(完整版)
前言毕业设计是Java学习过程中最重要的综合实践环节。本文将带大家从零开始开发一个完整的在线图书管理系统采用当前主流的Spring Boot MyBatis Thymeleaf技术栈涵盖前后端交互、数据库设计、权限控制等核心模块。项目代码结构清晰注释详细非常适合作为毕业设计或课程设计参考。一、项目概述1.1 项目背景随着高校图书馆藏书的增多传统人工管理方式效率低下且易出错。本系统旨在提供一个轻量级的在线图书管理平台实现图书信息的数字化管理、借阅流程自动化并支持多用户角色管理员、普通用户操作。1.2 系统功能用户模块注册、登录、个人信息修改、密码重置。图书管理图书增删改查、分类管理、批量导入导出。借阅管理用户借书、还书、续借、查看借阅历史。权限控制基于Spring Security实现角色权限区分管理员可管理图书和用户普通用户仅可借阅。数据统计图书借阅排行榜、用户活跃度统计可选。二、技术选型技术说明版本Spring Boot后端基础框架2.7.0MyBatis持久层框架3.5.10Thymeleaf模板引擎3.0.15Spring Security安全与权限控制5.7.3MySQL关系型数据库8.0Bootstrap前端UI框架5.1Maven项目管理工具3.8三、数据库设计3.1 E-R图简略系统主要包含三张核心表user用户、book图书、borrow_record借阅记录以及辅助表category图书分类。3.2 表结构user表sqlCREATE 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;book表sqlCREATE 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;borrow_record表sqlCREATE 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;category表sqlCREATE TABLE category ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;四、项目结构与核心实现4.1 项目结构Maventextsrc/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配置javaConfiguration 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层javaService 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示例图书管理javaController 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) { PageInfoBook 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.htmlhtml!DOCTYPE html html xmlns:thhttp://www.thymeleaf.org head title图书列表/title link relstylesheet th:href{/css/bootstrap.min.css} /head body div classcontainer mt-4 h2可借阅图书/h2 table classtable table-bordered thead tr th书名/th th作者/th th可借数量/th th操作/th /tr /thead tbody tr th:eachbook : ${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})} classbtn btn-sm btn-primary借阅/a /td /tr /tbody /table /div /body /html五、项目部署与运行5.1 环境要求JDK 1.8MySQL 8.0Maven 3.55.2 运行步骤创建数据库library_db执行上述SQL脚本。修改application.yml中的数据库连接信息。在项目根目录执行mvn clean package打包。运行java -jar target/library-0.0.1-SNAPSHOT.jar。访问http://localhost:8080默认管理员账号admin / 123456需提前插入。5.3 效果截图示意登录页简洁的Bootstrap表单。管理员后台图书增删改查、借阅记录管理。用户首页显示所有图书支持按分类筛选。六、常见问题与解决方案登录后无权限访问检查Spring Security角色配置确保数据库user.role字段为ROLE_ADMIN或ROLE_USER。借书时库存未更新确认事务注解Transactional是否生效或在Service层手动管理事务。中文乱码在application.yml中配置字符编码yamlspring: datasource: url: jdbc:mysql://localhost:3306/library_db?useUnicodetruecharacterEncodingutf8七、项目总结通过这个完整的在线图书管理系统我们实践了Spring Boot整合MyBatis、Thymeleaf、Spring Security等主流技术掌握了MVC分层架构、数据库设计、权限控制等核心技能。本系统可以作为毕业设计的基础后续可扩展功能如邮件通知、图书预约、Excel导出、RESTful API等。项目完整代码已上传至GitHubhttps://github.com/yourname/library-system示例链接欢迎大家在评论区交流如果有任何问题我会及时回复

更多文章