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分钟学习)。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2017-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

学习纲要:Git & GitHub

811
来自专栏前端黑板报

127.0.0.1 vs 0.0.0.0 vs localhost vs 主机IP

说明:上一篇写完《当你输入URL到页面显示经历了什么--URL到IP地址》之后读了好几本关于网络的书(当然都是跳着读),发现期初想的太简单,还是遗漏了许多,后面...

5289
来自专栏大魏分享(微信公众号:david-share)

咦,如何通过容器同时实现:灰度发布+滚动发布?

(1) 蓝绿部署:不停止老版本,额外搞一套新版本,等测试发现新版本OK后,删除老版本。

8494
来自专栏北京马哥教育

Linux操作系统基础知识学习

Linux操作系统概述 Q1.什么是GNU?Linux与GNU有什么关系? A: 1)GNU是GNU is Not Unix的递归缩写,是自由软件基金会...

39410
来自专栏树根的专栏

为 markdown 添加图床

本文介绍了使用腾讯云的 COS 来进行图片的存储,这样就可以随心地将图片存储在腾讯云上了,解决了markdown 文件过大的问题。

1.9K1
来自专栏大魏分享(微信公众号:david-share)

几种微服务部署方式对比与总结

在项目迭代的过程中,不可避免需要”上线“。上线对应着部署,或者重新部署;部署对应着修改;修改则意味着风险。 目前有很多用于部署的技术,有的简单,有的复杂;有的得...

3816
来自专栏奇梦博客

美化XiunoBBS主题高亮插件,高亮风格颜色 原创 CSS/SASS XiunoBBS

1371
来自专栏耕耘实录

再提一下Linux系统中的MD5校验

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

2095
来自专栏FreeBuf

Linux内核中的递归漏洞利用

6月1号,我提交了一个linux内核中的任意递归漏洞。如果安装Ubuntu系统时选择了home目录加密的话,该漏洞即可由本地用户触发。如果想了解漏洞利用代码和短...

2896
来自专栏全华班

springcloud学习手册-Ribbon(第一节)

导读 | 介绍什么是Ribbon,主要概念和内容 前几天学习了Eureka ,今天咱们再来学习springcloud 的第三部分内容Ribbon 那什么是 Ri...

4216

扫码关注云+社区

领取腾讯云代金券