第三阶段:项目实战①小型项目开发(下篇)
📋 下篇概述
欢迎来到项目实战的下篇!在上篇和中篇中,我们分别完成了学生管理系统(控制台版)和图书管理系统(GUI版)的开发。
在下篇中,我们将重点关注项目的运行、测试最佳实践、Spring Boot 3.x迁移指南,以及项目的扩展建议。这些内容将帮助您更好地理解现代Java开发的完整流程。
🎯 下篇学习目标
完成下篇学习后,您将能够:
- 项目运行管理:掌握不同方式运行Spring Boot项目
- 测试最佳实践:理解测试策略和覆盖率管理
- 技术迁移:了解Spring Boot 2.x到3.x的迁移要点
- 项目扩展:具备项目功能扩展和技术升级的思路
- 开发规范:掌握企业级Java开发的最佳实践
- 问题解决:具备常见问题的诊断和解决能力
🚀 项目运行与测试
环境准备
基础环境要求
- JDK 17+:确保已安装JDK 17或更高版本
- Maven 3.6+:确保已安装Maven构建工具
- MySQL 8.0+:启动MySQL服务,创建对应数据库
CREATE DATABASE student_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE DATABASE book_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
开发工具推荐
- IDE:IntelliJ IDEA 2023+ 或 Eclipse 2023+
- 数据库工具:MySQL Workbench、Navicat、DBeaver
- 版本控制:Git 2.30+
- 构建工具:Maven 3.8+ 或 Gradle 7.0+
运行测试
测试命令
# 运行所有测试
mvn test
# 运行特定测试类
mvn test -Dtest=StudentServiceTest
# 生成测试覆盖率报告
mvn jacoco:report
# 跳过测试进行构建
mvn clean package -DskipTests
测试配置文件
创建src/test/resources/application-test.yml:
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.H2Dialect
main:
web-application-type: none
logging:
level:
org.chapter09: DEBUG
启动应用
方式一:使用Maven运行
# 学生管理系统(控制台版)
cd student-management-console
mvn spring-boot:run
# 图书管理系统(GUI版)
cd book-management-gui
mvn spring-boot:run
方式二:使用运行脚本
# Linux/macOS
./scripts/run.sh # 学生管理系统
./scripts/run-gui.sh # 图书管理系统
# Windows
scripts\run.bat # 学生管理系统
scripts\run-gui.bat # 图书管理系统
方式三:直接运行JAR文件
# 先编译打包
mvn clean package -DskipTests
# 运行JAR文件
java -jar target/student-management-console-1.0.0.jar
java -jar target/book-management-gui-1.0.0.jar
使用说明
- 学生管理系统:启动后在控制台中通过菜单进行交互操作
- 图书管理系统:启动后会打开Swing GUI界面,通过图形界面操作
📊 测试最佳实践
测试策略
- 单元测试:覆盖Service层和Repository层的核心业务逻辑
- 集成测试:测试完整的业务流程和数据库交互
- GUI测试:测试用户界面组件的基本功能(项目二)
测试覆盖率建议
- Service层:≥80%
- Repository层:≥70%
- 整体覆盖率:≥60%
测试数据管理
- 使用H2内存数据库进行测试
- 每个测试方法使用@Transactional确保数据隔离
- 使用@BeforeEach和@AfterEach管理测试数据
测试示例
Service层测试示例
@ExtendWith(MockitoExtension.class)
class StudentServiceTest {
@Mock
private StudentRepository studentRepository;
@InjectMocks
private StudentService studentService;
@Test
void testAddStudent_Success() {
// Given
Student student = new Student("2023001", "张三", 20, "男", "计算机", 85.5);
when(studentRepository.existsById(anyString())).thenReturn(false);
when(studentRepository.save(any(Student.class))).thenReturn(student);
// When
Student result = studentService.addStudent(student);
// Then
assertNotNull(result);
assertEquals("张三", result.getName());
verify(studentRepository).save(student);
}
}
Repository集成测试示例
@DataJpaTest
@ActiveProfiles("test")
class StudentRepositoryTest {
@Autowired
private TestEntityManager entityManager;
@Autowired
private StudentRepository studentRepository;
@Test
void testFindByNameContaining() {
// Given
Student student = new Student("TEST001", "测试学生", 20, "男", "计算机", 85.5);
entityManager.persistAndFlush(student);
// When
List<Student> results = studentRepository.findByNameContaining("测试");
// Then
assertEquals(1, results.size());
assertEquals("测试学生", results.get(0).getName());
}
}
🔄 Spring Boot 2.x -> Spring Boot 3.x迁移指南
主要变化概述
Spring Boot 3.x是一个重大版本升级,带来了许多重要变化:
1. 最低JDK版本要求
- Spring Boot 2.x:支持JDK 8+
- Spring Boot 3.x:要求JDK 17+
2. Jakarta EE迁移
最重要的变化是从Java EE迁移到Jakarta EE:
包名变化对照表:
| Java EE (Spring Boot 2.x) | Jakarta EE (Spring Boot 3.x) |
|---|---|
javax.persistence.* | jakarta.persistence.* |
javax.servlet.* | jakarta.servlet.* |
javax.validation.* | jakarta.validation.* |
javax.transaction.* | jakarta.transaction.* |
3. 依赖版本升级
- Hibernate:5.x → 6.x
- Spring Framework:5.x → 6.x
- Tomcat:9.x → 10.x
- Jetty:9.x → 11.x
迁移步骤
第一步:升级JDK版本
# 检查当前JDK版本
java -version
# 确保使用JDK 17或更高版本
export JAVA_HOME=/path/to/jdk17
第二步:更新Maven配置
<properties>
<java.version>17</java.version>
<spring-boot.version>3.2.0</spring-boot.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/>
</parent>
第三步:包名迁移
使用IDE的全局替换功能进行包名迁移:
// 替换前 (Spring Boot 2.x)
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
import javax.persistence.Column;
// 替换后 (Spring Boot 3.x)
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import jakarta.persistence.Id;
import jakarta.persistence.Column;
第四步:配置文件调整
某些配置属性可能发生变化:
# Spring Boot 2.x
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# Spring Boot 3.x
spring:
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
第五步:测试和验证
# 运行测试确保迁移成功
mvn clean test
# 启动应用验证功能
mvn spring-boot:run
迁移检查清单
- JDK版本升级到17+
- Spring Boot版本升级到3.x
- 所有javax.包名替换为jakarta.
- 依赖版本兼容性检查
- 配置文件属性更新
- 单元测试和集成测试通过
- 应用启动和功能验证
常见迁移问题
问题1:包名导入错误
// 错误:仍使用javax包名
import javax.persistence.Entity;
// 正确:使用jakarta包名
import jakarta.persistence.Entity;
问题2:Hibernate版本兼容性
// Spring Boot 2.x (Hibernate 5.x)
@Type(type = "org.hibernate.type.TextType")
private String description;
// Spring Boot 3.x (Hibernate 6.x)
@Column(columnDefinition = "TEXT")
private String description;
问题3:测试配置调整
// Spring Boot 2.x
@ExtendWith(SpringExtension.class)
@SpringBootTest
// Spring Boot 3.x (推荐)
@SpringBootTest
// SpringExtension已自动包含
🚀 项目扩展建议
功能扩展
- 安全认证:集成Spring Security实现用户认证和权限管理
- 数据校验:使用Bean Validation进行数据校验和输入验证
- 文件管理:图书封面上传、文档附件管理功能
- 数据导出:Excel、PDF、CSV格式的数据导出功能
- 报表统计:图表展示、数据分析和统计报表
- 系统设置:用户偏好设置、主题切换、语言国际化
技术扩展
- 缓存机制:Redis缓存提高查询性能
- 消息队列:RabbitMQ处理异步任务
- 搜索引擎:Elasticsearch全文搜索功能
- 微服务架构:拆分为多个独立的微服务
- API网关:统一的API入口和路由管理
- 配置中心:Nacos或Spring Cloud Config统一配置管理
测试扩展
- 性能测试:JMeter压力测试和性能基准测试
- 测试数据管理:更完善的测试数据准备和清理
- 自动化测试:集成更多的自动化测试场景
用户体验扩展
- 界面美化:现代化UI设计、深色主题支持
- 快捷键支持:键盘快捷键提高操作效率
- 系统托盘:最小化到系统托盘、后台运行(GUI版)
- 多语言支持:国际化和本地化支持
- 用户偏好设置:个性化配置和设置保存
💡 开发最佳实践
代码规范
- 命名规范:使用有意义的类名、方法名和变量名
- 注释规范:为复杂逻辑添加清晰的注释
- 异常处理:合理的异常捕获和处理机制
- 日志记录:使用适当的日志级别记录关键信息
架构设计
- 分层架构:清晰的Controller-Service-Repository分层
- 依赖注入:合理使用Spring的依赖注入机制
- 事务管理:正确使用@Transactional注解
- 配置管理:外部化配置,支持多环境部署
性能优化
- 数据库优化:合理的索引设计和查询优化
- 缓存策略:适当使用缓存提高性能
- 连接池配置:合理配置数据库连接池参数
- JVM调优:根据应用特点调整JVM参数
安全考虑
- 输入验证:对所有用户输入进行验证
- SQL注入防护:使用参数化查询
- 敏感信息保护:避免在日志中记录敏感信息
- 权限控制:实现适当的用户权限管理
📚 关键知识点总结
核心技术
- Spring Boot 3.x框架:自动配置、依赖注入、启动器的使用
- Spring Data JPA:Repository接口、查询方法、自定义查询
- Jakarta EE注解:@Entity、@Table、@Id、@Column等注解的使用
- 控制台应用:CommandLineRunner接口实现控制台交互
- Swing GUI编程:JFrame、JTable、JDialog等组件的使用
- 依赖注入:@Autowired注解和Spring容器管理
- 事务管理:@Transactional注解的使用
- 数据验证:业务逻辑验证和异常处理
- 分层架构:Console/GUI、Service、Repository分层设计
- 配置管理:application.yml配置文件和多环境配置
- Hutool工具包:字符串处理、日期操作等工具方法
测试技术
- 单元测试:JUnit 5和Mockito的使用
- 集成测试:@SpringBootTest和@DataJpaTest注解
- 测试配置:H2内存数据库和测试配置文件
- 测试覆盖率:JaCoCo插件生成覆盖率报告
- GUI测试:Swing组件的单元测试方法
构建运行
- Maven构建:项目构建和依赖管理
- 运行脚本:跨平台的启动脚本编写
- JAR打包:Spring Boot可执行JAR文件
现代Java特性
- JDK 17特性:Records、Text Blocks、Pattern Matching等新特性
- 包名迁移:从javax.*到jakarta.*的包名变更
- 数据库设计:表名前缀和列名后缀的命名规范
✅ 完成标准
🎯 基础完成标准
- 能够使用Spring Boot 3.x搭建项目
- 熟练编写JPA实体类和Repository接口
- 正确配置数据库连接和JPA设置
- 掌握控制台应用和GUI应用开发
- 能够编写基本的单元测试和集成测试
🚀 进阶完成标准
- 能够设计合理的分层架构
- 掌握Spring依赖注入和事务管理
- 熟练使用Hutool工具包提高开发效率
- 能够进行数据验证和异常处理
- 具备完整项目的测试和运行能力
🏆 专家级标准
- 能够设计可扩展的项目架构
- 掌握现代Java开发最佳实践
- 具备代码重构和优化能力
- 能够指导他人进行项目开发
- 具备解决复杂业务问题的能力
📝 本章小结
🎯 核心知识点回顾
🏗️ 项目架构
- ✅ 掌握Spring Boot 3.x项目搭建
- ✅ 理解分层架构设计原则
- ✅ 熟练使用Maven依赖管理
- ✅ 掌握配置文件管理
🗄️ 数据持久化
- ✅ 掌握Spring Data JPA使用
- ✅ 熟练编写实体类和Repository
- ✅ 理解JPA查询方法命名规范
- ✅ 学会自定义查询和统计功能
🖥️ 用户界面
- ✅ 掌握控制台交互应用开发
- ✅ 熟练使用Swing GUI编程
- ✅ 理解事件驱动编程模式
- ✅ 学会用户友好的界面设计
🧪 测试实践
- ✅ 掌握JUnit 5和Mockito测试框架
- ✅ 熟练编写单元测试和集成测试
- ✅ 理解测试驱动开发方法
- ✅ 学会测试覆盖率分析
🔧 开发工具
- ✅ 熟练使用Hutool工具包
- ✅ 掌握运行脚本编写
- ✅ 理解项目构建和打包
- ✅ 学会开发环境配置
📈 学习成果检验
🎯 自我检测清单
- 能够独立搭建Spring Boot项目
- 熟练进行数据库设计和JPA配置
- 正确实现业务逻辑和数据访问层
- 掌握控制台和GUI两种交互方式
- 能够编写完整的测试用例
- 理解现代Java企业级开发规范
🚀 进阶学习方向
| 方向 | 内容 | 推荐资源 |
|---|---|---|
| 🌐 Web开发 | Spring MVC、RESTful API | Spring Boot官方文档 |
| 🗄️ 数据库进阶 | MyBatis、数据库优化 | 数据库设计与性能调优 |
| 🔒 安全框架 | Spring Security、JWT | 企业级安全解决方案 |
| ☁️ 微服务 | Spring Cloud、分布式系统 | 微服务架构设计模式 |
🗺️ 专栏学习路径图
📈 Java程序员从0到1成长路径
🎯 第一阶段:Java基础入门 (4-6周) - ✅ 已完成
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 1.开发环境 │───▶│ 2.基础语法 │───▶│ 3.面向对象 │───▶│ 4.核心API │
│ 搭建 │ │ │ │ 编程基础 │ │ │
│ ✅ 已完成 │ │ ✅ 已完成 │ │ ✅ 已完成 │ │ ✅ 已完成 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
🚀 第二阶段:Java进阶技能 (4-6周) - ✅ 已完成
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 1.高级特性 │ │ 2.I/O与网络 │ │ 3.新特性 │ │ 4.工具框架 │
│ │ │ 编程 │ │ │ │ 入门 │
│ ✅ 已完成 │ │ ✅ 已完成 │ │ ✅ 已完成 │ │ ✅ 已完成 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
🎯 第三阶段:项目实战 (4-8周) - ✅ 当前章节
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 1.小型项目 │ │ 2.Web开发 │ │ 3.Spring │ │ 4.数据库与 │
│ 开发 │ │ 基础 │ │ 框架入门 │ │ 持久层 │
│ ✅ 当前学习 │ │ 📅 计划中 │ │ 📅 计划中 │ │ 📅 计划中 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
🏆 第四阶段:职业发展 (持续更新)
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 1.代码质量 │ │ 2.开发工具 │ │ 3.面试准备 │ │ 4.职业规划 │
│ 与规范 │ │ 链 │ │ │ │ │
│ 📅 计划中 │ │ 📅 计划中 │ │ 📅 计划中 │ │ 📅 计划中 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
📊 第三阶段第1章完整进度
| 项目 | 主要内容 | 预计时间 | 难度 | 状态 |
|---|---|---|---|---|
| 🖥️ 学生管理系统(控制台版) | Spring Boot + JPA + 控制台交互 | 1-2周 | ⭐⭐⭐ | ✅ 已完成 |
| 🖼️ 图书管理系统(GUI版) | Spring Boot + JPA + Swing GUI | 1-2周 | ⭐⭐⭐⭐ | ✅ 已完成 |
| 🧪 测试与运行实践 | 单元测试、集成测试、项目运行 | 3-5天 | ⭐⭐⭐ | ✅ 已完成 |
• 项目实战进度:25% (1/4章节完成)
• 已掌握:Spring Boot项目开发、JPA数据持久化、GUI编程、测试实践
• 下一步:进入Web开发基础学习
• 重点:HTTP协议、Servlet、Spring MVC、RESTful API设计
🎬 下一章预告
🌐 第三阶段第2章:Web开发基础
🎯 下章学习内容
- 🌐 HTTP协议与Web基础
- 🔧 Servlet技术深入
- 🚀 Spring MVC框架
- 📡 RESTful API设计与实现
💡 学习建议
- 理解Web应用的工作原理
- 掌握前后端分离开发模式
- 学会设计优雅的API接口
- 建立Web安全意识
📚 下一步学习方向
完成本章的项目实战后,建议您继续学习:
- Web开发基础:HTTP协议、Servlet、Spring MVC
- 前端技术:HTML、CSS、JavaScript基础
- 数据库进阶:SQL优化、索引设计、事务管理
- Spring框架:Spring Core、Spring Boot进阶特性
- 开发工具:Git版本控制、IDE高级功能
- 软件工程:设计模式、代码重构、项目管理
通过这两个基于Spring Boot + JPA的项目实战,您将掌握现代Java企业级开发的核心技术栈。项目一的控制台版本让您专注于业务逻辑和数据操作,项目二的Swing GUI版本让您体验桌面应用开发的乐趣。这样的组合为成为一名全面的Java开发工程师打下坚实基础。
🎉 恭喜完成第三阶段第1章的学习!
你已经掌握了Java项目开发的基础技能,
包括Spring Boot框架、JPA数据持久化、GUI编程和测试实践,
这些技能为你进入Web开发阶段奠定了坚实的基础!
准备好开始你的Web开发之旅了吗? 🌐
🔗 相关文章
- 第三阶段:项目实战①小型项目开发(上篇) - 学生管理系统控制台版
- 第三阶段:项目实战①小型项目开发(中篇) - 图书管理系统GUI版
📧 有问题?欢迎在评论区讨论交流!
⭐ 觉得有用?别忘了点赞收藏!
🔄 继续关注,Web开发精彩内容即将到来!
4万+

被折叠的 条评论
为什么被折叠?



