Hibernate相关概念及序列化和持久化的区别


一. Hibernate 初识
hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中。

hibernate要做的事,就是让对象投影到关系数据库中,然后实施持久化。其具体实现:建立对象到关系数据库的映射.

Example:  建立User类到数据库的映射
一个简单的类User:
  public class User{
      private int id;
      private String name;
  }

User类对应的数据库表USER:
column-name type rule
id number P
name varchar2 R

当进行持久化时,需要把对象的两个属性的值保存到数据库存的USER中,如果使用JDBC的话,我们需要自己写SQL,并获取对象两个属性的值作为参数来进行持久话。SQL可能如下:
insert into USER(name) value(?);

当使用hibernate时,首无要作好对象到表的映射关系,使用配置文件来实现:
User.hbm.xml:
...
<class name="user" table="USER"><!--该类对象保存到USER表-->
<id name="id" column="id">
<generator class="native"/><!--这里有很多策略来生成ID,这里选择本地自动生成,-->
</id>
<property name="name" column="name">
</class>
...

然后在通过hibernate.cfg.xml中配置到数据库的联接,并读取User.hbm.xml文件,就建立了映射关系了。

当需要持久化对象时,需要使用到hibernate的session对象:
session.save(new User());
看到了吗?我们只需要操作对象就行了,也就是说,编程的人不需要看到数据库了,他只需要直接操作对象就行了。

当我们采用ORM框架之后,应用程序不再直接访问底层的数据库,而是以面向对象的方式来操作持久化对象(例如创建、修改、删除等),而ORM框架则将这些面向对象操作转换成底层的SQL操作。

hibernate 如何实现持久化?
答:
1.hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中,即进行持久化的框架。

2.hibernate进行持久化首先要建立对象到关系数据库的映射。

3.hibernate根据定义的映射规则将对象持久化(保存到)数据库存中。这就实现了对象持久化。

二. 序列化和持久化的区别
序列化也是一种对象服务,就是把内存中的对象序列化成流、或者把流反序列化成对象。需要实现2个接口:

voidSerialize(Streamstream,object o) 把对象序列化到流中
object Deserialize(Stream stream) 把流反序列化成对象

序列化和持久化很相似,有些人甚至混为一谈,其实还是有区别的,

序列化是为了解决对象的传输问题,传输可以在线程之间、进程之间、内存外存之间、主机之间进行。我之所以在这里提到序列化,是因为我们可以利用序列化来辅助持久化,可以说凡是可以持久化的对象都可以序列化,因为序列化相对容易一些(也不是很容易),所以主流的软件基础设施,比如.net和java,已经把序列化的框架完成了。

持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在的数据库中,或者存储在磁盘文件中、XML数据文件中等等。持久化是将程序数据在持久状态和瞬时状态间转换的机制。 JDBC就是一种持久化机制。文件IO也是一种持久化机制。

持久化方案可以分为关系数据库方案、文件方案、对象数据库方案、xml数据库方案,现今主流的持久化方案是关系数据库方案,关系数据库方案不仅解决了并发的问题,更重要的是,关系数据库还提供了持久化服务之外的价值:统计分析功能。刚才我说到,凡是可以序列化的对象都可以持久化,极端的说,我们可以只建立一个表Object(OID,Bytes),但基本上没有人这么做,因为一旦这样,我们就失去了关系数据库额外的统计分析功能。

首先要说的是,Hibernate中ORM里对应的映射文件BEAN,必须实现序列化.因为BEAN里的数据需要存入数据库(要转化为二进制保存),进行存取工作.

JAVA类的数据 ,如果要进行相关的存储工作(如写文件,网络传输,写数据库等),那么这个数据的类 就必须实现序列化接口 (java.io.Serializable).
        序列化 :  把对象转换 为二进制数据(如网络传输,存储数据库等),必须实现序列化接口 (java.io.Serializable).
        持久化 :  把对象保存 在介质上(如写文件,读文件不是), 没有接口实现,一般指方法调用.

对象只有在序列化之后才能进行持久化存储,从持久化存储介质加载的数据通过反序列化转变成运行时对象。

Hibernate3.1.2_中文文档PDF 

Hibernate学习入门教程 

在Hibernate中开启日志

Hibernate+JUnit测试实体类生成数据库表 

Hibernate整体理解

Hibernate的映射机制 

Hibernate 的详细介绍:请点这里
Hibernate 的下载地址:请点这里

本文永久更新链接地址

相关内容