
一、需求分析与规划
1.1 项目背景与意义
随着数字化阅读与线上服务的发展,传统的线下图书借阅模式逐渐向线上迁移。在线图书借阅平台旨在为图书馆、社区书屋或小型读书组织提供一套 数字化、自动化、易管理 的图书借还解决方案,提升管理效率,降低人工成本,同时为用户提供便捷的图书检索与借阅体验。
1.2 功能需求梳理
确定平台应具备以下核心功能模块:
| 模块 | 功能点 | 说明 | 
|---|---|---|
| 用户管理 | 用户注册/登录、个人信息管理 | 支持读者与管理员角色 | 
| 图书管理 | 图书录入、编辑、查询、下架 | 包括 ISBN、书名、作者、库存等 | 
| 借还管理 | 借书、还书、续借、借阅历史 | 记录借阅时间、归还期限 | 
| 逾期管理 | 逾期提醒、罚金计算 | 可扩展短信/邮件通知 | 
| 统计分析 | 借阅排行、用户活跃度 | 后期可加入图表展示 | 
1.3 核心模块划分
- 前端(可选):用户界面,用于展示图书列表、提交借阅申请等。
- 后端:处理业务逻辑,包括用户认证、图书CRUD、借还流程控制等。
- 数据库:存储用户信息、图书信息、借阅记录等。
- 管理后台(可选):供管理员管理图书与用户。
1.4 技术选型
| 层级 | 技术 | 说明 | 
|---|---|---|
| 开发工具 | IntelliJ IDEA | Java 开发 IDE | 
| 后端框架 | Spring Boot 2.7+ | 快速构建服务端应用 | 
| 数据库 | MySQL 8.0 | 关系型数据库,存储核心数据 | 
| ORM | MyBatis Plus | 简化数据库操作 | 
| 构建工具 | Maven | 依赖与项目管理 | 
| 智能开发辅助 | 飞算JavaAI | 智能代码生成与引导 | 
| (可选)前端 | Vue.js / ElementUI | 若实现前后端分离 | 
| 部署 | Docker / JDK + Tomcat | 本地或云服务器部署 | 
1.5 系统流程概览
下面是用户借阅图书的核心业务流程图:
该流程涵盖了用户登录 → 选书 → 借阅判断 → 库存更新 → 借阅记录的核心路径。
1.6 项目目标与预期成果
- 实现一个 B/S 架构 的在线图书借阅平台
- 支持完整的 图书与用户管理闭环
- 借助 飞算JavaAI 提升开发效率,减少重复代码编写
- 提供清晰的项目结构与可维护代码
- 完成开发过程记录、优化实践与总结反思
二、飞算JavaAI开发实录
2.1 飞算JavaAI 简介
飞算JavaAI 是面向 Java 开发者的一款 智能编程辅助工具,能够基于自然语言描述或页面原型,**自动生成 Java 代码结构,大大加快开发进度,尤其适合快速搭建 CRUD 项目。
主要功能包括:
集成智能会话、引导式项目生成与Java工具箱等功能,智能会话含编程智能体自动执行任务、智能问答实时答疑及Java Chat做工程分析与代码优化;引导式生成完整项目先拆解需求理解、接口设计等任务,再逐层生成源码并预览确认;Java工具箱有项目分析器一键生成文档和SQL Chat把自然语言转SQL提效;还有深度学习用户偏好(记技术栈等)与智能分析现有项目(全量代码索引关联)辅助开发。
2.2 开发过程记录

- 进行询问问题;然后等待回答即可。

- 下面等待比较久。

- 一个系统需求的关键点总结,涵盖7个方面。其一为用户管理功能,含注册、登录、信息维护及权限控制;其二是图书资源管理,支持信息的增删改查;其三为借阅管理,涵盖借书、还书等操作及记录查询;其四为图书分类与搜索,可通过多种方式检索;其五是系统公告与通知,能发布平台公告和发送消息;其六是数据统计与报表,生成相关分析报告;其七是后台管理系统,便于管理员统一管理。

- 图书管理系统具备图书信息增删改查与分类设置、借阅全流程管理及查询跟踪提醒、多维度图书检索与分类、公告通知发布、数据统计分析报表生成、后台数据集中管控运维等功能,可提升图书管理效率与服务水平。

- 图书管理系统相关的核心处理逻辑。首先,对于图书删除操作,入参需包含必填的图书 ID,先判断图书是否存在,若不存在返回 code 为 000001、提示图书不存在的 RestResult 结果;若存在则执行删除操作,成功后返回 code 为 000000、提示调用成功的 RestResult 结果。其次,借阅记录查询接口,入参有必填的页码、每页大小、用户 ID、图书 ID 以及状态,根据分页参数和筛选条件查询借阅记录,有数据时返回 code 为 000000、提示调用成功及对应数据的 RestResult 结果,若无数据则返回空列表及同样成功的 RestResult 结果。此外,右侧还罗列了用户管理、图书资源管理等方面的其他功能,如用户登录、获取用户详情、查询图书详情等。

- 下面等待生成源码。

- 生成模块源码过程还有提示。也是非常人性化。

- 项目落地。
2.3 代码生成示例(简化版)
飞算JavaAI 可成的 BookController 如下(简化):
@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;
    @GetMapping("/list")
    public List<Book> listBooks() {
        return bookService.listAll();
    }
    @PostMapping("/add")
    public String addBook(@RequestBody Book book) {
        bookService.save(book);
        return "success";
    }
}
Service:
package com.feisuanyz.service;
import com.feisuanyz.dto.BorrowDTO;
import com.feisuanyz.dto.BorrowQuery;
import com.feisuanyz.dto.RestResult;
/**
 * <p>
 *   借阅业务逻辑接口
 * </p>
 * @author z2222
 */
public interface BorrowService {
    RestResult borrowBook(BorrowDTO borrowDTO);
    RestResult returnBook(BorrowDTO borrowDTO);
    RestResult renewBook(BorrowDTO borrowDTO);
    RestResult getBorrowHistory(BorrowQuery borrowQuery);
    RestResult getBorrowStatus(BorrowQuery borrowQuery);
}
公共通知管理:
package com.feisuanyz.controller;
import com.feisuanyz.dto.NoticeDTO;
import com.feisuanyz.dto.NoticeQuery;
import com.feisuanyz.dto.NoticeUpdateStatusDTO;
import com.feisuanyz.dto.RestResult;
import com.feisuanyz.service.NoticeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
 * <p>
 *   公告资源管理控制器
 * </p>
 * @author z2222
 */
@RestController
@RequestMapping("/notices")
@Slf4j
public class NoticeController {
    @Autowired
    private NoticeService noticeService;
    @PostMapping("/publish")
    public RestResult publishNotice(@Validated @RequestBody NoticeDTO noticeDTO) {
        return noticeService.publishNotice(noticeDTO);
    }
    @GetMapping("/list")
    public RestResult getNoticesByPage(@Validated NoticeQuery noticeQuery) {
        return noticeService.getNoticesByPage(noticeQuery);
    }
    @DeleteMapping("/{id}")
    public RestResult deleteNotice(@PathVariable("id") Long noticeId) {
        return noticeService.deleteNotice(noticeId);
    }
    @PutMapping("/status")
    public RestResult updateNoticeStatus(@Validated @RequestBody NoticeUpdateStatusDTO updateStatusDTO) {
        return noticeService.updateNoticeStatus(updateStatusDTO);
    }
}
借阅系统接口:
package com.feisuanyz.service;
import com.feisuanyz.dto.BorrowDTO;
import com.feisuanyz.dto.BorrowQuery;
import com.feisuanyz.dto.RestResult;
/**
 * <p>
 *   借阅业务逻辑接口
 * </p>
 * @author z2222
 */
public interface BorrowService {
    RestResult borrowBook(BorrowDTO borrowDTO);
    RestResult returnBook(BorrowDTO borrowDTO);
    RestResult renewBook(BorrowDTO borrowDTO);
    RestResult getBorrowHistory(BorrowQuery borrowQuery);
    RestResult getBorrowStatus(BorrowQuery borrowQuery);
}
数据统计与表:
package com.feisuanyz.dto;
import jakarta.validation.constraints.NotNull;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * <p>
 *   逾期未还书籍统计查询参数封装对象
 * </p>
 * @author z2222
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class OverdueBookQuery {
    /**
     * 开始日期,必填
     */
    @NotNull(message = "开始日期不能为空")
    private Date startDate;
    /**
     * 结束日期,必填
     */
    @NotNull(message = "结束日期不能为空")
    private Date endDate;
}
还有很多这里就不解释了。
三、优化与调试心得
3.1 开发中遇到的问题
- 问题1:生成的代码缺少部分注解,如 @Data 或 @Entity - 解决:手动补充 Lombok 注解,或调整 AI 提示词,要求生成带注解的实体类。
 
- 问题2:借阅逻辑中未考虑库存扣减的原子性 - 解决:引入事务管理 @Transactional,防止超借。
 
- 问题3:日期格式化问题,前端无法解析 - 解决:在实体类字段上增加 @JsonFormat 注解,统一返回格式。
 
3.2 SQL 优化实践
- 为 book表的isbn和name字段添加索引,提高查询效率。
- 借阅记录表按时间倒序建立索引,优化用户借阅历史查询。
CREATE INDEX idx_book_name ON book(name);
CREATE INDEX idx_borrow_time ON borrow_record(borrow_time DESC);
3.3 使用飞算JavaAI 智能会话优化开发
通过 智能会话框,直接询问:“如何实现按书名模糊查询?”

- AI 返回代码片段,我直接复用并集成到 Controller 中,节省大量时间。
四、成果展示与总结
4.1 工程结构展示(简化版)
online-library/
├── src/main/java/
│   ├── com.example.library/
│   │   ├── controller/
│   │   │   └── BookController.java
│   │   ├── service/
│   │   │   ├── BookService.java
│   │   │   └── impl/
│   │   │       └── BookServiceImpl.java
│   │   ├── mapper/
│   │   │   └── BookMapper.java
│   │   ├── entity/
│   │   │   └── Book.java
│   │   └── LibraryApplication.java
├── src/main/resources/
│   ├── application.yml
│   └── mapper/*.xml (如使用XML方式)
└── pom.xml
各模块代码量占比
说明:若包含 Vue 前端,则前端代码量可能占比较高;纯后端则 Service 与 Entity 占比大。
4.2 核心功能展示
来到对应界面:

下面是主页可以插入图书:


- 可以查看修改删除等。
总结下:
本系统相对于我查阅到的其他系统具有如下优点:其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好。
本系统在技术层面具有如下优点:第一,用java实现动态页面,使软件系统具备了很好的可维护性和可复用性。其次,在本系统的编写流程中使用的是Spring
Boot框架,该框架将更有效的把显示功能与逻辑分开,使得模块更易于管理,尤其适用于大型项目的编写。第三,后台使用的MySQL数据库系统,MySQL的数据库系统引擎主要集中在了对XML标准的支持,同时具备可扩充、容易应用和安全性高的优点。
综上所述,通过这次从零开始的毕业设计是一次全新的开始,也期待圆满结束。我也希望这次的设计能通过我后期的自主学习把它趋向于完美,成为我的自主创作经验。
4.3 飞算JavaAI 的优势与不足
| 优点 | 不足 | 
|---|---|
| ✅ 快速生成基础 CRUD,提升开发效率 | ❌ 复杂业务逻辑仍需手动编写 | 
| ✅ 减少样板代码,如 Controller/Service 结构 | ❌ 生成的代码有时需优化注解或结构 | 
| ✅ 智能对话辅助,可提问获取代码建议 | ❌ 对高级定制化需求支持有限 | 
| ✅ 适合快速原型开发、中小型项目 | ❌ 依赖平台稳定性与网络 | 
4.4 个人使用体会与展望
通过本次实践,深刻体会到 AI 辅助编程工具 如飞算JavaAI 在 快速搭建基础框架、减少重复劳动 上的优势。尤其对于初学者或需要迅速验证产品原型的团队,是非常实用的工具。
未来希望 AI 工具能够:
- 更精准理解复杂业务语义
- 支持生成分布式、微服务架构代码
- 提供更强大的自定义模板能力
欢迎大家使用飞算:官网!