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());
看到了吗?我们只需要操作对象就行了,也就是说,编程的人不需要看到数据库了,他只需要直接操作对象就行了。

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

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

3.hibernate根据定义的映射规则将对象持久化(保存到)数据库存中。这就实现了对象持久化。
持久化顾名思义就是把缓存中的东西放到数据库中使之持久.对于需要持久化的对象,它的生命周期分为三个状态:临时状态,持久化状态,游离状态.
临时状态:刚刚用new语句创建,没有被持久化,不处于session的缓存中.处于临时状态的java对象被称为临时对象.
持久化状态:已经被持久化,加入到session的缓存中.处于持久化的java对象被称为持久化对象.
游离状态:已经被持久化,但不处于session的缓存中,处于游离状态的java对象被成为游离对象.
持久化对象的特征:
.  位于一个session事例的缓存中,可以说持久化对象总是被一个session事例关联
.  持久化对象和数据库中的相关记录对应
.  Session在清理缓存时,会根据持久化对象的属性变化来同步更新数据库
.  Session的save()方法把临时状态变为持久化状态.
.  Session的update() ,saveOrUpdate()和lock()方法使游离状态变为持久化状态.
				
时间: 2024-10-27 00:22:21

hibernate如何实现持久化的相关文章

hibernate学习之持久化对象

Hibernate对其持久化对象实现了缓存管理,来提高系统性能,Hibernate支持两级缓存管理,一级缓存 是由Session提供的,因此它只存在于Session的生命周期中,是Session所内置的,不能被卸载. Hibernate的二级缓存是由SessionFactory提供的,他作为一个可插入的组件使用的,默认是不支持的,应用必须明确配置二级缓存才能使用. Session缓存的作用: 降低数据库的访问频率 保证缓存中的对象与数据库中的相关记录保持同步持久化对象的状态: 临时状态(Tran

hibernate框架(三)持久化类&amp;主键生成策略

一 持久化类的一个编写规则持久化:将内存中的一个对象持久化到数据库中的过程持久化类:一个Java对象与数据库的表建立了映射关系,那么这个类在hibernate中称为持久化类可以这么理解:持久化类=Java类+映射文件 持久化类的编写规则1 对持久化类提供一个无参的构造方法2 属性需要私有,对私有属性提供get和set方法3 对持久化类提供一个唯一标识Oid与数据库中主键对应4 持久化类中属性尽量使用包装类类型5 持久化类不要使用final进行修饰 二 主键生成策略先介绍一下主键的分类:自然主键和

hibernate使用save持久化了实体后再改变实体的值

public static void addStudent(){         sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();         Session session=sessionFactory.getCurrentSession();         session.beginTransaction();         Student student=new Stude

解析Hibernate中的持久化—ORM(转载)

最近一直在学习Hibernate,首先说一下Hibernate出现的原因吧,Hibernate是因为MVC的分层体系结构的出现,即数据持久层(模型层)的出现,持久层是在MVC三层架构的基础上提出来的,在提出持久层之前,业务逻辑层在实现业务逻辑的同时,还需要访问数据库,这样就为业务逻辑的扩展怎家了难度,有了持久层,业务逻辑层只需要负责业务逻辑的实现,对数据的交给持久层,使每一段业务逻辑代码的目的都更明确,这样操作就更简单了. 如下图:增加了持久层的MVC分层结构 Hibernate作为一个中间件,

hibernate 深入理解持久化对象

hibernate 完全采用面向对象的方式来操作数据库,因此开发者眼里只有对象.属性,无须理会数据库.表.列等概念. 持久化类的要求 Hibernate 采用低侵入式设计,所以对持久化类的要求也是只要是简单的pojo即可. 虽然hibernate对持久化没什么要求,但应遵守如下规则: -提供一个无参的构造器,这样hibernate就可以使用Constructor.newInstance()来创建持久化实例了. -提供 一个标识属性,通常是映射数据库的主键字段 -对象的属性应尽量避免使用最基本的类

hibernate access访问持久化类属性的策略

<property>元素的access属性用法: access有两个可选的值: 1,property:这是默认值,表明hibernate通过set和get方法来访问类的属性.这是优先的推荐方式.你必须为这个属性设置get和set方法,hibernate才能访问到.否则会报错的. 2,field:表明hibernate通过java的反射机制直接访问类的属性.你可以不给这个属性设置get和set属性. 这个属性在我们拼凑用户名的时候很有效.如下示例: Java代码   public class C

Hibernate中的持久化类

1.编写规则 ?    提供一个无参数 public访问控制符的构造器 ?    提供一个标识属性,映射数据表主键字段 ?    所有属性提供public访问控制符的 set  get 方法(javaBean) ?    标识属性应尽量使用基本数据类型的包装类型 ?    不要用final修饰实体 (将无法生成代理对象进行优化) 2.持久化对象的唯一标识 OID l  Java按地址区分同一个类的不同对象. l  关系数据库用主键区分同一条记录 l  Hibernate使用OID来建立内存中的对

Hibernate持久化对象的三种状态

在Hibernate中,持久化对象在被操作的过程中可以分为三个时期,这三个时期是和Session的周期相关的,因为Hibernate中的操作都是基于Session完成的.Session的特定方法能使对象从一个状态转换到另一个状态. 持久化对象的生命周期有三种,瞬时状态.持久状态和分离状态.如下图: 瞬时态 不曾进行持久化,未与任何Session相关联.此状态的对象是用new关键字创建出来的,此时对象没有和数据库中记录对应. //Transient状态 Useruser = new User();

Hibernate笔记——2.深入理解持久化对象

持久化类的要求 Hibernate对于持久化类的要求非常少. 它需要提供一个无参数的构造器,以便hibernate能够创建持久化实例.至少应该是包可见的. 提供一个标识属性,一般为数据库表的主键字段. 每个成员变量需要有set与get方法. 是非final类,以便Hibernate能够生成代理. 重写equals和hashCode方法:如果需要把持久化类放入Set中需要重写. 持久化类的状态 瞬态:对象被new出来但尚未与session关联.瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识