一、 Hibernate介绍 Hibernate是基于对象/关系映射(ORM,Object/Relational Mapping)的一个解决方案。ORM方案的思想是将对象模型表示的对象映射到关系型数据库中,或者反之。Hibernate目前是ORM思想在Java中最成功、最强大的实现。它于2001年的年末发布第一个版本,立即引起了广泛的注意。2003年6月,Hibernate2发表,并且获得Jolt大奖,进而被JBoss吸纳成为它的一个子项目。2005年3月,Hibernate 3发表,其中做了一些比较重大的改进。本文以Hibernate3为基础编写。
另外,Hibernate除了可以在J2EE容器中运行外,还可以运行在Java应用程序中。本文就是以Java应用程序为例来介绍它。
二、配置开发环境 本文以一个Java应用程序(Java Application)为例,介绍如何使用Hibernate来进行数据库操作。 在进行Hibernate开发之前,需要首先获得Hibernate类库、相应数据库的JDBC驱动类库。Hibernate类库可以从http://www.hibernate.org中下载,目前的版本是3.0。而JDBC驱动可以根据不同的数据库来选择,在这个例子中,使用的是Oracle数据库,那么相应的JDBC驱动可以从Oracle安装目录\ora92\jdbc下获得。其他的数据库请根据相关的说明获得。
下载Hibernate包后,可以将它解压到一个文件夹,此处假设为C:\hibernate-3.0,然后将C:\hibernate-3.0\下的hibernate.jar和C:\hibernate-3.0\lib下的那些第三方类库也放到环境变量CLASSPATH中。(通常,只需要dom4j、cglig、commons-logging、commons-collections、log4j、ehcache、asm、jta、antlr这些类库就可以了)
做完这些配置后,就可以在此基础上进行基于Hibernate的Java程序开发了。
三、开发基于Hibernate的应用 现在假设我们在Oracle数据库中创建了一个表Student,它的字段如下表所示:
字段 说明 Student_ID 学员编号,整型,PK,自动增长 Student_Name 学员姓名,字符串类型 Student_Age 学员年龄,整型 如果我们在Oracle中定义这个数据库表,我们可以定义一个创建数据库表的SQL脚本如下: create table Student( Student_ID number(6) NOT NULL PRIMARY KEY, Student_Name varchar2(10) NOT NULL, Student_Age number(2) NOT NULL );
另外,因为在Oracle中没有“自动增长”类型的字段,所以通常情况下我们需要定义一个sequence来作为自动增长类型字段的数据。在这里,我们也可以定义一个sequence来给Student_ID字段提供数据。创建sequence的SQL脚本如下:
CREATE SEQUENCE student_sequence INCREMENT BY 1 START WITH 1000 NOMAXVALUE NOCYCLE CACHE 10;
我们在这里创建了一个student_sequence,准备用来作为Student_ID字段的值。
接着,我们需要一个hibernate.cfg.xml或者属性文件hibernate.properties来指定Hibernate所使用的数据库以及用户名、密码等其他相关的配置,我们在此使用xml文件,它的内容如下:
源文件:hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--程序执行的时候是否显示真正的sql语句--> <property name="show_sql">true</property> <!--使用的SQL对应的“方言”,此处是Oracle9的“方言”--> <property name="dialect">org.hibernate.dialect.Oracle9Dialect </property> <!--连接数据库的Driver--> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </property> <!--数据库连接url--> <property name="connection.url"> jdbc:oracle:thin:@localhost:1521:nitpro </property> <!--用户名--> <property name="connection.username">system</property> <!--密码--> <property name="connection.password">manager</property> </session-factory> </hibernate-configuration>
做完前面的这些准备工作后,下面就让我们进入激动人心的Hibernate编程吧!
首先,我们需要定义一个用于表示“学生”对象的Student类:
源文件:Student.java public class Student { private int student_id; private String student_name; private int student_age; public int getStudent_id() { return student_id; } public String getStudent_name() { return student_name; } public int getStudent_age() { return student_age;; } public void setStudent_id(int id) { this.student_id = id; } public void setStudent_name(String name) { this.student_name = name; } public void setStudent_age(int age) { this.student_age = age; } }
这个类很简单,就是一个典型的JavaBean的定义:有三个属性:student_id、student_name和student_age,分别对应数据库表Student中的三个字段,并且在这个类中定义了对应各个属性的setter/getter方法。
接下来,我们需要给这个类定义一个XML映射文件“Student.hbm.xml”,文件内容如下:
源文件:Student.hbm.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Student" table="Student"> <id name="student_id" column="student_id" type="java.lang.Integer"> <generator class="native"> <param name="sequence">student_sequence</param> </generator> </id> <property name="student_name" column="Student_Name" type="java.lang.String"/> <property name="student_age" column="Student_Age" type="java.lang.Integer"/> </class> </hibernate-mapping>
注意,在这个xml文件中,我们首先使用class元素定义了我们定义的Java类和数据库表之间的关系,在这里,我们定义的Java类和数据库表名称都是Student,然后,我们使用id元素定义了主键名称、类型等,它有一个子元素generator来说明主键的产生方式,此处指定的是“native”,表示根据数据库来选择,比如,对于Oracle数据库,它会去寻找一个sequence(默认情况下,它会去寻找一个名为“hibernate_sequence”的sequence),我们可以用参数param来指定一个sequence。而property用来指定Student.java类中的属性和Student数据库表之间的对应关系,以及各个字段的数据类型。在这个例子中,我们指定的数据类型是Java语言中的数据类型(此时需要指定引用类型数据),我们也可以使用Hibernate中自定义的数据类型,限于篇幅,在本文中不一一讲解。
然后,我们需要在hibernate.cfg.xml中加入这个文件的映射,可以在</session-factory>之前加入下面的语句:
<mapping resource="Student.hbm.xml"/> 最后,我们需要编写一个测试类来测试一下,能否通过Hibernate和前面我们定义的相关程序,完成对数据库的操作。我们编写一个测试类如下: 源文件:Test.java import org.hibernate.*; import org.hibernate.cfg.*;
public class Test { public static void main(String[] args) { try { //通过Configuration获得一个SessionFactory对象 SessionFactory sf = new Configuration().configure().buildSessionFactory(); //打开一个Session Session session = sf.openSession(); //开始一个事务 Transaction tx = session.beginTransaction(); //创建一个Student对象 Student stu = new Student(); //通过Student的setter方法改变它的属性 //注意student_id不用我们设置 stu.setStudent_name("zhangsan"); stu.setStudent_age(18); //通过session的save()方法将Student对象保存到数据库中 session.save(stu); //提交事务 tx.commit(); //关闭会话 session.close(); } catch(Exception e) { e.printStackTrace(); } } }
编译并运行这个程序,如果前面的配置和程序都没有问题,应该可以正确的往数据库表Student中插入一条数据,并且在控制台上能够得到如下输出(只列出部分输出内容):
Hibernate: select student_sequence.nextval from dual Hibernate: insert into Student (Student_Name, Student_Age, student_id) values (?,?,?)
可以看到,虽然我们自己没有编写SQL语句进行插入数据的操作,但是其实Hibernate还是要使用SQL语句来进行数据库的操作,只是这个过程对程序员来说是透明的。
通过这个简单的例子,相信读者对Hibernate编程已经有了初步的了解。读者可以在此基础上进行更深入的学习。
|
相关推荐
在IT行业中,SpringMVC、Hibernate以及Oracle数据库是常见的技术栈,用于构建高效、可维护的企业级Web应用程序。本文将详细解析基于注解的SpringMVC+Hibernate+Oracle数据库集成的实现过程及其核心知识点。 首先,...
在这个案例中,"SpringMVC+Spring+Hibernate+Oracle 实现图书管理(CRUD)"是一个使用了四大主流Java技术栈的项目,分别是SpringMVC作为前端控制器、Spring作为应用层框架、Hibernate作为持久层框架,以及Oracle作为...
【标题】"市调管理系统struts2+hibernate+oracle"揭示了这是一个基于Java技术栈的Web应用程序,主要用于市场调查数据的管理。系统利用了Struts2作为MVC框架,Hibernate作为对象关系映射(ORM)工具,以及Oracle...
本系统采用struts2+spring+hibernate+oracle代码齐全完整,适合作为SSH毕业设计,java毕业设计项目,计算机毕业设计,java课程设计,还是很不错的 很值得收藏 学习 探讨 研究。
最新最全面的java jsp项目 通用的在线考试系统 可用于毕业论文 jsp+struts+hibernate+oracle Eclipse+tomcat开发 高质量代码 导入数据库即可用 文档包括: 软件说明书 具体功能: 学员注册 学员登录 学员查看成绩...
基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh项目源码 基于struts+spring+hibernate+oracle的移动ssh...
不错的适合练手、课程设计、毕设的JSP项目源码:通用的在线考试系统(jsp+struts+hibernate+oracle)不错的适合练手、课程设计、毕设的JSP项目源码:通用的在线考试系统(jsp+struts+hibernate+oracle)不错的适合练手、...
【标题】"jsp+hibernate+oracle出库单模块"是一个基于Web的库存管理系统中的一个关键组件,它主要用于管理仓库中的货物出库流程。在这个模块中,开发人员使用了JavaServer Pages(JSP)作为前端展示技术,Hibernate...
《构建基于SpringMVC、Hibernate和Oracle的基础框架》 在现代企业级应用开发中,SpringMVC、Hibernate和Oracle的组合被广泛应用于构建强大的后端系统。这些技术各自扮演着关键角色,共同构成了一个高效、稳定的开发...
SpringMVC、Hibernate和Oracle是Java Web开发中的三大核心技术,它们共同构建了一个强大的后端系统,可以实现诸如登录、注册以及数据的增删改查等基本功能。下面将详细讲解这三个技术及其在实际项目中的应用。 ...
在SSH项目中,Hibernate作为ORM工具与Oracle数据库进行交互,通过JDBC驱动建立连接,执行SQL语句,实现数据的增删改查。 这个"Java项目之移动SSH项目"将这些技术整合在一起,构建了一个完整的移动应用。在源代码中...
《通用的在线考试系统:基于JSP+Struts+Hibernate+Oracle的技术实现》 在线考试系统作为一种现代化的教学管理工具,已经广泛应用于教育领域,它能够有效地进行考试组织、试题管理和成绩统计,极大地提高了教学效率...
Java-JSP计算机毕业设计课程设计项目源码 Java-JSP计算机毕业设计课程设计项目源码 Java-JSP计算机毕业设计课程设计项目源码 Java-JSP计算机毕业设计课程设计项目源码 Java-JSP计算机毕业设计课程设计项目源码 ...
spring+struts+hibernate+oracle10g的研究人员查询系统 spring,struts,hibernate,oracle,查询系统 简易的查询系统,整合了j2ee多个框架知识,适合ssh初学者参考!
MyEclipse 提供了对Struts、Hibernate以及Oracle等技术的一键配置和集成,简化了开发流程,使得开发者可以更高效地进行企业级应用的构建。 【Struts】 Struts 是一个基于MVC(Model-View-Controller)设计模式的...
javaweb图书管理系统移动ssh项目(struts+spring+hibernate+oracle)
SSH是Java开发中的一种经典架构组合,由Struts、Spring和Hibernate三个开源框架组成,用于构建企业级的Web应用程序。这个“移动SSH项目”显然基于这个框架,结合Oracle数据库,提供了一个毕业设计的实例,旨在帮助...
移动ssh项目(struts+spring+hibernate+oracle)130222.zip
在这个系统中,我们看到采用了Struts、Hibernate和Oracle这三种技术,构建了一个高效、稳定且功能丰富的电子商务解决方案。 【Struts】是Apache软件基金会下的一个开源框架,主要用于构建Java Web应用程序。它的...
移动ssh项目(struts+spring+hibernate+oracle)