AI辅助JavaWeb实战:从零用Trae搭建图书管理系统

0 阅读10分钟

我是高校老师,以前干过开发。这篇文章不光教你做一个系统,更想告诉你——你以后写代码的方式,可能彻底变了。


先看成品

先不展开技术细节,直接看成品页面。下面三张截图依次对应:登录用户端图书列表(含搜索与分类筛选)、管理员后台首页

登录页

login.png

用户端 · 图书列表

index-user.png

管理端 · 后台首页

admin-index.png

  • 登录/注册 → 普通用户进图书浏览,管理员进后台
  • 书名搜索、分类筛选、图书详情、一键借阅
  • 管理员:图书CRUD、用户管理、借阅记录查看、手动归还、超期追踪

完整项目代码 + 需求设计文档 + 建库脚本 + 测试数据,全在 GitHub:

🔗 GitHub 仓库链接


我是谁?为什么写这篇

我是一名计算机专业的老师,以前做过几年软件开发。

我越来越明确地感受到:会写代码很重要,会正确使用 AI 编程工具同样重要。它不是替代基础学习的捷径,而是学生未来学习、开发和协作时必须掌握的一种新能力。这学期我教 JavaWeb开发技术,将AI 编程工具 Trae 引入课堂

这篇文章就是我实际教学过程的复盘。不是一个炫技的 demo,而是一套可复用的方法论


传统开发 vs AI辅助开发:差在哪?

我画张表你就明白了:

环节传统方式Trae辅助
需求整理手动整理半天,来回改对话式梳理,20分钟出结构化文档
设计文档翻模板、粘贴拼接一次性生成完整设计文档
数据库设计翻教材、手写建表SQL描述需求,一键生成DDL+测试数据
UI设计手写HTML/CSS,调半天用 frontend design skill 直接出页面
后端代码一个Servlet一个Servlet敲把设计文档喂进去,一把梭全部生成
测试Postman一个个接口点生成测试用例,全链路验证

听起来像在吹牛?往下看。


第0步:用Trae整理需求(最重要的一步)

我见过很多人用 AI 写代码翻车。原因几乎一样:需求没想清楚就让 AI 写代码,它瞎猜,你也瞎改。

我的方法是反过来的——先让 AI 帮我把"到底要做什么"理清楚。

对话式需求梳理

跟 Trae 聊几轮,把模糊的想法变成结构化输出:

  • 这个系统有哪些用户角色?(普通用户 / 管理员)
  • 每个角色能干什么?(浏览图书、借阅、管理……)
  • 业务流程是什么样的?(登录 → 浏览 → 借书 → 还书)
  • 有没有边界条件?(最多借5本、超期不能借、有借阅的不能删)

聊完,Trae 直接给我输出了一份完整的需求文档。

生成的完整设计文档

这份文档包含:

  • 功能需求:用户模块(注册/登录/个人信息)、图书模块(浏览/搜索/详情)、借阅模块(借书/还书/记录)、管理模块(图书CRUD/用户管理/借阅管理)
  • 业务流程图:注册登录流程、借书流程、还书流程、超期处理流程——全画好了
  • 数据库设计:users / books / borrow_records 三张表,字段类型、索引、外键、注释——完整 DDL
  • API接口规范:7个Servlet模块、每个接口的请求参数和响应格式——明明白白
  • 技术栈选型:Jakarta Servlet + MySQL + Tomcat 11 + Maven
  • 边界条件:借阅上限、超期限制、删除规则

💡 这一步是整个方法论的核心。文档写清楚了,后面每一步都是"翻译",而不是"探索"。


第1步:用Trae设计数据库

需求文档里已经把表结构定义好了。我说一句:

"按照设计文档里的数据库部分,生成完整建表 SQL,同时生成管理员初始化脚本和测试数据。"

Trae 直接输出:

-- 用户表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    name VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL,
    role VARCHAR(20) NOT NULL DEFAULT 'user',
    user_type VARCHAR(20) NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 图书表
CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    author VARCHAR(100) NOT NULL,
    -- ... 完整字段
    total_copies INT NOT NULL DEFAULT 1,
    available_copies INT NOT NULL DEFAULT 1
);

-- 借阅记录表
CREATE TABLE borrow_records (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    book_id INT NOT NULL,
    borrow_date DATETIME DEFAULT CURRENT_TIMESTAMP,
    due_date DATETIME NOT NULL,
    return_date DATETIME DEFAULT NULL,
    status VARCHAR(20) NOT NULL DEFAULT 'borrowing',
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (book_id) REFERENCES books(id)
);

一个细节值得注意:复本设计。一本书可以有多个复本(total_copies),当前可借的数量是 available_copies。借书 -1,还书 +1。这个设计在整个系统的借还逻辑中贯穿始终,Trae 理解得很到位。


第2步:Trae设计UI界面

不写一行 HTML/CSS。用 Trae 的 frontend design skill

跟 Trae 描述:

"设计一个图书管理系统的前端界面,包含:登录页(简洁、带角色区分)、用户首页(搜索框+分类下拉+图书卡片网格)、管理员后台(侧边栏导航+数据面板)"

效果:

📸登录页UI设计

登录页UI设计

📸图书浏览页UI设计,带搜索和分类筛选

image.png 每个图书卡片显示封面、书名、作者、出版社,以及 "可借 3/5" 这样的复本状态。搜索框支持按书名/作者模糊匹配,分类下拉点击即筛选。

📸管理员后台面板

image.png

界面出来之后,学生对"做项目"这件事明显更有信心了——毕竟看到好看的页面,比看到一堆 Servlet 代码直观得多。


第3步:后端功能一把梭

这一步,可能是最颠覆认知的地方。

为什么能一把梭?

传统的 AI 编程,一般是:说一句话 → AI 写一段 → 你检查 → 再说 → 再写。来回拉扯。

但我要说的是:如果你的设计文档足够清晰,你根本不需要来回拉扯。

我们在第0步磨出来的设计文档里:

  • 7 个 Servlet 模块、谁负责什么 → 清清楚楚
  • 每个接口的路径、参数、返回格式 → 明明白白
  • 数据库表结构、字段、关系 → 板上钉钉

这就是给 AI 的"最高指示"。它不需要猜——翻译就行。

操作方式

把设计文档喂给 Trae,核心 prompt 就一句:

"按照这个设计文档,帮我实现全部后端代码。项目结构按 controller / service / dao / entity / util 分层,Servlet 用 Jakarta 规范,接口返回 JSON 格式,密码用 MD5 加密处理。"

Trae 一次性输出:

book-manage/
├── src/main/java/com/library/
│   ├── controller/
│   │   ├── AuthServlet.java       # 登录/注册/登出
│   │   ├── UserServlet.java       # 个人信息/修改密码
│   │   ├── BookServlet.java       # 图书浏览/搜索/详情
│   │   ├── BorrowServlet.java     # 借书/还书/借阅记录
│   │   ├── AdminBookServlet.java  # 管理员-图书CRUD
│   │   ├── AdminUserServlet.java  # 管理员-用户管理
│   │   └── AdminBorrowServlet.java # 管理员-借阅管理
│   ├── service/                   # 业务逻辑层
│   ├── dao/                       # 数据访问层
│   ├── entity/                    # 实体类(User, Book, BorrowRecord)
│   └── util/                      # 工具类(DB连接、MD5加密)
├── pom.xml
└── web.xml

导进 IDEA,跑起来调

代码生成 ≠ 完事。下一步:

  1. 用 IntelliJ IDEA 打开项目
  2. 配置 Tomcat 11
  3. MySQL 建库 → 跑建表脚本 → 插测试数据
  4. 启动 → 看日志 → 哪里报错调哪里

💡 角色分工总结:Trae 负责"写",IDEA 负责"验证",你负责判断对错。三个各司其职,效率翻倍。

需要微调的地方

一把梭出来的代码,通常就调这几个点:

  • import 路径:Trae 偶尔混 javax.servletjakarta.servlet,全局替换一下就好
  • 数据库连接参数:改 db.properties 里的用户名密码
  • 中文编码:JDBC URL 加 characterEncoding=utf8,Servlet 加 request.setCharacterEncoding("UTF-8")
  • 边界条件:比如"超期未还不能借书"这个逻辑,设计文档里有,但 Trae 实现时需要确认一下判断时机(我选择在借书时实时检查,不用定时任务)

这些不是 AI 的问题,是从文档到代码的正常摩擦。五分钟搞定。


第4步:前后端对接 & 测试

后端接口跑通了,前端页面也有了,接下来是把它们连起来。

前端调用

用原生 Fetch API,前端页面里这样写:

// 登录
const res = await fetch('/api/auth?action=login', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ username: '20220104044', password: '123456' })
});
const data = await res.json();
if (data.code === 200) {
    sessionStorage.setItem('user', JSON.stringify(data.data));
    window.location.href = 'index-user.html';
}

登录后用户信息存 sessionStorage,每次请求带上 Session(浏览器自动管理 Cookie),后端过滤器验证权限。

全链路测试

让 Trae 帮我生成测试场景:

  1. 注册一个新用户 → ✅
  2. 用 admin 登录,新增一本图书 → ✅
  3. 普通用户借这本书 → ✅
  4. 再借一本,验证"我的借阅"显示两条 → ✅
  5. 归还一本 → 验证可借复本数恢复 → ✅
  6. 故意借第6本 → 提示"已达上限" → ✅
  7. 删除一本有借阅记录的图书 → 提示"无法删除" → ✅

走完好,系统的核心逻辑就跑通了。


踩坑实录

真实开发过程中遇到的坑,分享给你:

现象解法
Tomcat 11 的 Jakarta 迁移Trae 默认生成 javax.servlet.*,编译报错明确告诉它用 Jakarta,生成后全局检查 import
中文乱码数据库存进去是乱码,页面显示也是乱码JDBC URL 加 characterEncoding=utf8,Servlet 统一设请求/响应编码
超期检查的性能考虑Trae 建议用定时任务扫描全表,太重改为用户借书时实时查询 status='borrowing' AND due_date < NOW()
删除关联检查Trae 有时忽略"有借阅记录不能删"这个约束提醒它加前置检查,删前查 borrow_records 表
JSON 解析依赖忘了加 Jackson 依赖,返回 JSON 时报错pom.xml 加上 jackson-databind

每个坑踩完都是一次学习。关键是:有 AI 在,解决这些问题的速度快了至少 3 倍。


复盘:AI辅助开发的正确姿势

这篇文章真正的价值,不是"你会做一个图书管理系统了",而是你学会了一套工作方法:

我的 AI 开发六步法

① 需求整理 ──→ ② 设计文档 ──→UI设计 ──→ 
④ 后端实现 ──→ ⑤ 前后端对接 ──→ ⑥ 测试验证
                                          |
   └───────── 文档驱动,全程 AI 参与 ───────┘

三个核心认知

1. 文档先行,代码后行

需求清楚了,代码就是翻译。花 30% 的时间磨文档,省掉 70% 的返工。

2. AI 是合伙人,不是代码生成器

你负责"做什么"(业务理解、设计决策),AI 负责"怎么做"(代码实现、格式转换)。两个大脑,各擅胜场。

3. 分层推进,每层验证

数据库 → 后端 → 前端 → 联调。不要一把梭到头再回来看,每一层跑通了再进下一层。

对学生和初学者的意义

我之所以把这套方法带到课堂上,是因为我清楚地看到:

未来 3-5 年,程序员的核心竞争力不是"能写多少代码",而是"能多准确地描述需求、多高效地和 AI 协作"。

一个学生按照这套方法,从零到跑通一个完整的 JavaWeb 项目,以前可能需要两周。现在,半天足够

多出来的时间干嘛?去理解业务、去设计架构、去思考"为什么要这样设计"——这些才是 AI 替代不了的东西。


资源 & 下一步

🔗 GitHub 仓库(book-manage链接) — 完整项目代码 + 需求设计文档 + 建库脚本 + 测试数据,clone 下来就能跑

📢 如果这篇文章反响不错,我计划录制一套完整的视频教程,把这套方法论从头到尾讲透。

💬 评论区聊聊:你用 AI 写 Java 遇到过什么坑?你觉得 AI 编程对你的学习/工作方式改变了什么?


觉得有用就点个赞 👍,转发给也在学 JavaWeb 的同学。