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 我们就能够拿到详细的链接的数据库的对象,对数据库进行操作!

转载于:https://www.cnblogs.com/lytwajue/p/7262475.html

ORM进阶之Hibernate 的三大对象相关推荐

  1. ORM进阶之Hibernate中关系映射

    ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对 ...

  2. (Hibernate进阶)Hibernate系列——总结篇(九)

    这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

  3. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射--对象的三种关系 Hibernate框架基于ORM设 ...

  4. ORM(Object Relational Mapping,对象/关系映射)

    ORM(Object Relational Mapping,对象/关系映射) 在考虑O/R Mapping的时候,有两个概念是经常会接触的,那就是VO和PO. 所谓的VO,就是Value Object ...

  5. Django中的ORM进阶操作

    Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...

  6. atitit. orm框架的hibernate 使用SQLQuery createSQLQuery addEntity

    atitit. orm框架的hibernate 使用SQLQuery createSQLQuery addEntity 1. addEntity 对原生SQL查询执行的控制是通过SQLQuery接口进 ...

  7. Hibernate开发和对象状态

    Hibernate开发和对象状态 Hibernate开发三种方式 1.由Domain object -> mapping->db.(官方推荐) 2.由DB开始,用工具生成mapping和D ...

  8. (转)Hibernate框架基础——在Hibernate中java对象的状态

    http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...

  9. JavaScript 之 DOM中的三大对象

    下面是对JavaScript DOM中三大对象的整理,希望可以帮助到有需要的小伙伴. JavaScript 之 DOM中的三大对象 一.Document对象 1.Document对象是什么 Docum ...

最新文章

  1. 用Lean Pilots推动改进
  2. java 11-7String类里的方法的一些案例
  3. Jedis连接Redis单机版
  4. ABBYY FineReader 12中怎样禁用自动处理
  5. [译]Speeding up your PHP scripts
  6. 【模板】扩展中国剩余定理(EXCRT)
  7. Nginx 最全操作总结
  8. 关于 部署方面研究 Visual Studio 2013
  9. zookeeper伪集群(在一台机器上集群)
  10. 用CSS控制Table和div因撑开而变形
  11. smartctl command's RETURN VALUES
  12. pop错误 找不到服务器,POP3 连接事务失败 - 找不到客户端访问服务器
  13. 一张图学会python应用到excel-Python应用之------Excel操作
  14. rabbitmq的基本安装、配置,以及整合springboot,gradle的hello.demo
  15. [3-7]xp系统美化主题包下载每日更新【heizt整理】
  16. C语言实战--解二元一次方程
  17. 如何在浏览器中打开windows应用程序
  18. 推荐 4 款超好用的内网穿透工具,总有一款适合你
  19. MOEAD原理及Python实现、MOEAD实现、基于分解的多目标进化、 切比雪夫方法-(python完整代码)
  20. 做好社群营销的4点策略

热门文章

  1. php的变量都放在哪里,php变量一般放在哪个位置
  2. python为什么这么小_同样是 Python,怎么区别这么大
  3. 小米登录协议分析_小米温湿度传感器协议分析
  4. 【WebRTC---进阶篇】(六)SELECT网络模型
  5. 【音视频安卓开发 (四)】AndroidStudio项目配置权限、jni库路径、ABI
  6. linux查询设备文件信息失败怎么办,Linux下使用blkid命令查询设备及文件系统信息的方法...
  7. java 方式配置ssm,关于SSM以及Spring boot中对于Spring MVC配置的问题
  8. axture动画原型制作_Axure制作原型-基础操作
  9. 性能php 教程,提高PHP性能效率的几个技巧
  10. 交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?