当前位置: 首页 > news >正文

Oracle 19c入门学习教程,从入门到精通,Java+Oracle实现企业人事管理系统(20)

Java+Oracle实现企业人事管理系统

第20章 Java+Oracle实现企业人事管理系统内容,整理出的Java + Oracle + Hibernate 开发中涉及的核心语法知识点、安装配置流程、详细代码示例及综合性案例。内容涵盖从环境搭建到 Hibernate 关联关系设计的完整技术栈。


一、开发环境安装与配置

1. 安装 JDK(Java Development Kit)

  • 版本建议:JDK 8 或 11(Hibernate 5.x 兼容性好)

  • 下载地址:Oracle JDK 或 OpenJDK

  • 配置环境变量

    # Windows 示例JAVA_HOME=C:\Program Files\Java\jdk-11.0.12PATH+=%JAVA_HOME%\bin

2. 安装 Oracle 数据库

  • 版本建议:Oracle 19c Express Edition(免费)

  • 下载地址:Oracle Database XE

  • 安装后创建用户

    CREATEUSERhr IDENTIFIEDBYhr_password;GRANTCONNECT,RESOURCE,DBATOhr;

3. 安装 IDE(推荐 IntelliJ IDEA 或 Eclipse)

  • 安装后配置 JDK 和 Maven/Gradle 构建工具。

4. 添加 Hibernate 依赖(Maven 方式)

pom.xml中添加:

<dependencies><!-- Hibernate Core --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.6.15.Final</version></dependency><!-- Oracle JDBC Driver --><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><version>21.7.0.0</version></dependency></dependencies>

⚠️ 注意:Oracle JDBC 驱动需在 Maven Central 可用,若不可用,需手动安装到本地仓库。


二、核心语法知识点与代码示例

知识点 1:Hibernate 配置文件(hibernate.cfg.xml)

作用

配置数据库连接、方言、映射类等。

示例:src/main/resources/hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 数据库连接设置 --><propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property><propertyname="connection.username">hr</property><propertyname="connection.password">hr_password</property><!-- Hibernate 属性 --><propertyname="dialect">org.hibernate.dialect.Oracle12cDialect</property><propertyname="show_sql">true</property><propertyname="format_sql">true</property><propertyname="hbm2ddl.auto">update</property><!-- 自动更新表结构 --><!-- 映射文件注册 --><mappingresource="com/example/entity/Employee.hbm.xml"/><mappingresource="com/example/entity/Department.hbm.xml"/></session-factory></hibernate-configuration>

知识点 2:Hibernate 持久化类与映射文件(.hbm.xml)

示例 1:部门实体类Department.java
packagecom.example.entity;publicclassDepartment{privateLongdeptId;privateStringdeptName;// getter/setter 省略}
示例 2:Department.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="com.example.entity.Department"table="DEPARTMENTS"><idname="deptId"column="DEPT_ID"><generatorclass="native"/><!-- 使用数据库自增 --></id><propertyname="deptName"column="DEPT_NAME"type="string"length="100"/></class></hibernate-mapping>

知识点 3:公共模块 —— Hibernate 工具类(SessionFactory 管理)

packagecom.example.util;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;publicclassHibernateUtil{privatestaticfinalSessionFactorysessionFactory=buildSessionFactory();privatestaticSessionFactorybuildSessionFactory(){try{// 读取 hibernate.cfg.xmlreturnnewConfiguration().configure().buildSessionFactory();}catch(Throwableex){System.err.println("初始化 SessionFactory 失败: "+ex);thrownewExceptionInInitializerError(ex);}}publicstaticSessionFactorygetSessionFactory(){returnsessionFactory;}// 关闭时调用(可选)publicstaticvoidshutdown(){getSessionFactory().close();}}

知识点 4:通过 Hibernate 操作持久化对象(CRUD)

packagecom.example.dao;importcom.example.entity.Employee;importcom.example.util.HibernateUtil;importorg.hibernate.Session;importorg.hibernate.Transaction;importjava.util.List;publicclassEmployeeDAO{// 保存员工publicvoidsave(Employeeemp){Sessionsession=HibernateUtil.getSessionFactory().openSession();Transactiontx=null;try{tx=session.beginTransaction();session.save(emp);// 持久化tx.commit();}catch(Exceptione){if(tx!=null)tx.rollback();e.printStackTrace();}finally{session.close();}}// 查询所有员工@SuppressWarnings("unchecked")publicList<Employee>findAll(){Sessionsession=HibernateUtil.getSessionFactory().openSession();try{returnsession.createQuery("FROM Employee").list();}finally{session.close();}}// 根据ID删除publicvoiddelete(Longid){Sessionsession=HibernateUtil.getSessionFactory().openSession();Transactiontx=null;try{tx=session.beginTransaction();Employeeemp=session.get(Employee.class,id);if(emp!=null){session.delete(emp);}tx.commit();}catch(Exceptione){if(tx!=null)tx.rollback();e.printStackTrace();}finally{session.close();}}}

知识点 5:Hibernate 一对一关联(One-to-One)

场景:员工(Employee) ↔ 薪资待遇(Salary)
实体类
// Employee.javapublicclassEmployee{privateLongempId;privateStringname;privateSalarysalary;// 一对一// getters/setters}// Salary.javapublicclassSalary{privateLongsalaryId;privateDoublebasePay;privateEmployeeemployee;// 反向引用// getters/setters}
映射文件Employee.hbm.xml
<classname="Employee"table="EMPLOYEES"><idname="empId"column="EMP_ID"><generatorclass="native"/></id><propertyname="name"column="NAME"/><!-- 一对一关联 --><one-to-onename="salary"class="Salary"cascade="all"/></class>
Salary.hbm.xml
<classname="Salary"table="SALARIES"><idname="salaryId"column="SALARY_ID"><generatorclass="foreign"><paramname="property">employee</param></generator></id><propertyname="basePay"column="BASE_PAY"/><one-to-onename="employee"class="Employee"constrained="true"/></class>

cascade="all"表示保存 Employee 时自动保存 Salary。


知识点 6:Hibernate 一对多关联(One-to-Many)

场景:部门(Department) → 多个员工(Employee)
Department.java
publicclassDepartment{privateLongdeptId;privateStringdeptName;privateSet<Employee>employees=newHashSet<>();// 一对多// getters/setters}
Department.hbm.xml
<classname="Department"table="DEPARTMENTS"><idname="deptId"column="DEPT_ID"><generatorclass="native"/></id><propertyname="deptName"column="DEPT_NAME"/><!-- 一对多关联 --><setname="employees"table="EMPLOYEES"inverse="true"lazy="true"><keycolumn="DEPT_ID"/><one-to-manyclass="Employee"/></set></class>
Employee.hbm.xml(补充外键)
<many-to-onename="department"class="Department"column="DEPT_ID"not-null="true"/>

inverse="true"表示由 Employee 端维护关系(性能优化)。


三、综合性案例:人事管理系统核心功能实现

功能:通过部门树选择员工(模拟 GUI 后端逻辑)

步骤 1:查询所有部门及其员工(带关联)
publicList<Department>loadDepartmentsWithEmployees(){Sessionsession=HibernateUtil.getSessionFactory().openSession();try{// 使用 HQL 抓取关联数据,避免 N+1 问题Stringhql="FROM Department d LEFT JOIN FETCH d.employees";returnsession.createQuery(hql).list();}finally{session.close();}}
步骤 2:前端可构建树形结构(伪代码)
// 假设返回 JSON 给前端[{"deptId":1,"deptName":"研发部","employees":[{"empId":101,"name":"张三"},{"empId":102,"name":"李四"}]},...]
步骤 3:待遇管理 —— 更新员工薪资(一对一操作)
publicvoidupdateEmployeeSalary(LongempId,DoublenewBasePay){Sessionsession=HibernateUtil.getSessionFactory().openSession();Transactiontx=null;try{tx=session.beginTransaction();Employeeemp=session.get(Employee.class,empId);if(emp!=null&&emp.getSalary()!=null){emp.getSalary().setBasePay(newBasePay);session.update(emp);// 自动级联更新 Salary}tx.commit();}catch(Exceptione){if(tx!=null)tx.rollback();throwe;}finally{session.close();}}

四、小结:关键技术点回顾

技术点说明
Hibernate 配置hibernate.cfg.xml配置数据库和映射
持久化类POJO +.hbm.xml映射文件
SessionFactory单例管理,线程安全
CRUD 操作通过Sessionsave/load/update/delete
一对一关联<one-to-one>+foreign主键生成器
一对多关联<set>+<many-to-one>,注意inverse
级联操作cascade="all/save-update/delete"
HQL 查询面向对象的查询语言,支持JOIN FETCH

五、附:数据库初始化脚本(Oracle)

-- 部门表CREATETABLEDEPARTMENTS(DEPT_ID NUMBER GENERATED ALWAYSASIDENTITYPRIMARYKEY,DEPT_NAME VARCHAR2(100)NOTNULL);-- 员工表CREATETABLEEMPLOYEES(EMP_ID NUMBER GENERATED ALWAYSASIDENTITYPRIMARYKEY,NAME VARCHAR2(100)NOTNULL,DEPT_ID NUMBERREFERENCESDEPARTMENTS(DEPT_ID));-- 薪资表(一对一)CREATETABLESALARIES(SALARY_ID NUMBERPRIMARYKEY,-- 与 EMP_ID 一致BASE_PAY NUMBER(10,2),FOREIGNKEY(SALARY_ID)REFERENCESEMPLOYEES(EMP_ID));

如需 Swing GUI 部分(主窗体、导航栏、部门树对话框),可进一步扩展使用JTree+DefaultTreeModel,但本篇聚焦后端 Hibernate + Oracle 核心语法与实现

如有需要,可继续提供 GUI 层或 Spring Boot 整合版本。

http://www.jsqmd.com/news/330792/

相关文章:

  • 基于微信小程序的绿色植物养护指南系统设计与实现
  • MySQL复合查询详解:多表查询、子查询与合并查询
  • Git新手必学的3个实战技巧
  • MySQL表的增删改查(CRUD)操作详解
  • 双 MOS 管实现低压差开关电路的设计参数与选型指南
  • 前端性能优化实战:Webpack Tree Shaking原理与配置详解
  • 题解:洛谷 P10801([CEOI 2024] 海战)
  • 优先级电源多路复用器:TPS212x 无缝切换技术的工作原理与典型应用深度解析
  • 智能制造质量控制AI系统的微服务架构:AI应用架构师的拆分与通信实践
  • 使用 Rust 实现零成本抽象:提升性能的关键模式
  • 构建高可用微服务架构:Istio 服务网格故障恢复策略
  • AI应用架构师的企业虚拟化转型创新型方案
  • task3的详细思路与结构
  • 【claude】Claude Skills 实战指南:从安装到自定义
  • 数据立方体在电商用户行为分析中的实战应用
  • 人工智能伦理速成指南:如何在不写一行代码的情况下成为AI治理专家
  • 408真题解析-2010-29-操作系统-页式存储管理
  • Python 异步编程完全指南:从 asyncio 到高性能并发
  • Web性能优化实战:利用Webpack进行代码分割与懒加载
  • Dapper轻量级扩展库SmartDapper
  • macOS 邮件客户端设置:高效管理多个邮箱账户
  • 机器学习项目:Python 淘宝商品数据分析系统 预测算法 Django框架(Selenium爬虫+线性回归预测+Echarts大屏 源码)✅
  • 2026.2.1
  • 【开题答辩全过程】以 高校食堂餐饮管理系统的设计与实现为例,包含答辩的问题和答案
  • 机器学习:Python音乐推荐平台 Django框架 TensorFlow推荐 融合深度学习与协同过滤推荐算法 千千音乐爬虫 大数据实战✅
  • 大数据领域数据中台的安全架构设计
  • 【开题答辩全过程】以 基于python网络安全知识在线答题系统为例,包含答辩的问题和答案
  • 开题报告 高考志愿助手APP
  • DevOps流水线安全加固:GitHub Actions漏洞扫描与修复
  • 开题报告 高校学生成绩管理系统