hibernate的相关知识

Hibernate的PO对象状态

1.临时态

由new命令开辟内存空间生成的java对象处于临时态。
他是携带信息的载体,不和数据库的存在关联,在Hibernate中,可通过Sessionn的save()或者saveOrUpdate()方法将临时对象变成持久对象;

2.持久态

该状态下的对象在数据库中具有对应的的记录,并拥有持久化标识,可使用delete()方法把持久对象变成临时对象,并且不再与数据库的记录关联;
当一个Session执行close()或clear()之后,持久对象变成托管对象,此时对象虽有数据库识别值,但他不在Hibernate持久层的管理之下;

3.脱管态

当与某持久对象关联的Session关闭后,该持久对象转为脱管对象,当脱管对象重新关联到Session上,变回持久对象;脱管对象永远数据库标识值
,可通过update(),saveOrUpdate(),等方法变成持久对象;

4.Session中改变PO对象状态常用方法

通过get()或load()方法得到的PO对象都处于持久态,但如果执行了delete(),该PO对象处于临时态,可通过save()或saveOrUpdate()变成持久态;
当把Session关闭时,Session缓存中的持久态PO对象变成托管态;因关闭Session而变成脱管态的PO对象可以通过调用lock(),save(),update()变成持久态
;持久态PO对象可以通过调用delete()变成临时态;

Hibernate的configuration类

Configuration类的主要作用是解析Hibernate的配置文件和映射文件的信息;
如:
Configuration cfg=new Configuration().configure(“hibernate.cfg.xml”);

Hibernate的SessionFactory接口

SessionFactory接口负责初始化Hibernate(一般一个应用只有一个SessionFactory)

如:

SessionFactory sf=cfg.buildSessionFactory();

Hibernate的Session接口

获取到Session对象后,Hibernate内部并不会立即获取connection对象,而是等待真正需要增删改查操作才会从数据库中获取Connection对象。关闭Session对象时,则是将

Connection对象返回到连接池中,而不是关闭Connection对象;

Session类的方法分类分成5类:

1.获取持久化对象:get()和load()等方法;

2.持久化对象的保存,更新,删除:save(),update(),saveOrUpdate()和delete()等;

3.createQuery方法:用来从Session生成Query对象,Query对象调用Query接口,在此接口中可以调用HQL或者本地SQL查询数据;可使用excuteUpdate()方法更新或删除数据;使用list()方法查询结果,使用List进行存储;

4.beginTransaction()方法:用来从Session生成Transaction对象(Transaction接口是对事务实现的一个抽象常用方法:1.commit():提交相关联的Session实例;2.rollback():撤销事务操作;3.wasCommitted():检查事务是否提交),然后使用createQuery方法调用Query接口,在此接口中可以调用HQL或者本地SQL查询数据;

5.管理Session的方法:isOpen(),flush(),clear(),evict()和close()等方法,其中isopen()方法用来检查Session是否仍然打开;flush()方法使用清理Session缓存,并把缓存中的SQL语句发送出去;clear()方法用来清除Session中的所有对象;evict()用于清除Session缓存中的某个对象;close()用于关闭Session方法;


Hibernate中通过方法获取PO对象

1.使用get()方法获取PO对象
第一个参数是类名,第二个参数是对象的键值;
如果id类型是int,可通过new Integer(id)的方法生成Integer对象
如:Session.get(UserInFo.class,new Integer(66));
get()方法获取PO对象时执行过程:
1.通过id在Session缓存中查找对象,如果存在与id主键值对应的对象,直接将其返回;
2.如果在Session缓存中没有查询到对应的对象,则在二级缓存中查找,如果找到后将其返回
3.如果在前面两个步骤操作,没有查找到该对象,则从数据库加载此id对象


2.使用load()获取PO对象
load和get方法一样可以通过主键id加载一个持久化对象

get()和load()方法区别如下:

立即加载PO对象和延迟加载对象(当Hibernate从数据库中取得数据组取得数据组装好一个对象后,是否立即再从数据库取得数据组装与此对象相关联的对象,如果是延迟加载,而是等到需要时,才会从数据库取得数据组转关联数据);

在立即加载中,如果对象不存在,get方法返回null,而load方法返回异常;

在延迟加载中,如果对象不存在,get方法仍然使用立即加载发送sql语句,并返回初始化对象,而load方法则根本不会发送sql语句,他返回一个代理对象,这个对象直到被访问时才被初始化;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值