Hibernate资料

本文介绍Hibernate这一流行的ORM框架,包括其基本概念、配置方法及通过示例演示如何在Eclipse环境中快速搭建并使用Hibernate进行数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.        Hibernate 简介

Hibernate 是非常流行的对象 - 关系映射工具。

2.        什么是 ORM 映射

         未命名1.bmp

ORMObject Relational Mapping )简单的说,就是对象与关系的映射,对于实际应用来讲,对象一般指面向对象中的对象,关系指关系型数据库,对于我们具体的项目来说,就是将 java 中的对象与关系型数据库( oraclemysql )中的表联系起来 Hibernate 是很强大的工具,当我们将建立联系的工作交给它后,就可以专注于与 java 中的对象打交道,而不需要知道它代表的是哪些表。

3.         POJO (用来映射数据库中的表,构建我们的持久化层)

一个典型的 POJO

public class Person{

       private long id;

       private String name;

       public void setId(BigDecimal value) {

              this.id = value;

       }

       public BigDecimal getId() {

              return this.id;

       }

       public void setName(String value) {

              this.name = value;

       }

       public String getName() {

              return this.name;

       }

}

表面上看来,一个 POJO 与一个普通的 JavaBean 没有什么区别,我们需要了解的是如何让 POJO 和一个表建立联系。

4.        建立联系的桥梁,映射文件 XML

一个典型的映射文件 Person.hbm.xml ( 注意他的命名方式,一般是类名+ hbmxml

<?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 schema="SCOTT" package="mapping">

  <class name="Person" table="PERSON" >

    <id name="id" type="long" unsaved-value="null">

      <column name="ID" not-null="true" index="SYS_C004143"/>

      <generator class="native"/>

    </id>

    <property name="name" type="string" column="NAME"/>

  </class>

</hibernate-mapping>

注意红线部分代表了 Pojo 对应的是那张表。

一般来说映射文件放在和 Pojo 同一个包

5.        和数据库的连接

Hibernate 配置文件,可以采用 xml 或者 property 文件。

一个典型的配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

       "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

  <property name="hibernate.connection.username">toposs</property>

     <property name="hibernate.connection.password">toposs</property>

      <property name="hibernate.dialect">

org.hibernate.dialect.Oracle9Dialect

</property>

     <property name="hibernate.connection.url">

jdbc:oracle:thin:@172.16.1.3:1521:orcl

</property>

<property name="hibernate.connection.driver_class">

oracle.jdbc.driver.OracleDriver

</property>

     </session-factory>

</hibernate-configuration>

6.        HibernateEclipse 中快速应用

6.1         新建一个工程,将 Hibernate3.jar 和你需要的数据库驱动添加到工程 path

6.2         在数据库中新建一个名为 person 的表。
未命名2.bmp

6.3         在工程的默认 package 下建立一个 POJOPerson 类与表 person 对应。

public class Person{

 

       private long id;

 

       private String name;

 

 

       public void setId(long value) {

              this.id = value;

       }

 

 

       public long getId() {

              return this.id;

       }

 

 

       public void setName(String value) {

              this.name = value;

       }

 

 

       public String getName() {

              return this.name;

       }

}

6.4         现在我们来建立一个 xml 的映射文件( Person.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="Person" table="PERSON">

    <id name="id" type="long" unsaved-value="0">

      <column name="ID" not-null="true"/>

      <generator class="increment"/>

    </id>

    <property name="name" type="string" column="NAME"/>

  </class>

</hibernate-mapping>

6.5         建立 hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

       "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

       "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="hibernate.connection.username">scott</property>

<property name="hibernate.connection.password">tiger</property>

<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>

<property name="hibernate.connection.url">jdbc:oracle:thin:@172.16.1.2:1521:rsora</property>

<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>

       <property name="hiberante.show_sql">true</property>

       <mapping resource="Person.hbm.xml" />

    </session-factory>

</hibernate-configuration>

注意红线的部分将 mapping 文件写到 resource 中,如果有多个文件,要写多个文件,文件 的路径是对于根目录的绝对路径

6.6         项目结构图未命名3.bmp

6.7         所有准备工作都已经做好了 , 下面在 Person 中建立一个 main 方法,我们做一个简单的插入数据库的工作

6.7.1   Main 函数的代码

Public static main(String[] args){

Configuration config=new Configuration().configure();

        SessionFactory factory=config.buildSessionFactory();

        Session session=factory.openSession();

        Transaction tran=session.beginTransaction();

        Person p=new Person();

        p.setName("test");

        session.save(p);

       

        tran.commit();

        session.close();

}

6.7.2   点击 Run As Java Application ,运行这个 main 函数

6.7.3   然后查看数据库

未命名4.bmp
我们发现数据库已经新增加了一条记录

 

7.        最常见的关联关系,一对多关联。

7.1         用父子关系说明一对多(多对一关联)

在实际应用中,很少有一个表是独立的,大部分情况是表和表之间是有关联关系的,其中最常见的是一对多(多对一关联)。

父亲和儿子是典型的一对多关系,一个父亲有多个儿子,儿子只有一个父亲。在这个关系中,父亲是一方,儿子是多方。

7.2         在数据库中建立父子关系。

建表的 sql 语句:

CREATE TABLE father (

        Father_id          INTEGER NOT NULL,

       name        VARCHAR(10) NULL,

       PRIMARY KEY (father_id)  );

CREATE TABLE son (

       Son_id          INTEGER NOT NULL,

       Son_name        VARCHAR(10) NULL,

            Father_ID         INTEGER NULL

       PRIMARY KEY (son_id),

       FOREIGN KEY (father_id)

                             REFERENCES father

);

7.3         建立的表的结构

儿子的表
未命名5.bmp

父亲的表
未命名6.bmp

7.4         建立 POJO

同样在我们的工程的 defalt package 下面新建类 FatherSon

7.4.1   Father

public class Father {

 

    private long   fid;

 

    private String name;

 

    private Set    sons = new HashSet();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值