# hibernate **Repository Path**: hellowanderer/hibernate_demo ## Basic Information - **Project Name**: hibernate - **Description**: hibernate_demo - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-12-15 - **Last Updated**: 2025-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Boot 2 + Hibernate + MySQL 示例项目 这是一个展示Spring Boot 2与Hibernate集成的示例项目,使用MySQL作为数据库。该项目包含了Hibernate的各种使用场景,包括实体关系映射、继承映射、复合主键等。 ## 技术栈 - Spring Boot 2.7.17 - Spring Data JPA (Hibernate) - MySQL 8 - Java 8 - Lombok - Maven ## 项目结构 ``` src/main/java/com/example/hibernate/demo/ ├── HibernateDemoApplication.java # 应用程序入口 ├── config/ # 配置类 │ ├── DataInitializer.java # 数据初始化器 │ └── DataInitializerPart2.java # 数据初始化器(第二部分) ├── controller/ # REST控制器 │ ├── DepartmentController.java │ ├── EmployeeController.java │ ├── OrderController.java │ ├── PaymentController.java │ ├── ProductController.java │ └── ProjectController.java ├── entity/ # 实体类 │ ├── BankTransferPayment.java # 银行转账支付(继承自Payment) │ ├── CreditCardPayment.java # 信用卡支付(继承自Payment) │ ├── Department.java # 部门 │ ├── Employee.java # 员工 │ ├── EmployeeDetail.java # 员工详情(一对一关系) │ ├── Order.java # 订单 │ ├── OrderItem.java # 订单项(复合主键) │ ├── Payment.java # 支付(抽象基类) │ ├── Product.java # 产品 │ └── Project.java # 项目 ├── repository/ # 数据访问层 │ ├── DepartmentRepository.java │ ├── EmployeeRepository.java │ ├── OrderRepository.java │ ├── PaymentRepository.java │ ├── ProductRepository.java │ └── ProjectRepository.java └── service/ # 业务逻辑层 ├── DepartmentService.java ├── EmployeeService.java ├── OrderService.java ├── PaymentService.java ├── ProductService.java └── ProjectService.java ``` ## Hibernate功能演示 本项目演示了以下Hibernate功能: 1. **基本实体映射**:所有实体类都使用了基本的ORM映射 2. **关系映射**: - 一对多:Department与Employee - 多对一:Employee与Department - 多对多:Employee与Project - 一对一:Employee与EmployeeDetail 3. **继承映射**:使用JOINED策略实现Payment、CreditCardPayment和BankTransferPayment之间的继承关系 4. **复合主键**:OrderItem使用了复合主键(OrderItemId) 5. **嵌入式对象**:EmployeeDetail包含了EmergencyContact嵌入式对象 6. **自然ID**:Department使用name作为自然ID 7. **枚举映射**:多个实体类中使用了枚举类型 8. **审计字段**:使用@CreationTimestamp和@UpdateTimestamp自动管理创建和更新时间 9. **JPQL查询**:在Repository中使用@Query注解编写JPQL查询 10. **原生SQL查询**:在Repository中使用nativeQuery=true编写原生SQL查询 11. **分页和排序**:EmployeeRepository中的分页查询 12. **延迟加载**:使用FetchType.LAZY实现延迟加载 13. **急加载**:使用JOIN FETCH实现急加载 14. **级联操作**:使用CascadeType定义级联行为 15. **双向关系**:实现并维护实体间的双向关系 16. **事务管理**:使用@Transactional注解管理事务 ## 如何运行 1. 确保已安装MySQL 8.0或更高版本 2. 确保已安装JDK 8 3. 在application.yml中配置数据库连接信息 4. 使用Maven构建项目:`mvn clean install` 5. 运行应用程序:`mvn spring-boot:run`或直接运行HibernateDemoApplication类 应用启动后,将自动创建数据库表并插入示例数据。 ## API端点 项目提供了以下REST API端点: - `/api/departments`:部门管理 - `/api/employees`:员工管理 - `/api/projects`:项目管理 - `/api/products`:产品管理 - `/api/orders`:订单管理 - `/api/payments`:支付管理 每个端点都支持标准的CRUD操作,以及一些特定的业务操作。 ## 注意事项 - 本项目使用了Lombok,请确保IDE已安装Lombok插件 - 默认使用的是MySQL数据库,但也配置了H2数据库用于测试 - 项目使用了JPA审计功能,需要在主应用类上添加@EnableJpaAuditing注解 - 项目需要JDK 8环境