基于 Springboot+vue 图书个性化推荐系统的设计与实现
1. 项目简介
图书管理系统是一个基于Spring Boot的Web应用,专为学校图书馆设计,支持学生图书预约、退换、收藏及管理员对图书信息的全面管理。系统包含学生端和管理员端,提供图书信息维护、预约审核、退换处理、留言互动、好书推荐等功能,实现图书馆业务流程的数字化管理。
2. 技术栈
类别 | 技术组件 |
---|---|
后端框架 | Spring Boot 2.2.2.RELEASE |
ORM | MyBatis-Plus 2.3 |
数据库 | MySQL 5.7 |
安全框架 | Shiro 1.3.2 (用于身份认证和权限控制) |
工具库 | FastJSON(JSON处理)、Hutool(工具集)、Commons-Lang3(字符串处理) |
接口规范 | RESTful API |
3. 系统功能模块
3.1 核心功能
模块 | 功能描述 |
---|---|
学生管理 | 学号注册、登录、个人信息维护(班级/联系方式) |
图书管理 | 图书分类维护(类别名称)、图书信息增删改查(编号/名称/作者/出版社/数量) |
预约系统 | 学生预约图书 → 管理员审核 → 预约状态更新 |
退换系统 | 学生提交退换申请(含退换原因) → 管理员审核并回复 |
互动功能 | 图书评论、留言板(学生留言+管理员回复)、图书收藏 |
推荐系统 | 管理员发布好书推荐(标题/简介/图片/内容) |
3.2 特色功能
- 智能排序:按图书点击量自动排序热门书籍
- 数据统计:基于SQL的预约/退换数据分组统计
- 安全控制:Token机制实现会话管理,防SQL注入
- 文件管理:图片上传(图书封面/推荐海报)
4. 数据库设计
4.1 核心表结构
/* 图书信息表 (tushuxinxi) */
CREATE TABLE `tushuxinxi` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tushubianhao` VARCHAR(200) UNIQUE, -- 图书编号
`tushumingcheng` VARCHAR(200), -- 图书名称
`tushuleibie` VARCHAR(200), -- 图书类别
`tupian` VARCHAR(200), -- 封面图片
`zuozhe` VARCHAR(200), -- 作者
`chubanshe` VARCHAR(200), -- 出版社
`shuliang` INT, -- 库存数量
PRIMARY KEY (`id`)
);
/* 预约记录表 (tushuyuyue) */
CREATE TABLE `tushuyuyue` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tushubianhao` VARCHAR(200), -- 关联图书编号
`xuehao` VARCHAR(200), -- 学号
`shenqingriqi` DATE, -- 申请日期
`sfsh` VARCHAR(200) DEFAULT '否', -- 审核状态(是/否)
PRIMARY KEY (`id`)
);
4.2 关键关系
- 学生(
xuesheng
) ↔ 预约记录(tushuyuyue
):1对多 - 图书(
tushuxinxi
) ↔ 评论(discusstushuxinxi
):1对多 - 图书分类(
tushufenlei
) → 图书(tushuxinxi
):分类导航
5. 核心代码示例
5.1 学生预约接口 (TushuyuyueController.java
)
@RestController
@RequestMapping("/tushuyuyue")
public class TushuyuyueController {
@Autowired
private TushuyuyueService tushuyuyueService;
// 学生提交预约请求
@PostMapping("/add")
public R add(@RequestBody TushuyuyueEntity tushuyuyue) {
tushuyuyue.setId(System.currentTimeMillis()); // 生成唯一ID
tushuyuyueService.insert(tushuyuyue);
return R.ok();
}
// 管理员审核预约
@PostMapping("/update")
public R update(@RequestBody TushuyuyueEntity tushuyuyue) {
tushuyuyueService.updateById(tushuyuyue); // 更新审核状态
return R.ok();
}
}
5.2 安全拦截器 (AuthorizationInterceptor.java
)
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 1. 从Header提取Token
String token = request.getHeader("Token");
// 2. 验证Token有效性
TokenEntity tokenEntity = tokenService.getTokenEntity(token);
if (tokenEntity == null) {
response.sendError(401, "无效Token");
return false;
}
// 3. 绑定会话信息
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
return true;
}
}
5.3 图书检索服务 (TushuxinxiServiceImpl.java
)
@Service("tushuxinxiService")
public class TushuxinxiServiceImpl extends ServiceImpl<TushuxinxiDao, TushuxinxiEntity>
implements TushuxinxiService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
// 1. 构建动态查询条件
EntityWrapper<TushuxinxiEntity> wrapper = new EntityWrapper<>();
if (params.get("tushumingcheng") != null) {
wrapper.like("tushumingcheng", params.get("tushumingcheng"));
}
// 2. 执行分页查询
Page<TushuxinxiEntity> page = this.selectPage(
new Query<TushuxinxiEntity>(params).getPage(),
wrapper
);
// 3. 更新图书点击量
for (TushuxinxiEntity book : page.getRecords()) {
book.setClicknum(book.getClicknum() + 1);
this.updateById(book);
}
return new PageUtils(page);
}
}
6. 部分截图
7. 项目总结
7.1 技术亮点
- 分层解耦架构:
- Controller层处理HTTP请求
- Service层实现业务逻辑
- Dao层通过MyBatis-Plus简化SQL操作
- 高效查询优化:
- 基于EntityWrapper的动态条件拼接
- 分页查询性能优化(PageUtils封装)
- 安全增强:
- Shiro + Token双认证机制
- SQLFilter防止注入攻击
部署说明:
- 初始化MySQL数据库(执行
db.sql
)- 配置
application.properties
数据库连接- 使用
mvn spring-boot:run
启动项目
系统通过模块化设计实现高内聚低耦合,可作为校园数字化建设的核心组件,未来可通过微服务化进一步提升系统扩展性。
演示地址
后台地址 http://springbootxs5o6.xiaobias.com/springbootxs5o6/admin/dist/index.html
前台地址:http://springbootjf5zc.xiaobias.com/springbootjf5zc/front/index.html
管理员: abo/abo
学生 :学生1/123456
学生2/123456
学生3/123456
资源地址:https://fifteen.xiaobias.com/source/15