Hibernate会话中增删改查的示例分析

  介绍

这篇文章将为大家详细讲解有关Hibernate会话中增删改查的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

把三状态转换图放在这,方便分析方法的作用:

 Hibernate会话中增删改查的示例分析

1.会话的保存()方法

会话是Hibernate所有接口中最重要的接口,提供了对数据保存,更新,查询和删除的方法。

会话的保存()方法可以使临时态或游离态转换为持久态。例如,保存一个客户对象:

SessionFactory  sessionFactory;   Configuration  Configuration =, new 配置().configure ();   时间=sessionFactory  configuration.buildSessionFactory ();   Session  Session =, sessionFactory.openSession ();   Transaction  tr =, session.beginTransaction ();//1 .创建客户对象,   Customer  c1 =, new 客户();   c1.setId (new 长(1));   c1.setName (“test");   c1.setEmail (“123456789 @qq.com");   c1.setPassword (“123456”);   c1.setAddress(“世外桃源“);//2 .调用会话的save()方法,将客户对象持久化,   session.save (c1);   tr.commit ();   session.close ();

Save()方法主要做了以下三件事:

(1)将新的创建的临时态的客户对象放入缓存,使其持久化。

(2)同时根据对象关系映射文件中设置的OID生成器,即主键生成方式给该对象生成一个唯一的OID。

& lt; !——设置主键——比;   & lt; idname=癷d"列=癷d"类型=發ong"比;   & lt; !——主键生成方式——比;   & lt; generatorclass=癷ncrement"/比;   & lt;/id>

在这个地方有一个疑问,创建对象时setId()方法是否是为该对象持久化生成主键,其实不是,setId并没有按照我们设定的那样生成主键,而是靠对象关系映射文件配置的主键生成方式生成主键,可以多运行几次,主键自增长,从数据库可以看到多条数据,主键从1开始,所以可以知道setId ()

没有设置主键,否则数据库主键唯一性校验都过不去。

我们也可以手动设置主键值,必须重载保存()方法,使用重载方法保存(c1, newLong(1)),每次手动设置。

(3)计划执行插入语句。注意,插入语句并没有立刻执行,只有当会话清理缓存时,才会执行插入语句.tr.commit()事务提交。

2.会话的更新()方法

使游离态对象变成持久态对象,例如:

SessionFactory  sessionFactory。,   Configuration  Configuration =, new 配置().configure (),,   sessionFactory =, configuration.buildSessionFactory (),,   Session  session1 =, sessionFactory.openSession (),,   Transaction  tr1 =, session1.beginTransaction (),,//1 .创建客户对象,   Customer  c1 =, new 客户(),,   c1.setId (new 长(1)),   c1.setName (“test");,   c1.setEmail (“123456789 @qq.com");,   c1.setPassword (“123456“),   c1.setAddress(“世外桃源“),,//2 .调用会话的save()方法,将客户对象持久化,   session1.save (c1),,   tr1.commit (),,   session1.close (),,//3 .将游离态的对象更新,发现改变,执行更新语句,   Session  session2 =, sessionFactory.openSession (),,   Transaction  tr2 =, session2.beginTransaction (),,   c1.setAddress(“测试update"),   session2.update (c1),,   tr2.commit (),,   session2.close ();

会话的更新()注意做以下事:

(1)把游离态的客户对象从新加入会话缓存中,使其变成持久化对象。

(2)执行更新语句。跟保存()执行插入语句一样,并不是立刻执行更新语句,需要等缓存清空时,把客户对象组装成更新语句,

然后再执行。

注意,即使客户没有改变,默认情况下,缓存清除时也会组装更新语句,如果需要设置成改变成才执行更新语句,需要设置对象关系映射文件。

3.会话的saveOrUpdate()方法

saveOrUpdate()方法包含保存()和更新()方法的功能,根据传入参数状态,调用不同方法。传入临时态对象调用保存()方法,如果传入游离态对象调用

update()方法。传入持久态对象返回,所以,每次我们只需传入对象,saveOrUpdate()方法,自动判断传入对象状态的状态,动态调用处理方法。

该方法如何判断传入对象的状态?当满足以下任意一个条件时,就是临时态:

(1) java对象的OID为null,说明该对象没有别实例化,即使被实例化,也是游离态被删除后变成临时态的对象,这种情况下的对象为临时态。

Hibernate会话中增删改查的示例分析