news 2026/9/2 15:46:49

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/9/2 23:04:32

MySQL复合查询详解:多表查询、子查询与合并查询

1. 基本查询回顾 1.1 复杂条件查询 -- 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时满足姓名首字母为大写J SELECT * FROM EMP WHERE (sal > 500 OR job MANAGER) AND ename LIKE J%; 1.2 排序查询 -- 按照部门号升序而雇员的工资降序排序 SELECT * FROM E…

作者头像 李华
网站建设 2026/9/2 22:46:11

​ Android 基础入门教程​3.8 Gestures(手势)

3.8 Gestures(手势) 分类 Android 基础入门教程 本节引言&#xff1a; 周六不休息&#xff0c;刚剪完了个大平头回来&#xff0c;继续码字~ 好的&#xff0c;本节给大家带来点的是第三章的最后一节——Gestures(手势)&#xff0c; 用过魅族手机的朋友相信对手势肯定是不陌生…

作者头像 李华
网站建设 2026/9/2 15:18:19

什么是Redis的大Key和热Key?你们的项目一般是怎么解决的?

一、首先我们要搞清楚大key和热key是什么。 1. 大Key 通常以Key的大小和Key中成员的数量来综合判定。比如Key本身的Value过大&#xff0c;一个String类型的Key&#xff0c;它的值为10 MB&#xff1b;Key中的成员数过多&#xff1a;一个ZSET类型的Key&#xff0c;它的成员数量为…

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

基于WEB的超市销售管理系统设计 开题报告

目录研究背景与意义系统目标关键技术预期功能模块创新点研究方法进度计划参考文献项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作研究背景与意义 随着电子商务和数字化管理的普及&#xff0c;传统超市需通…

作者头像 李华
网站建设 2026/9/3 0:24:10

利用AI提升开题报告质量,大幅减少人工修改时间

工具对比速览 工具名称 核心功能 适用场景 效率评分 特色优势 AIBiYe 开题报告生成/降重 中文论文全流程 ★★★★★ 国内院校适配度高 AICheck 初稿生成/格式检查 快速产出框架 ★★★★☆ 结构化输出优秀 AskPaper 文献综述辅助 外文文献处理 ★★★★ 跨…

作者头像 李华
网站建设 2026/9/2 23:31:21

代码重构指南:优化建议系统

代码重构指南&#xff1a;优化建议系统关键词&#xff1a;代码重构、优化建议系统、代码质量、软件开发、算法原理、实战案例摘要&#xff1a;本文围绕代码重构的优化建议系统展开&#xff0c;旨在为开发者提供全面的技术指导。首先介绍了代码重构及优化建议系统的背景&#xf…

作者头像 李华