Hibernate框架预览以及基础介绍
前言
从本节我们开始进入到对于Hibernate框架的学习,当前Hibernate框架还未正式发布6.0稳定版本,所以这里我们以5.4.12Final版本进行讲解。
Hibernate框架
Hibernate是一个对象/关系映射(ORM)解决方案, 对象关系映射或对象关系管理是将应用程序域模型对象映射到关系数据库表的编程技术,它是基于Java的ORM框架,用于将应用程序域对象映射到关系数据库表,Hibernate提供了对Java Persistence API(JPA)的实现或提供程序以及自身所提供的API,使其成为具有松散耦合优势的ORM工具的绝佳选择,我们可以利用Hibernate的持久性API用于CRUD操作,同时Hibernate框架也提供了一个选项,可以使用JPA注解以及基于XML的配置将POJO对象映射到关系数据库表。Java Persistence API(JPA)提供了用于管理应用程序中的关系数据的规范,JPA规范是通过javax.persistence包中的注解而定义的,使用JPA注解有助于我们编写独立于实现的代码,Hibernate通过使用JDBC与数据库进行交互。以下是Hibernate架构示意图:
Hibernate作为ORM解决方案,它作为Java应用程序数据访问层和关系数据库之间的桥梁,Java应用程序利用Hibernate API来加载,存储,查询等等其域数据。 作为JPA提供程序,Hibernate实现Java Persistence API规范,我们可以在下图中直观地看到JPA接口与Hibernate特定实现之间的关联:
SessionFactory (org.hibernate.SessionFactory)
应用程序域模型到数据库的映射的线程安全(且不可变)表示形式。它作为org.hibernate.Session实例的工厂,EntityManagerFactory和JPA的SessionFactory等效,此二者最终还是会会聚到同一个SessionFactory实现中,创建一个SessionFactory的开销非常大,因为SessionFactory维护所有Session中使用的服务,例如二级缓存,连接池,事务系统集成等,所以,对于任何给定的数据库,该应用程序应该仅具有一个关联的SessionFactory。
Session (org.hibernate.Session)
单线程且作为短生命周期对象在概念上为“工作单元”建模。它通过JPA中的EntityManager而表示,在背后,Hibernate会话包装了JDBC java.sql.Connection并充当org.hibernate.Transaction实例的工厂,它维护应用程序域模型的一般“可重复读取”持久性上下文(一级缓存)。
Transaction (org.hibernate.Transaction)
单线程且作为短生命周期对象用于划分应用程序的单个物理事务边界。它作为抽象API,以将应用程序与使用中的基础事务系统(JDBC或JTA)进行有效隔离。
Hibernate框架优点
【1】它消除了JDBC附带的所有模板代码,让我们更专注于业务逻辑。
【2】它提供对XML以及JPA注解的支持,使我们的代码实现完全独立。
【3】它提供与SQL类似的强大查询语言(HQL)且完全面向对象。
【4】它是Red Hat Community的一个开源项目,已在全球范围内使用,因此这是一个更好的选择,因为学习曲线很小,并且有大量的在线文档,并且可以在论坛中轻松获得帮助。
【5】它易于与其他Java EE框架集成,因此非常流行,Spring框架也提供了将Hibernate与Spring应用程序集成的内置支持。
【6】它支持使用代理对象进行延迟加载,并且仅在需要时才执行实际的数据库查询。
【7】它提供缓存有助于我们获得更好的性能。
Hibernate与JDBC相比有什么优势?
【1】它消除了JDBC API附带的许多模板代码,更清晰易读。
【2】它支持继承,关联和集合,而JDBC API不提供这些功能。
【3】它隐式提供事务管理,实际上,大多数查询无法在事务外部执行,而在JDBC API中,我们需要使用commit和rollback编写用于事务管理的代码。由于JDBC API会抛出SQLException,这是一个已检查的异常,因此我们需要编写许多try-catch块代码,在大多数情况下,它在每个JDBC调用中都是多余的, Hibernate封装了JDBC异常并抛出JDBCException或HibernateException未经检查的异常,因此我们不需要编写代码来处理它,同时Hibernate内置的事务管理消除了try-catch块的使用。
【4】它提供查询语言(HQL)且更加面向对象,与Java编程语言非常接近,而对于JDBC,我们需要编写本机SQL查询。
【5】它支持更好的性能缓存,而JDBC查询不会进行缓存,因此性能很低。
【6】它提供了一个选项,通过它我们也可以创建数据库表,而JDBC表必须存在于数据库中。
【7】它所提供的配置有助于我们将JDBC之类的连接以及JNDI DataSource用于连接池,这是企业应用程序中非常重要的功能,而JDBC API完全没有。
【8】它支持JPA注解,因此代码与实现无关,并且可以轻松地用其他ORM工具进行替换,JDBC代码与应用程序紧密结合。
总结
本节我们初步认识Hibernate框架的架构、优点以及对比JDBC其强大优势,从下一节我们开始正式进入Hibernate框架的学习。
Hibernate框架预览以及基础介绍的更多相关文章
- 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo
Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...
- Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo
Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...
- Android 10开发者预览版功能介绍
Android P的开发者预览版最亮眼的功能莫过于支持“刘海屏”等屏幕显示.同样在适配可折叠设备方面,Android Q的第一个开发者预览版也很“接地气”,谷歌早在去年11月就发布了对可折叠设备的支持 ...
- 玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo
杂家前文是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级.后来随着我自己的使用,越来越发现不出个升级版的demo是不行了.有时候就连我自己用这个demo测一些性能. ...
- Android Camera开发:使用GLSurfaceView预览Camera 基础拍照
GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而且在预览Camera上有其独到之处.独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就只有使用GLSur ...
- Hibernate框架(一)——总体介绍
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...
- 【转】玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo
http://blog.csdn.net/yanzi1225627/article/details/33339965 GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而 ...
- 玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo
GLSurfaceView是OpenGL中的一个类,也是能够预览Camera的,并且在预览Camera上有其独到之处. 独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就仅仅有使用GLS ...
- Hibernate框架(一)总结介绍
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...
随机推荐
- Scrapy定制命令开启爬虫
一.单爬虫运行 每次运行scrapy都要在终端输入命令太麻烦了 在项目的目录下创建manager.py(任意名称) from scrapy.cmdline import execute if __na ...
- 整理OD一些快捷键和零碎知识点
第一次记录:2019.9.15 完成了近期基本知识点的记录 第二次记录:2019.9.16 更新VB和的Delphi的汇编代码特点 介绍几个快捷键: Alt+B 断点编辑器,空格键可切换断点状态 ct ...
- RocketMQ 实战之快速入门
原文地址:https://www.jianshu.com/p/824066d70da8 最近 RocketMQ 刚刚上生产环境,闲暇之时在这里做一些分享,主要目的是让初学者能快速上手RocketMQ. ...
- 进击.net 三大框架
spring mybatis NHibernate
- Nito.AsyncEx 这个库
有一个非常聪明的小伙子 (我高度赞扬) 叫 Stephen Cleary ,他写了一个很棒的 Extension 集,共同参与开发的还有 Stephen Toub (他显然是经验丰富的),所以我充分信 ...
- doT 这个模板 是怎么实现的?
之前做过一个微信有关的站 模板用 doT 嗯 这个 用起来很 不错. 但是 它是怎么实现的,想过没有? ps:https://github.com/olado/doT 源码总共 140行. 第90行里 ...
- 基于OpenCV的双目视觉匹配测距系统
刚读研究生的时候,自己导师研究的方向是双目视觉,于是让自己研究OpenCV,折腾了几个月,算法上没啥突破,不过工程上还是折腾出了一个能用的小玩意,基于OpenCV实现了相机的标定.双目视觉图片的矫正. ...
- linux C++类中成员变量和函数的使用
1.undefined reference to XXX 问题原因 1)XXX所在的so库等未指定 2)XXX在类中实现的时候没有加上类::函数的格式 2. was not declared in t ...
- C#反射与特性(九):全网最全-解析反射
目录 1,判断类型 1.1 类和委托 1.2 值类型 1.3 接口 1.4 数组 2, 类型成员 2.1 类 2.2 委托 2.3 接口 [微信平台,此文仅授权<NCC 开源社区>订阅号发 ...
- Windows 10搭建Apache2.4 + PHP7 + MySQL环境
一.准备 1.资源 Apache https://www.apachelounge.com/download/ PHP http://windows.php.net/download#php-7.0 ...