news 2026/2/3 4:33:06

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/2/1 21:31:55

Git新手必学的3个实战技巧

一、技巧一&#xff1a;代码冲突解决&#xff08;五步法&#xff09; 1. 发现冲突 执行 git merge 或 git pull 时&#xff0c;Git 提示冲突后&#xff0c;用 git status 查看冲突文件&#xff08;标记为 both modified&#xff09;&#xff1a; bash git status # 输出示…

作者头像 李华
网站建设 2026/2/1 21:25:39

【开题答辩全过程】以 基于python网络安全知识在线答题系统为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

作者头像 李华
网站建设 2026/2/1 21:24:52

AI应用架构师的企业虚拟化转型创新型方案

AI应用架构师的企业虚拟化转型创新型方案&#xff1a;从痛点到落地的全链路拆解 一、引言&#xff1a;AI时代&#xff0c;企业虚拟化为何需要“重新定义”&#xff1f; 1. 一个戳中AI从业者的真实痛点 凌晨3点&#xff0c;某电商公司的AI算法工程师小周盯着屏幕发愁&#xff1a…

作者头像 李华
网站建设 2026/2/3 1:33:49

10款AI效率加速器工具的功能差异:基础版与专业版对比分析

&#xfffd;&#xfffd; 10大降AIGC平台核心对比速览 排名 工具名称 降AIGC效率 适用场景 免费/付费 1 askpaper ⭐⭐⭐⭐⭐ 学术论文精准降AI 付费 2 秒篇 ⭐⭐⭐⭐⭐ 快速降AIGC降重 付费 3 Aibiye ⭐⭐⭐⭐ 多学科论文降AI 付费 4 Aicheck ⭐⭐⭐⭐…

作者头像 李华