Hibernate持久化类概述

什么是持久化类

  • 持久化:将内存中的一个对象持久化到数据库中的过程。
  • 持久化类:Hibernate是一个ORM框架,因此当一个Java对象与数据库的表建立了映射关系时,那么在这个类在Hibernate中称为是持久化类,即:持久化类=Java类+映射文件

持久化类的编写规则

  • 对持久化类提供一个无参数的构造方法:Hibernate底层需要使用反射生成对象实例;
  • 属性私有,对私有属性提供public的get和set方法:Hibernate中获取,设置对象的值
  • 对持久化类提供一个唯一标识OID与数据库中的主键对应:Java中通过对象的地址区分是否是同一个对象,数据库中通过主键确定是否是同一个记录,在Hibernate中通过持久化类的OID的属性区分是否为同一个对象
  • 持久化类中的属性尽量使用包装类类型:因为基本数据类型默认值为0,就会产生歧义
  • 持久化类不要使用final修饰:延迟加载本身是Hibernate的一个优化手段。返回的是一个代理对象(Javassist可以对没有实现接口的类产生代理—使用了非常底层的字节码对象增强技术,继承这个类进行代理)。如果不能被继承,无法产生代理对象,延迟加载也就失效,因此session的get和load方法没有任何区别(debug调试判断控制台的打印情况);

持久化类示例

package com.itykd.domain;

public class Customer {

	private Long cust_id;
	private String cust_name;
	
	public Customer() {
		super();
	}
	public Long getCust_id() {
		return cust_id;
	}
	public void setCust_id(Long cust_id) {
		this.cust_id = cust_id;
	}
	public String getCust_name() {
		return cust_name;
	}
	public void setCust_name(String cust_name) {
		this.cust_name = cust_name;
	}
}

持久化类的三种状态

Hibernate为了更好地管理持久化类,将持久化类分成三种状态。

1 瞬时态

这种对象没有唯一的标识OID没有被session管理

2 持久态

这个对象有唯一标识OID被session管理

3 脱管态

这个对象有唯一标识OID没有被session管理

三种状态的相互转换

在这里插入图片描述

瞬时态对象

1 获得
Customer customer = new Customer();
2 状态转换
瞬时—>持久
save(Object obj);
saveorUpdate(Object obj);
瞬时—>脱管
customer.set_Id(1l);

持久态对象(持久化类持久态对象能够自动更新数据库)

1 获得
get() load() find() iterate()
Customer customer = session.get(Customer.class,1l);
Customer customer = session.load(Customer.class,1l);
2 状态转换
持久—>瞬时
delete();
持久—>脱管
close() clear() evict(Object obj)

脱管态对象

1 获得
Customer customer = new Customer();
customer.set_Id(1l);
2 状态转换
脱管—>持久
update(Object obj);
saveorUpdate(Object obj);
脱管—>瞬时
close() clear() evict(Object obj)

猜你喜欢

转载自blog.csdn.net/W2612888/article/details/84562923