第三阶段:项目实战①小型项目开发(下篇)

第三阶段:项目实战①小型项目开发(下篇)


📋 下篇概述

欢迎来到项目实战的下篇!在上篇和中篇中,我们分别完成了学生管理系统(控制台版)和图书管理系统(GUI版)的开发。

在下篇中,我们将重点关注项目的运行、测试最佳实践、Spring Boot 3.x迁移指南,以及项目的扩展建议。这些内容将帮助您更好地理解现代Java开发的完整流程。

🎯 下篇学习目标

完成下篇学习后,您将能够:

  • 项目运行管理:掌握不同方式运行Spring Boot项目
  • 测试最佳实践:理解测试策略和覆盖率管理
  • 技术迁移:了解Spring Boot 2.x到3.x的迁移要点
  • 项目扩展:具备项目功能扩展和技术升级的思路
  • 开发规范:掌握企业级Java开发的最佳实践
  • 问题解决:具备常见问题的诊断和解决能力

🚀 项目运行与测试

环境准备

基础环境要求
  1. JDK 17+:确保已安装JDK 17或更高版本
  2. Maven 3.6+:确保已安装Maven构建工具
  3. 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界面,通过图形界面操作

📊 测试最佳实践

测试策略

  1. 单元测试:覆盖Service层和Repository层的核心业务逻辑
  2. 集成测试:测试完整的业务流程和数据库交互
  3. 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已自动包含

🚀 项目扩展建议

功能扩展

  1. 安全认证:集成Spring Security实现用户认证和权限管理
  2. 数据校验:使用Bean Validation进行数据校验和输入验证
  3. 文件管理:图书封面上传、文档附件管理功能
  4. 数据导出:Excel、PDF、CSV格式的数据导出功能
  5. 报表统计:图表展示、数据分析和统计报表
  6. 系统设置:用户偏好设置、主题切换、语言国际化

技术扩展

  1. 缓存机制:Redis缓存提高查询性能
  2. 消息队列:RabbitMQ处理异步任务
  3. 搜索引擎:Elasticsearch全文搜索功能
  4. 微服务架构:拆分为多个独立的微服务
  5. API网关:统一的API入口和路由管理
  6. 配置中心:Nacos或Spring Cloud Config统一配置管理

测试扩展

  1. 性能测试:JMeter压力测试和性能基准测试
  2. 测试数据管理:更完善的测试数据准备和清理
  3. 自动化测试:集成更多的自动化测试场景

用户体验扩展

  1. 界面美化:现代化UI设计、深色主题支持
  2. 快捷键支持:键盘快捷键提高操作效率
  3. 系统托盘:最小化到系统托盘、后台运行(GUI版)
  4. 多语言支持:国际化和本地化支持
  5. 用户偏好设置:个性化配置和设置保存

💡 开发最佳实践

代码规范

  1. 命名规范:使用有意义的类名、方法名和变量名
  2. 注释规范:为复杂逻辑添加清晰的注释
  3. 异常处理:合理的异常捕获和处理机制
  4. 日志记录:使用适当的日志级别记录关键信息

架构设计

  1. 分层架构:清晰的Controller-Service-Repository分层
  2. 依赖注入:合理使用Spring的依赖注入机制
  3. 事务管理:正确使用@Transactional注解
  4. 配置管理:外部化配置,支持多环境部署

性能优化

  1. 数据库优化:合理的索引设计和查询优化
  2. 缓存策略:适当使用缓存提高性能
  3. 连接池配置:合理配置数据库连接池参数
  4. JVM调优:根据应用特点调整JVM参数

安全考虑

  1. 输入验证:对所有用户输入进行验证
  2. SQL注入防护:使用参数化查询
  3. 敏感信息保护:避免在日志中记录敏感信息
  4. 权限控制:实现适当的用户权限管理

📚 关键知识点总结

核心技术

  1. Spring Boot 3.x框架:自动配置、依赖注入、启动器的使用
  2. Spring Data JPA:Repository接口、查询方法、自定义查询
  3. Jakarta EE注解:@Entity、@Table、@Id、@Column等注解的使用
  4. 控制台应用:CommandLineRunner接口实现控制台交互
  5. Swing GUI编程:JFrame、JTable、JDialog等组件的使用
  6. 依赖注入:@Autowired注解和Spring容器管理
  7. 事务管理:@Transactional注解的使用
  8. 数据验证:业务逻辑验证和异常处理
  9. 分层架构:Console/GUI、Service、Repository分层设计
  10. 配置管理:application.yml配置文件和多环境配置
  11. Hutool工具包:字符串处理、日期操作等工具方法

测试技术

  1. 单元测试:JUnit 5和Mockito的使用
  2. 集成测试:@SpringBootTest和@DataJpaTest注解
  3. 测试配置:H2内存数据库和测试配置文件
  4. 测试覆盖率:JaCoCo插件生成覆盖率报告
  5. GUI测试:Swing组件的单元测试方法

构建运行

  1. Maven构建:项目构建和依赖管理
  2. 运行脚本:跨平台的启动脚本编写
  3. JAR打包:Spring Boot可执行JAR文件

现代Java特性

  1. JDK 17特性:Records、Text Blocks、Pattern Matching等新特性
  2. 包名迁移:从javax.*到jakarta.*的包名变更
  3. 数据库设计:表名前缀和列名后缀的命名规范

✅ 完成标准

🎯 基础完成标准

  • 能够使用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 APISpring 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 GUI1-2周⭐⭐⭐⭐✅ 已完成
🧪 测试与运行实践单元测试、集成测试、项目运行3-5天⭐⭐⭐✅ 已完成
🎉 第三阶段第1章完成!
• 项目实战进度: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安全意识

📚 下一步学习方向

完成本章的项目实战后,建议您继续学习:

  1. Web开发基础:HTTP协议、Servlet、Spring MVC
  2. 前端技术:HTML、CSS、JavaScript基础
  3. 数据库进阶:SQL优化、索引设计、事务管理
  4. Spring框架:Spring Core、Spring Boot进阶特性
  5. 开发工具:Git版本控制、IDE高级功能
  6. 软件工程:设计模式、代码重构、项目管理

通过这两个基于Spring Boot + JPA的项目实战,您将掌握现代Java企业级开发的核心技术栈。项目一的控制台版本让您专注于业务逻辑和数据操作,项目二的Swing GUI版本让您体验桌面应用开发的乐趣。这样的组合为成为一名全面的Java开发工程师打下坚实基础。

🎉 恭喜完成第三阶段第1章的学习!

你已经掌握了Java项目开发的基础技能,
包括Spring Boot框架、JPA数据持久化、GUI编程和测试实践,
这些技能为你进入Web开发阶段奠定了坚实的基础!

准备好开始你的Web开发之旅了吗? 🌐


🔗 相关文章


📧 有问题?欢迎在评论区讨论交流!
⭐ 觉得有用?别忘了点赞收藏!
🔄 继续关注,Web开发精彩内容即将到来!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值