Java中使用Hibernate系列之加载并存储对象学习(第三节)

时间:2022-04-29
本文章向大家介绍Java中使用Hibernate系列之加载并存储对象学习(第三节),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

经过第一、二节的学习,现在可以使用Hibernate来加载和存储对象了,先编写一个带有main()方法的EventManager类:

网络配图

代码如下:

package events;
import org.hibernate.Session;
import java.util.Date;
import util.HibernateUtil;
public class EventManager {
public static void main(String[] args) {
EventManager mgr = new EventManager();
if (args[0].equals("store")) {
mgr.createAndStoreEvent("My Event", new Date());
}
HibernateUtil.getSessionFactory().close();
}
private void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);
session.getTransaction().commit();
}
}

我们创建了个新的Event对象并把它传递给Hibernate,现在Hibernate负责与SQL进行沟通,并把INSERT命令传给数据库;在运行之前,让我们看一下处理Session和Transaction的代码。

一个Session就是个单一的工作单元,我们假设HibernateSession和数据库事务是一一对应的,这是为了让我们的代码从底层的事务系统中脱离出来。

网络配图

sessionFactory.getCurrentSession()是做什么的呢?首先,只要你持有SessionFactory,可以在任何时候、任何地点调用这个方法,getCurrentSession()方法会返回“当前的”工作单元。

Session在第一次被使用的时候,即第一次调用getCurrentSession()的时候,其生命周期就开始,然后它被Hibernate绑定到当前线程中,当事务结束的时候,不管是提交还是回滚,Hibernate都会自动把Session从当前线程剥离,并且关闭它。

假若你再次调用getCurrentSession(),你会得到一个新的Session,并且开始一个新的工作单元,这种线程绑定(thread-bound)的编程模型(model)是使用Hibernate的最广泛的方式,因为它支持对你的代码灵活分层(事务划分可以和你的数据访问代码分离开来,在本教程的后面部分就会这么做)。

网络配图

好了,这一节的学习先到这里,后面章节中会继续学习Hibernate。我们学习方式是每一节学习一个知识点(每天花10分钟学习)。