基于SpringBoot的图书馆管理系统设计与实现
一、系统概述
图书馆管理系统是基于SpringBoot框架开发的现代化图书管理解决方案,旨在提高图书馆工作效率,简化图书借阅流程,实现图书资源的数字化管理。
二、技术栈
- 后端框架:SpringBoot 2.5+
- 前端技术:Thymeleaf/Vue.js + Element UI
- 数据库:MySQL 8.0
- ORM框架:MyBatis/MyBatis-Plus
- 安全框架:Spring Security
- 构建工具:Maven/Gradle
- 其他技术:Lombok、Swagger(API文档)、Redis(缓存)
三、系统功能模块
1. 用户管理模块
- 用户注册与登录
- 用户信息管理
- 权限分级管理(管理员、工作人员、普通读者)
- 密码修改与重置
2. 图书管理模块
- 图书信息CRUD操作
- 图书分类管理
- 图书检索(支持多条件组合查询)
- 图书状态管理(在馆、借出、预约中、维修中等)
3. 借阅管理模块
- 图书借阅与归还
- 借阅记录查询
- 逾期提醒与处理
- 预约功能
4. 统计报表模块
- 借阅量统计
- 图书流通率分析
- 读者活跃度分析
- 数据可视化展示
5. 系统管理模块
- 系统参数配置
- 操作日志记录
- 数据备份与恢复
四、数据库设计
主要数据表结构:
-
用户表(user)
CREATE TABLE `user` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(100) NOT NULL COMMENT '密码', `real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名', `phone` varchar(20) DEFAULT NULL COMMENT '联系电话', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `role` tinyint DEFAULT '2' COMMENT '角色(0:管理员,1:工作人员,2:普通读者)', `status` tinyint DEFAULT '1' COMMENT '状态(0:禁用,1:正常)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-
图书表(book)
CREATE TABLE `book` ( `id` bigint NOT NULL AUTO_INCREMENT, `isbn` varchar(20) NOT NULL COMMENT 'ISBN编号', `title` varchar(100) NOT NULL COMMENT '书名', `author` varchar(50) DEFAULT NULL COMMENT '作者', `publisher` varchar(100) DEFAULT NULL COMMENT '出版社', `publish_date` date DEFAULT NULL COMMENT '出版日期', `category_id` bigint DEFAULT NULL COMMENT '分类ID', `price` decimal(10,2) DEFAULT NULL COMMENT '价格', `total_copies` int DEFAULT '1' COMMENT '总数量', `available_copies` int DEFAULT '1' COMMENT '可借数量', `location` varchar(50) DEFAULT NULL COMMENT '馆藏位置', `status` tinyint DEFAULT '1' COMMENT '状态(0:下架,1:在馆,2:借出,3:预约中,4:维修中)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_isbn` (`isbn`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书表';
-
借阅记录表(borrow_record)
CREATE TABLE `borrow_record` ( `id` bigint NOT NULL AUTO_INCREMENT, `user_id` bigint NOT NULL COMMENT '用户ID', `book_id` bigint NOT NULL COMMENT '图书ID', `borrow_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '借阅时间', `due_time` datetime DEFAULT NULL COMMENT '应还时间', `return_time` datetime DEFAULT NULL COMMENT '实际归还时间', `status` tinyint DEFAULT '1' COMMENT '状态(1:借阅中,2:已归还,3:逾期未还)', `renew_count` int DEFAULT '0' COMMENT '续借次数', `operator_id` bigint DEFAULT NULL COMMENT '操作员ID', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_user_id` (`user_id`), KEY `idx_book_id` (`book_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='借阅记录表';
五、核心功能实现
1. 图书检索接口实现
@RestController
@RequestMapping("/api/book")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/search")
public Result<PageInfo<BookVO>> searchBooks(
@RequestParam(required = false) String keyword,
@RequestParam(required = false) Long categoryId,
@RequestParam(required = false) String author,
@RequestParam(required = false) Integer status,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
BookQueryDTO queryDTO = new BookQueryDTO();
queryDTO.setKeyword(keyword);
queryDTO.setCategoryId(categoryId);
queryDTO.setAuthor(author);
queryDTO.setStatus(status);
PageInfo<BookVO> pageInfo = bookService.searchBooks(queryDTO, pageNum, pageSize);
return Result.success(pageInfo);
}
}
2. 借书业务逻辑实现
@Service
@Transactional
public class BorrowServiceImpl implements BorrowService {
@Autowired
private BookMapper bookMapper;
@Autowired
private BorrowRecordMapper borrowRecordMapper;
@Autowired
private UserMapper userMapper;
@Override
public Result borrowBook(Long userId, Long bookId) {
// 检查用户是否存在且状态正常
User user = userMapper.selectById(userId);
if (user == null || user.getStatus() != 1) {
return Result.error("用户不存在或已被禁用");
}
// 检查图书是否存在且可借
Book book = bookMapper.selectById(bookId);
if (book == null || book.getStatus() != 1 || book.getAvailableCopies() <= 0) {
return Result.error("图书不存在或不可借");
}
// 检查用户是否有逾期未还图书
if (borrowRecordMapper.countOverdueRecords(userId) > 0) {
return Result.error("您有逾期未还图书,请先归还");
}
// 创建借阅记录
BorrowRecord record = new BorrowRecord();
record.setUserId(userId);
record.setBookId(bookId);
record.setBorrowTime(new Date());
record.setDueTime(DateUtils.addDays(new Date(), 30)); // 默认借期30天
record.setStatus(1);
borrowRecordMapper.insert(record);
// 更新图书信息
book.setAvailableCopies(book.getAvailableCopies() - 1);
if (book.getAvailableCopies() == 0) {
book.setStatus(2); // 状态改为借出
}
bookMapper.updateById(book);
return Result.success("借书成功");
}
}
3. Spring Security配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsServiceImpl userDetailsService;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/admin/**").hasRole("ADMIN")
.antMatchers("/api/staff/**").hasAnyRole("STAFF", "ADMIN")
.antMatchers("/api/reader/**").hasAnyRole("READER", "STAFF", "ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/api/auth/login")
.successHandler(loginSuccessHandler())
.failureHandler(loginFailureHandler())
.and()
.logout()
.logoutUrl("/api/auth/logout")
.logoutSuccessHandler(logoutSuccessHandler())
.and()
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
@Bean
public JwtAuthenticationFilter jwtAuthenticationFilter() {
return new JwtAuthenticationFilter();
}
// 其他配置...
}
六、系统特色
- 响应式设计:支持PC端和移动端访问
- 高性能检索:采用Elasticsearch实现图书全文检索(可选)
- 智能推荐:基于用户借阅历史推荐相关图书
- 多维度统计:提供丰富的统计图表辅助决策
- 安全可靠:采用JWT实现无状态认证,防止CSRF攻击
七、部署方案
-
开发环境:
- JDK 1.8+
- MySQL 8.0
- Redis(可选)
- Maven 3.6+
-
生产环境:
- Docker容器化部署
- Nginx反向代理
- 集群部署(可选)
八、扩展方向
- 集成人脸识别技术实现刷脸借书
- 增加微信小程序端
- 实现图书二维码/NFC标签管理
- 加入大数据分析模块
- 开发自助借还书终端接口
九、总结
基于SpringBoot的图书馆管理系统充分利用了SpringBoot的快速开发特性,结合现代化的前端技术,构建了一个功能完善、性能优良、易于维护的图书管理平台。系统采用模块化设计,便于功能扩展和二次开发,能够满足各类图书馆的数字化管理需求。