`
zhangziyangup
  • 浏览: 1186386 次
文章分类
社区版块
存档分类
最新评论

一个简单的hibernate连接oracle数据库例子

 
阅读更多

一、 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编程已经有了初步的了解。读者可以在此基础上进行更深入的学习。

分享到:
评论

相关推荐

    HIbernate与oracle数据库应用例子

    在IT行业中,Hibernate是一个强大的Java持久化框架,它简化了Java应用程序与数据库之间的交互。而Oracle则是一款全球广泛使用的大型关系型数据库管理系统。本篇将深入探讨如何在实际项目中结合Hibernate与Oracle...

    一个简单的hibernate_4 链接Oracle例子

    【标题】:“一个简单的hibernate_4 链接Oracle例子” 在Java开发中,Hibernate是一个非常流行的Object-Relational Mapping(ORM)框架,它允许开发者以面向对象的方式处理数据库操作,极大地简化了数据库编程。这...

    hibernate 调用oracle函数

    在这个例子中,`MyFunctionResult`是一个简单的Java类,包含一个`result`属性来接收函数的返回值。 5. **调用函数**:最后,在Java代码中,我们可以像调用普通的方法一样来调用这个Oracle函数: ```java Session...

    strutsspringhibernate连接oracle例子

    xh.dmp文件可能是一个Oracle数据库的导出文件,用于恢复或导入数据。 "说明.txt"文件很可能是详细的操作指南,包括了如何搭建环境、配置各框架、导入数据库、运行示例应用等步骤。这部分内容是理解整个示例的关键,...

    hibernate_3.6的一个简单链接Oracle例子

    标题中的“hibernate_3.6的一个简单链接Oracle例子”表明我们将探讨如何使用Hibernate 3.6版本连接到Oracle数据库。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员在不直接编写SQL的情况下操作...

    简单的springmvc+hibernate的例子orcale数据库

    总结来说,这个例子展示了如何结合SpringMVC和Hibernate构建一个简单的Java Web应用,通过Oracle数据库实现数据存储。理解并掌握这些技术,对于Java开发者来说是非常重要的,因为它们在现代企业级应用开发中占据着...

    hibernate struts oracle例子

    【标题】:“Hibernate Struts Oracle例子”揭示了在Java Web开发中如何整合这三个关键技术来构建一个功能完善的数据库驱动的应用程序。Hibernate是Java领域中的对象关系映射(ORM)框架,它使得开发者可以使用面向...

    hibernate连接oracle-sqlserver2K-server2005小案例

    本案例涉及的主题是“hibernate连接oracle-sqlserver2K-server2005”,这表明我们将探讨如何使用Hibernate这个流行的Java对象关系映射(ORM)框架与三种不同的数据库系统——Oracle 11g,SQL Server 2000和SQL ...

    Hibernata调用Oracle数据库存储过程的一个小例子

    接下来,定义一个Java类来映射Oracle数据库中的表,这个类通常包含与表字段对应的属性和getter/setter方法。尽管我们在此例中主要关注存储过程,但理解对象与表的关系对于理解调用过程至关重要。 为了调用存储过程...

    hibernate 连接数据库基础源码

    虽然例子中用的是MySQL,但Hibernate同样支持Oracle数据库。只需更改配置文件中的方言(Dialect)为`org.hibernate.dialect.Oracle10gDialect`即可。 总结,`hibernate 连接数据库基础源码`的学习涵盖了Hibernate的...

    oracle分别使用jdbc和hibernate的例子

    Hibernate是一个ORM(Object-Relational Mapping)框架,它简化了数据库操作,使开发者可以专注于业务逻辑,而不是底层SQL。 使用Hibernate操作Oracle数据库: 1. 添加Hibernate依赖:在项目中引入Hibernate的jar包...

    hibernate 自连接 emp例子

    在这个特定的例子中,我们关注的是如何在Hibernate中实现自连接查询,以处理Oracle数据库中EMP表的树状结构问题。 首先,自连接查询是指一个表与自身进行连接的操作,常用于处理具有层级关系的数据,例如员工的上...

    Ibatis连接数据库的小例子

    在本小例子中,我们将探讨如何使用Ibatis连接ORACLE数据库。 首先,我们需要在项目中引入Ibatis的依赖库。通常,这可以通过Maven或Gradle的依赖管理实现。对于Maven,可以在pom.xml文件中添加如下依赖: ```xml ...

    ssh整合例子,struts+spring+hibernate+oracle整合

    这个整合例子展示了如何将这三个强大的开源框架与Oracle数据库结合,以构建高效、灵活且可扩展的Web应用程序。 **Struts** 是一个MVC(Model-View-Controller)框架,负责处理HTTP请求并控制应用程序流程。它通过...

    ssh小例子实现登陆功能,oracle数据库

    3. **持久化配置**:在hibernate.cfg.xml中配置Oracle数据库连接信息,然后为User类创建对应的映射文件(User.hbm.xml),定义表结构和字段映射。 4. **创建DAO层**:编写UserDAO接口,提供验证用户名和密码的方法...

    hibernate向oracle插入图片

    1. 首先,确保已安装并配置好Oracle数据库,创建一个可以存储图片的表,包含一个BLOB类型的字段。 2. 下载并导入Hibernate所需的jar包,这些包通常包括hibernate-core、hibernate-entitymanager等,确保项目中已添加...

    java连接数据库代码

    在Java编程中,连接Oracle数据库是一项基础且重要的任务。Oracle是一种广泛应用的关系型数据库管理系统,而Java作为跨平台的编程语言,常被用来开发与数据库交互的应用程序。本篇将详细介绍如何使用Java连接Oracle...

    struts2+spring+hibernate一个小例子

    在这个"struts2+spring+hibernate"的小例子中,开发者使用这三者构建了一个基于Oracle数据库的应用。 首先,Struts2作为MVC框架,主要负责处理HTTP请求,通过Action类来执行业务逻辑,并将结果返回给视图。它的配置...

    java oracle练习例子

    这个"java oracle练习例子"可能包含了这些基本步骤,让你能够理解如何在Java中连接Oracle数据库并进行简单的查询。然而,实际项目中还需要考虑更多因素,如事务管理、错误处理、连接池的使用等。在实际开发中,推荐...

    SSH框架增删改查例子源码JSP页面Oracle数据库

    总结来说,"SSH框架增删改查例子源码JSP页面Oracle数据库"是一个典型的Java Web应用开发实例,它涵盖了前端用户交互、后端业务逻辑处理以及数据存储。通过学习这个例子,开发者可以深入理解SSH框架的运作机制,以及...

Global site tag (gtag.js) - Google Analytics