持久化类
持久化类: 将内存的的对象保存到数据库中,简而言之就是Java类+映射文件。
编写规则
- 对持久化类提供一个无参构造方法
- 属性私有,提供set和get方法
- 唯一标识OID
- 使用包装类类型(使用Interator 而非 int)
- 持久化类不能用final修饰
持久化类的三种状态
瞬时态: 没有被OID,没有被Session所管理。
托管态: 有OID,没有被Session所管理。
持久态: 有OID,且被Session所管理。
总而言之: 两者都占的是持久态,两者都不占的是瞬时态,只占前者的是托管态。
public static void main(String[] args) {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
StudentEntity studentEntity = new StudentEntity();//瞬时态
studentEntity.setName("sss");
Serializable id = session.save(studentEntity);//持久态
transaction.commit();
session.close();
System.out.println(studentEntity.getName());//托管态
}
状态转换
瞬时态:
获得:建立对象 StudentEntity studentEntity = new StudentEntity();//瞬时态
瞬时态到持久态:save() saveOrUpdate(Object obj) 加上OID和Session
瞬时态到托管态: .setId() 加上OID
持久态:
获得: get() ,load(),find(),Iterate()。
持久态到瞬时态: delete() 去掉OID和Session
持久态到托管态: close() clear()/清空所有 evict(Object obj)/清空某一个,去掉Session
托管态:
获得: setid
托管态到持久态: update(),saveOrUpdate() 加上Session即可
托管态到瞬时态: setid(null); 去掉OID 即可
Hibernate缓存
一级缓存:
一级缓存也被称为Session缓存,发送SQL语句先去缓存里面查看有无,若有则不发送SQL语句到数据库。
一级缓存结构:
快照区:发送到缓存的请求先去快照区查看,比较差异,若相同就不找找数据库的事儿。
clear 会清空缓存。