news 2026/5/4 11:19:16

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 整合版本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 1:09:05

MySQL函数详解:日期、字符串、数学及其他常用函数

1. 日期函数1.1 常用日期函数概览函数名称描述current_date()返回当前日期current_time()返回当前时间current_timestamp()返回当前时间戳date(datetime)返回datetime参数的日期部分date_add(date, interval d_value_type)在date中添加日期或时间date_sub(date, interval d_val…

作者头像 李华
网站建设 2026/5/1 3:44:48

开题报告 高考志愿助手APP

目录高考志愿助手APP概述核心功能技术实现创新点应用场景项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作高考志愿助手APP概述 高考志愿助手APP是一款面向高中毕业生及家长的智能填报工具&#xff0c;旨在…

作者头像 李华
网站建设 2026/5/3 18:05:50

大数据领域数据中台的安全架构设计

大数据领域数据中台的安全架构设计 关键词:数据中台、安全架构、数据安全、隐私保护、访问控制、加密技术、安全审计 摘要:本文深入探讨大数据领域数据中台的安全架构设计。我们将从数据中台的基本概念出发,详细分析其面临的安全挑战,提出多层次的安全防护架构,并深入讲解…

作者头像 李华
网站建设 2026/5/1 17:35:55

Markdown是什么,为什么会流行?

markdown已经和英语、Python一样&#xff0c;成为AI的沟通语言了。 现在到处在讨论什么skills、mcp、agent等&#xff0c;好像哪怕一个纯技术小白也能用ai做开发&#xff0c;我认为任何一个人在ai时代需要掌握三门“语言”&#xff0c;不然搞ai会很难受&#xff0c;这三门语言…

作者头像 李华
网站建设 2026/5/1 5:54:13

基于深度学习YOLOv12的安全锥识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文基于YOLOv12深度学习框架&#xff0c;设计并实现了一套高效的安全锥识别检测系统。该系统通过集成YOLOv12算法、定制化的YOLO数据集&#xff08;包含训练集5960张、验证集341张和测试集170张&#xff09;以及用户友好的UI界面&#xff0c;实现了对安全锥目标…

作者头像 李华
网站建设 2026/5/1 9:50:55

基于WEB的汽车销售管理系统 开题报告

目录 系统概述技术架构核心功能模块创新点预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 系统概述 基于WEB的汽车销售管理系统旨在通过数字化手段优化汽车销售流程&#xff0c;涵盖车辆库存管理…

作者头像 李华