1. 项目技术栈解析与选型考量
这套图书管理系统采用了当前Java Web开发中最主流的技术组合:SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0。这种技术选型不是偶然的,而是经过实际项目验证的黄金组合。
后端选择Spring Boot 2.x而非3.x版本,主要考虑到企业环境的稳定性需求。虽然Spring Boot 3.x已经发布,但很多企业级组件(如某些安全框架)的兼容性仍在完善中。Spring Boot 2.7.x作为长期支持版本,具有以下实战优势:
- 自动配置机制大幅减少了XML配置,一个基础的REST控制器只需3个注解即可运行
- 内嵌Tomcat服务器使得部署异常简单,打包成单一JAR文件即可运行
- Actuator端点提供/health、/metrics等监控接口,方便运维
- 与MyBatis-Plus的starter完美集成,几乎零配置即可使用CRUD接口
前端选用Vue 3的组合式API,相比选项式API有显著优势:
javascript复制// 组合式API示例 - 图书列表功能
import { ref, onMounted } from 'vue'
import { getBookList } from '@/api/book'
export default {
setup() {
const books = ref([])
const loading = ref(false)
const fetchData = async () => {
loading.value = true
try {
books.value = await getBookList()
} finally {
loading.value = false
}
}
onMounted(fetchData)
return { books, loading }
}
}
这种写法将相关逻辑集中在一起,比分散在data/methods中的代码更易维护。
数据库层采用MySQL 8.0而非5.7,主要看中其:
- 窗口函数等高级SQL特性
- JSON字段类型的完善支持
- 性能提升(官方基准测试显示8.0比5.7快2倍)
- 更好的Unicode支持(默认utf8mb4字符集)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计与核心模块
2.1 分层架构实现
系统采用经典的三层架构,但每层都有现代框架的优化实现:
表现层:
- Vue 3处理视图渲染
- Axios封装了RESTful API调用
- Vue Router管理前端路由
- Pinia替代Vuex进行状态管理
业务逻辑层:
- Spring Boot控制器使用@RestController注解
- 服务层采用接口+实现类的模式
- 自定义异常处理(@ControllerAdvice)
- 参数校验(Hibernate Validator)
数据访问层:
- MyBatis-Plus通用Mapper实现基础CRUD
- 动态SQL通过@SelectProvider实现
- 分页插件自动处理PageHelper转换
2.2 关键业务流程实现
以图书借阅流程为例,展示多模块协作:
- 前端Vue组件触发借阅动作:
javascript复制const handleBorrow = async (bookId) => {
await borrowBook({
bookId,
userId: store.user.id
})
await fetchBookList() // 刷新列表
}
- 后端Spring Boot控制器处理请求:
java复制@PostMapping("/borrow")
public R borrow(@Valid @RequestBody BorrowDTO dto) {
Book book = bookService.getById(dto.getBookId());
if (book.getStock() <= 0) {
throw new BusinessException("该图书已无库存");
}
return R.ok(borrowService.createBorrow(dto));
}
- MyBatis-Plus执行库存扣减:
java复制public boolean deductStock(Long bookId) {
return update(new UpdateWrapper<Book>()
.setSql("stock = stock - 1")
.eq("id", bookId)
.gt("stock", 0));
}
这种设计保证了:
- 前端轻量化,只负责数据展示和用户交互
- 业务逻辑集中在服务层,便于单元测试
- 数据访问通过Mapper接口,与具体实现解耦
3. 关键技术实现细节
3.1 MyBatis-Plus高级应用
项目充分利用了MyBatis-Plus的特性来简化开发:
- 自动填充功能处理创建/更新时间:
java复制@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
- 逻辑删除配置:
yaml复制mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-not-delete-value: 0
logic-delete-value: 1
- 多租户SQL解析器(适用于SaaS场景):
java复制public class TenantSqlParser implements ISqlParser {
@Override
public SqlInfo processParser(TableName tableName, String sql) {
if (!"sys_tenant".equals(tableName.getTableName())) {
String newSql = sql + " WHERE tenant_id = " + getTenantId();
return SqlInfo.newInstance().setSql(newSql);
}
return null;
}
}
3.2 Vue3组合式API实践
前端采用
