ORM进阶之 ORM简单介绍

ORM进阶之Hibernate
简单介绍及框架搭

ORM进阶之Hibernate 的三大对象

我们在上一篇博客中讲到了怎样搭建一个Hibernate框架, 提到Hibernate我们就不得不说他的三大对象,Configuration,SessionFactory , Session 。下边我们就分别来解释一下这三大对象!

Configuration对象

Configuration类用来管理我们的配置文件的信息的,通过它。我们能够通过创建一个configuration实例来管理对应的配置文档,可是通常我们仅仅创建一个configuration实例。

创建过程
Configuration cfg =new Configuration().configure();   我们也能够在configure()方法中指定hbm.xml文件的路径。

SessionFactory对象

SessionFactory
顾名思义,他是创建session的工厂。用来创建session对象,令你感到奇怪的是SessionFactory并非轻量级的。实际上它的设计者的意图是让它能在整个应用中共享。典型地来说。一个项目通常仅仅须要一个SessionFactory就够了,可是当你的项目要操作多个数据库时。那你必须为每一个数据库指定一个SessionFactory。

SessionFactory在Hibernate中实际起到了一个缓冲区的作用,它缓冲了Hibernate自己主动生成的SQL语句和一些其他的映射数据,还缓冲了一些将来有可能反复利用的数据。

一个SessionFactory实例相应一个数据存储源。应用从SessionFactory中获得Session实例。SessionFactory它是线程安全的,这意味着它的同一个实例能够被应用的多个线程共享。

SessionFactory的缓存可分为两类:内置缓存和外置缓存。

SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息、同一时候也缓存了Hibernate自己主动生成的SQL语句等;

SessionFactory的外置缓存是一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。

外置缓存能存放大量数据库数据的拷贝。外置缓存的物理介质能够是内存或者硬盘

Session对象

Session对象的简单介绍

Session接口对于Hibernate   开发者来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类。创建和销毁它都不会占用非常多资源。

这在实际项目中确实非常重要,由于在客户程序中,可能会不断地创建以及销毁Session对象,假设Session的开销太大。会给系统带来不良影响。

但值得注意的是 Session对象是非线程安全的,因此在你的设计中。最好是一个线程仅仅创建一个Session对象。

   在Hibernate的设计者的头脑中,他们将session看作介于数据连接与事务管理一种中间接口。我们能够将session想象成一个持久对象的缓冲区。Hibernate能检測到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,由于它包括这一些持久层相关的操作,诸如存储持久对象至数据库,以及从数据库从获得它们。请注意,Hibernate   的session不同于JSP应用中的HttpSession。当我们使用session这个术语时,我们指的是Hibernate中的session,而我们以后会将HttpSesion对象称为用户session。

怎样获得Session对象

首先创建SessionFactory对象,应用server假设訪问多个数据源时,则应该产生多个SessionFactory;可是只为了服务与某个请求时,不要创建一个新的SessionFactory,由于创建SessionFactory须要消耗大量的资源.然后依据SessionFactory再创建Session对象 创建session对象有两种方式,各自是openSession()和getCurrentSession(),openSession,打开须要关闭。可是getCurrentSession
是不须要关闭的。他会自己主动的关闭!

<span style="font-size:18px;">Session session=sessionFactory.openSession();

Transaction tx;
try{
tx=session.beginTransaction();//開始一个事务
.......//运行事务
tx.commit();
}catch(Exceptione){//假设出现异常就撤消事务
if(tx!=null)
tx.rollback();
throw e;
}
Finally{ //无论事务运行成功与否,最后都关闭Session而且放在finally中以提高安全性
session.close();
}</span>

我们先通过configuration 读取数据库的一系列的配置文件,然后通过这一系列的配置信息。创建一个创建数据库连接的工厂SessionFactory,然后通过SessionFactory 我们就能够拿到详细的链接的数据库的对象,对数据库进行操作!

最新文章

  1. 4 Best Time to Buy and Sell Stock III_Leetcode
  2. 关于jQuery的inArray 方法介绍
  3. 提取SD卡中的图片
  4. GDB中文手册
  5. ant 自动构建血泪史
  6. Codeforces Round #150 (Div. 2)
  7. 团队项目--“我爱淘”校园二手书店 NABC分析
  8. ImagePacker
  9. debug(fmt,args...)调试
  10. page-object使用(2)---elements
  11. Jquery 获取日期date()对象
  12. CI URL 辅助函数 url helper
  13. 分享:json2.js源代码解读笔记
  14. C#依据进程名称获取进程的句柄?
  15. [原]逆向iOS SDK -- _UIImageAtPath 的实现(SDK 6.1)
  16. 微信小程序后台音乐播放注意事项
  17. Java中的NIO基础知识
  18. Effective Java 第三版——50. 必要时进行防御性拷贝
  19. 【Android】Android开源项目精选(一)
  20. CentOS最小安装无法使用ifconfig命令

热门文章

  1. memcahced部署
  2. Android技巧:查看当前界面对应的活动
  3. 【spfa】bzoj1295 [SCOI2009]最长距离
  4. 【二分图判定】hdu3478 Catch
  5. 【OpenJudge9268】【递推】酒鬼
  6. iOS中用json接收图片的二进制流
  7. iOS键盘监听事件
  8. ctags 小记
  9. 事务的实现就是利用数据库锁(行锁,表锁等),且db上锁,都是在操作之前上锁
  10. 【FTP】java FTPClient 文件上传内容为空,文件大小为0