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

Java学习网(www.javalearns.com)提拱      

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

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

网络配图

代码如下:

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和数据库事务是一一对应的,这是为了让我们的代码从底层的事务系统中脱离出来。

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

网络配图

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

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

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

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

网络配图

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

请↙↙↙点击“阅读原文” ….