# 课程demo
**Repository Path**: javaweb-dev-tech/course-demo
## Basic Information
- **Project Name**: 课程demo
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-16
- **Last Updated**: 2026-03-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 🎓 Java Web 开发技术 - 课程实战演示 (Course Demo)
[](https://javaweb.chende.top/)
[](https://spring.io/projects/spring-boot)
[](https://spring.io/projects/spring-ai)
[](https://www.deepseek.com/)
[](./LICENSE)
欢迎来到 **武汉工商学院《Java Web 开发技术》** 课程代码仓库!🚀
本项目不仅仅是代码示例,更是你从一名 Java 初学者进阶为 **AI 全栈工程师** 的实战指南。在这里,你将见证一个简单的“图书管理系统”如何一步步进化为“能够听懂人话的 **SmartBook 智能二手书交易平台**”。
> 📘 **说明**:本项目是《Java Web 开发技术》课程的配套演示代码仓库。
> 所有代码案例均与课程电子文档 [javaweb.chende.top](https://javaweb.chende.top/) 章节一一对应。
---
## 📂 项目简介
本项目不再是零散的代码片段,而是一个**循序渐进**的完整工程。从基础的 Spring Boot 启动,到 MyBatis 数据持久化,再到最新的 **Spring AI + DeepSeek** 智能体开发,最终构建一个的 **SmartBook 智能图书交易系统**。
## 🛠️ 技术栈 (Tech Stack)
本项目采用目前业界主流的现代化技术体系:
* **开发框架**: Spring Boot 3.5.9 + Spring AI 1.0.0
* **持久层**: MyBatis 3.0.3 + PageHelper 2.1.0
* **数据库**: MySQL 8.0+ (JDBC Driver)
* **AI 大模型**: DeepSeek / Kimi / Qwen (通过 SiliconFlow 或 ModelScope 接入)
* **AI 协议**: MCP (Model Context Protocol) - 异步 SSE 客户端
* **工具库**: Lombok (简化代码)
* **前端技术**: Bootstrap 5.3 + jQuery 3.7 + Marked.js (Markdown 渲染)
* **运行环境**: JDK 17+
* **构建工具**: Maven 3.6+
---
## 🗺️ 课程代码导航 (Code Map)
代码按照课程章节演进,请根据包名或 Tag 查找对应源码。
| 章节 | 核心主题 | 关键代码/包路径 | 对应实验 |
| :--- |:---------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------|
| **Ch 01** | **Spring Boot HelloWorld** | `CourseDemoApplication` (Spring Boot 启动类)
`edu.wtbu...controller.HelloController` | [实验 1](https://javaweb.chende.top/chapter01/lab1/) |
| **Ch 02** | **Web 底层原理** | - | - |
| **Ch 03** | **RESTful 架构** | `edu.wtbu...controller.UserController` (CRUD 接口)
`edu.wtbu...common.GlobalExceptionHandler` (全局异常处理)
`edu.wtbu...common.Result` (统一响应) | [实验 3](https://javaweb.chende.top/chapter03/lab3/) |
| **Ch 04** | **数据持久化** | `resources/mapper/*.xml` (MyBatis 动态 SQL)
`edu.wtbu...service.impl.UserServiceMybatisImpl` (PageHelper 分页)
`edu.wtbu...dao.UserMapper` | [实验 4](https://javaweb.chende.top/chapter04/lab4/) |
| **Ch 05** | **AI 智能体基础** | `edu.wtbu...aiagent.AiClientTest` (RestClient 调用)
`edu.wtbu...tool.BookTools` (Tool Calling)
`edu.wtbu...controller.AiController` (Spring AI) | [实验 5](https://javaweb.chende.top/chapter05/lab5/) |
| **Ch 05+**| **MCP 协议集成** | `application.properties` (MCP Client 配置)
`AiController` (高德地图/12306 集成)
`edu.wtbu...aiagent.AmapMcpTest` | - |
| **Ch 06** | **综合项目** | **SmartBook 智能图书交易系统**
支付模块:`PayController` + `AlipayServiceImpl`/`WechatPayServiceImpl`
图书模块:`BookController` + `BookService` | [实验 6](https://javaweb.chende.top/chapter06/lab6/) |
---
## 🚀 快速开始 (Quick Start)
### 1. 环境准备
确保你的本地开发环境满足以下要求:
* **JDK**: 17 或以上版本
* **Maven**: 3.6+
* **IDE**: IntelliJ IDEA 2023+ (推荐安装 **通义灵码** 和 **MyBatisX** 插件)
* **数据库**: MySQL
### 2. 克隆项目
```bash
git clone https://gitee.com/javaweb-dev-tech/course-demo.git
cd course-demo
```
### 3. 配置数据库
在 MySQL 中执行 `sql/smart_book.sql` , 建表及插入示例数据.
修改 `src/main/resources/application.properties` 中数据库的配置。
```properties
# 数据库名称 (请修改为你自己的)
spring.datasource.url=jdbc:mysql://localhost:3306/smart_book?serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false
# 账号密码 (请修改为你自己的)
spring.datasource.username=root
spring.datasource.password=root1234
```
### 4. 配置 AI 密钥 (关键步骤) 🔑
本项目使用了 **Spring AI** 连接大模型。你需要修改 `src/main/resources/application.properties`:
```properties
# 替换成你自己的 Key (推荐使用 SiliconFlow 或 ModelScope)
spring.ai.openai.api-key= 你的密钥粘贴在这里
# API 基础地址 (二选一)
# 选项 1: SiliconFlow (硅基流动) - 推荐,速度快
spring.ai.openai.base-url=https://api.siliconflow.cn
# 选项 2: ModelScope (魔塔社区)
# spring.ai.openai.base-url= https://api-inference.modelscope.cn
# 模型选择 (根据服务商调整)
# SiliconFlow 可选:deepseek-ai/DeepSeek-R1-0528, Qwen/Qwen2.5-7B-Instruct
# ModelScope 可选:Pro/moonshotai/Kimi-K2.5
spring.ai.openai.chat.options.model=Pro/moonshotai/Kimi-K2.5
spring.ai.openai.chat.options.temperature=0.7
```
⚠️ **注意**:
- 如果使用 ModelScope,需要进行账号设置,**绑定阿里云与实名认证**
- 建议使用 **SiliconFlow**,无需实名认证,API 速度更快
- 密钥不要提交到 Git,已配置 `.gitignore` 忽略环境变量 `${SILICONFLOW_API_KEY}`
### 6. 启动项目与调试页面
运行 `CourseDemoApplication.java` 的 `main` 方法启动 Spring Boot 后端。
本项目包含**零配置**的 HTML 调试页面,访问以下地址体验功能:
#### 📄 用户管理模块
1. **基础版**: `http://localhost:8080/user.html`
- RESTful CRUD 操作演示
- 单页应用 (SPA) 风格
- 适合 Ch 03 章节学习
2. **分页增强版**: `http://localhost:8080/user_page.html`
- 分页查询 (PageHelper)
- 搜索过滤功能
- 批量删除操作
- 适合 Ch 04 章节学习
3. **搜索专用页**: `http://localhost:8080/user_search.html`
- 实时搜索演示
- 关键词高亮
#### 🤖 AI 智能对话模块
4. **AI 聊天室**: `http://localhost:8080/ai.html`
- ✅ **流式响应** (打字机效果)
- ✅ Markdown 渲染
- ✅ MCP 工具调用 (高德地图/12306)
- ✅ 支持多轮对话
💡 **使用技巧**: 在 AI 聊天页面勾选"开启流式响应",即可体验像 ChatGPT 一样的实时打字效果!
### 7. API 接口测试
项目提供了完整的 RESTful API,可以使用 Postman 或 curl 测试:
```bash
# 1. 查询所有用户
curl http://localhost:8080/users
# 2. 查询单个用户 (ID=1)
curl http://localhost:8080/users/1
# 3. 新增用户
curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"123","phone":"13800138000"}'
# 4. 分页查询用户 (第 1 页,每页 10 条)
curl "http://localhost:8080/users/page?pageNum=1&pageSize=10"
# 5. AI 对话 (普通模式)
curl "http://localhost:8080/ai/chat?msg=你好"
# 6. AI 对话 (流式响应)
curl -N "http://localhost:8080/ai/stream?msg=讲个笑话"
```
---
## 📁 项目结构说明
```
course-demo/
├── src/main/java/edu/wtbu/cs/course/
│ ├── common/ # 通用模块
│ │ ├── Result.java # 统一响应结果
│ │ ├── BusinessException.java # 业务异常
│ │ ├── GlobalExceptionHandler.java # 全局异常处理
│ │ └── LogAspect.java # 日志切面 (AOP)
│ ├── controller/ # 控制器层 (RESTful API)
│ │ ├── UserController.java # 用户管理接口
│ │ ├── BookController.java # 图书管理接口
│ │ ├── PayController.java # 支付接口
│ │ ├── AiController.java # AI 对话接口
│ │ └── HelloController.java # HelloWorld 示例
│ ├── service/ # 服务层 (业务逻辑)
│ │ ├── UserService.java # 用户服务接口
│ │ ├── BookService.java # 图书服务接口
│ │ ├── PaymentService.java # 支付服务接口
│ │ └── impl/ # 实现类
│ │ ├── UserServiceMybatisImpl.java # MyBatis 实现
│ │ ├── UserServiceMockImpl.java # Mock 实现
│ │ ├── BookServiceImpl.java
│ │ ├── AlipayServiceImpl.java # 支付宝
│ │ └── WechatPayServiceImpl.java # 微信支付
│ ├── dao/ # 数据访问层 (Mapper)
│ │ ├── UserMapper.java
│ │ ├── BookMapper.java
│ │ └── UserMockMapper.java
│ ├── entity/ # 实体类
│ │ ├── User.java
│ │ └── Book.java
│ ├── vo/ # 视图对象
│ │ ├── BookRequest.java
│ │ └── BookResponse.java
│ ├── tool/ # AI 工具类
│ │ └── BookTools.java # 图书查询工具 (Tool Calling)
│ └── CourseDemoApplication.java # Spring Boot 启动类
├── src/main/resources/
│ ├── mapper/ # MyBatis XML 映射文件
│ │ └── UserMapper.xml
│ ├── static/ # 静态资源 (前端页面)
│ │ ├── user.html # 用户管理页
│ │ ├── user_page.html # 分页管理页
│ │ ├── ai.html # AI 聊天页
│ │ ├── css/bootstrap.min.css
│ │ └── js/ # JS 库 (jQuery, Bootstrap, Marked)
│ └── application.properties # 配置文件
├── sql/ # 数据库脚本
│ └── smart_book.sql # 建表 + 测试数据
└── src/test/java/ # 单元测试
├── controller/UserControllerTest.java
├── service/UserServiceTest.java
├── dao/UserMapperTest.java
└── aiagent/ # AI Agent 测试
├── AiClientTest.java
├── ToolAgentTest.java
├── AmapMcpTest.java
└── PromptTest.java
```
---
## 💡 核心功能特性
### ✨ RESTful API 设计
- 统一的响应格式 (`Result`)
- 全局异常处理机制
- 支持 GET/POST/PUT/DELETE 完整操作
- 路径参数与查询参数规范使用
### 📊 数据持久化方案
- MyBatis XML 映射方式
- 驼峰命名自动转换
- PageHelper 分页插件集成
- 事务管理 (@Transactional)
### 🤖 AI 智能体集成
- **Spring AI** 标准化接入
- 支持 **流式响应** (Server-Sent Events)
- **Tool Calling** 能力 (AI 可调用 Java 方法)
- **MCP 协议** 支持 (连接外部工具如高德/12306)
- 多种大模型支持 (DeepSeek/Kimi/Qwen)
### 🎨 前端交互设计
- Bootstrap 5 响应式 UI
- jQuery AJAX 异步请求
- Markdown 实时渲染
- 模态框表单操作
---
## 🧪 测试指南
项目包含完整的单元测试覆盖:
```bash
# 运行所有测试
mvn test
# 运行特定测试类
mvn test -Dtest=UserControllerTest
# 运行 AI 相关测试
mvn test -Dtest=AiClientTest,ToolAgentTest,AmapMcpTest
```
**测试覆盖率**:
- Controller 层:100%
- Service 层:100%
- DAO 层:100%
- AI Agent: 完整示例
---
## 🔧 常见问题 (FAQ)
### Q1: 启动时报"数据库连接失败"?
**A**: 检查 `application.properties` 中的数据库配置,确保 MySQL 服务已启动,并将账号密码改为自己的。
### Q2: AI 对话返回"API Key 无效"?
**A**: 请前往 [SiliconFlow](https://cloud.siliconflow.cn/) 或 [ModelScope](https://modelscope.cn/) 申请免费 API Key,并正确配置到 `application.properties`。
### Q3: MCP 工具无法连接?
**A**:
1. 确认 `spring.ai.mcp.client.enabled=true`
2. 检查 SSE Endpoint URL 是否正确 (需要在 ModelScope 申请)
3. 查看控制台日志,确认 MCP Client 初始化成功
### Q4: 静态页面访问 404?
**A**: 确保访问的是 `http://localhost:8080/xxx.html`,且文件位于 `src/main/resources/static/` 目录下。
### Q5: 如何切换不同的 AI 模型?
**A**: 修改 `application.properties` 中的 `spring.ai.openai.chat.options.model` 配置项即可。
---
## 📚 学习路线建议
1. **入门阶段** (Ch 01-02): 从 HelloWorld 开始,理解 Spring Boot 自动装配原理
2. **进阶阶段** (Ch 03-04): 掌握 RESTful 架构 + MyBatis 数据持久化
3. **高阶阶段** (Ch 05): 学习 AI Agent 开发,理解 Tool Calling 和 Prompt Engineering
4. **实战阶段** (Ch 06): 综合运用所有技术,完成 SmartBook 项目
---
## 🌟 项目亮点
- 📖 **课证融合**: 代码与课程电子文档完全同步
- 🚀 **前沿技术**: 业内首个将 Spring AI + MCP 引入教学的案例
- 💻 **实战导向**: 所有代码均可直接用于生产环境
- 🎯 **循序渐进**: 从 CRUD 到 AI,平滑学习曲线
- 🛠️ **工具齐全**: 提供完整的前后端调试页面
- 📝 **注释详细**: 关键代码均有中文注释
- 📖 **课程电子书**: [https://javaweb.chende.top](https://javaweb.chende.top)
- 🛠️ **JetBrains 教育许可申请**: [查看指南](https://javaweb.chende.top/appendix/a01-account-guide/)
- 🤖 **ModelScope 模型社区**: [https://modelscope.cn](https://modelscope.cn)
---
## 🤝 贡献与反馈
如果你发现代码有 Bug 或文档有误,欢迎提交 Issue 或 Pull Request。
* 如果你发现代码有 Bug,欢迎提交 **Issue**。
* 保持代码风格一致。
* 提交前请先在本地运行通过。
**Happy Coding! ☕**