O/R Mapping 对象关系映射 (ORM) 之Hibernate

目前主流的数据库都是关系型数据库,现在编程技术都是面向对象的程序设计方法,需要使用 对象去描述关系数据库中的表,以及使用对象之间的关系描述表之间的关联,就出现了对象关系映射 (Object Relational Mapping,ROM) 技术。 简单的说,ORM是通过使用描述对象和数据库之间的映射的元数据,将Java 程序中的对象自动持久化到关系数据库中。

对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中对象之间存在关联和继承的关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,ORM系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

Hibernate就是其中一种非常优秀的 ORM框架,提供Java对象和关系数据的持久化和查询功能,是将持久化类与关系数据库相映射的工具,每个持久化类实例均对应数据库表中的一条数据行。用户可以使用面向对象的方法操作此持久化类实例,完成对数据库表数据的插入、删除、修改和读取的操作。

利用Hibernate 操作数据库,通过应用程序经过Hibernate 持久层来访问数据库,Hibernate完成了以前JDBC的功能。

JDBC技术的数据库访问的分层设计实现。

(1) 创建数据库表结构。

(2) 编写一个JavaBean 类,映射前面创建的表。

(3) 编写数据库访问类DAO类,主要是增删改查的功能。

(4) 编写客户端调用DAO类。

 

 

 

但是,JDBC编程分层设计实例存在问题:

(1)在表中主键列和其他列地位上应该不是一样的,但映射类没有体现。

(2)如果表与表之间有联系,如一对多等,数据库通过主键外键建立关联,映射类如何反映呢。

Hibernate很好地解决了这些问题。

 

一、Hibernate是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,使得Java程序员可以使用对象编程思想来操纵数据库。Hibernate使用数据库和配置信息来为应用程序提供持久化服务。

 

二、Hibernate 的工作原理

 

1、首先,Configuration读取Hibernate的配置文件和映射文件中的信息,即加载配置文件和映射文件;

2、并通过Hibernate配置文件生成一个多线程的SessionFactory对象;

3、然后,多线程SessionFactory对象生成一个线程Session对象;Session对象生成Query对象或者Transaction对象;

4、可通过Session对象的get()、load()、delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除等操作;

5、查询时,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交查询数据到数据库中。

 

Hibernate入门示例。                         

第1步:先建一个Java工程导入使用Hibernate最小必要包。你可以到网站下载Hibernate最新的包。当然如果访问数据库,则需要导入数据库驱动包。如访问MySQL则导入MySQL的驱动包。最小必要包功能简单描述如表所示。

 

 

 

 

 

 

 

第2步:在src创建配置文件hibernate.cfg.xml,放置在src目录中。

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

<!DOCTYPE hibernate-configurationPUBLIC

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

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

<hibernate-configuration>

<session-factory>

      <!--设置访问MySQL数据库的驱动描述符-->

 <property name="connection.driver_class">

     com.mysql.jdbc.Driver

     </property>

 

<!--设置访问数据库的URL-->

       <propertyname="connection.url">

   jdbc:mysql://127.0.0.1:3306/support

       </property>

        <!--指定登陆数据库用户账号-->

        <propertyname="connection.username">root</property>

        <!--指定登陆数据库用户密码-->

        <propertyname="connection.password">1234</property> 

        <!--设置访问MySQL数据库的方言,用以提高数据访问性能-->   

        <propertyname="dialect">

         org.hibernate.dialect.MySQLDialect

        </property>

         <!--指出映射文件位置-->

        <mappingresource="bean/Customer.hbm.xml" />

    </session-factory>

</hibernate-configuration>       

 

 

 

 

第3步:编写一个会话工厂类。通过会话工厂类产生一个会话Session对象。Session对象是Hibernate的核心。任何对数据库操作都在会话中进行的。通常这个会话工厂类不需要编写,可以直接调用系统定义号的会话工厂类。

 

第4步:编写POJO类以及映射文件,持久化类及对应表结构的类。

    Customer.java, Customer.hbm.xml

 

第5步:编写测试文件

      /*由会话工厂类创建一个会话Session对象

      Session session=HibernateSessionFactory.getSession();

        /*由会话Session对象创建一个查询Query对象*/

  Queryquery=session.createQuery("from Customer");

  Listlist=query.list();

     for(int i=0;i<list.size();i++){

         Customer cus=(Customer)list.get(i);

         System.out.printf("%-10s%-20s%-20s\n",

                               cus.getCustomerId(),cus.getName(),cus.getPhone());

  }

 

第6步:编写DAO类。

 

第7步:编写JSP页面调用DAO。

 

       

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值