前言

从本节我们开始进入到对于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框架预览以及基础介绍的更多相关文章

  1. 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  2. Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  3. Android 10开发者预览版功能介绍

    Android P的开发者预览版最亮眼的功能莫过于支持“刘海屏”等屏幕显示.同样在适配可折叠设备方面,Android Q的第一个开发者预览版也很“接地气”,谷歌早在去年11月就发布了对可折叠设备的支持 ...

  4. 玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo

    杂家前文是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级.后来随着我自己的使用,越来越发现不出个升级版的demo是不行了.有时候就连我自己用这个demo测一些性能. ...

  5. Android Camera开发:使用GLSurfaceView预览Camera 基础拍照

    GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而且在预览Camera上有其独到之处.独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就只有使用GLSur ...

  6. Hibernate框架(一)——总体介绍

    作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...

  7. 【转】玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo

    http://blog.csdn.net/yanzi1225627/article/details/33339965 GLSurfaceView是OpenGL中的一个类,也是可以预览Camera的,而 ...

  8. 玩转Android Camera开发(三):国内首发---使用GLSurfaceView预览Camera 基础拍照demo

    GLSurfaceView是OpenGL中的一个类,也是能够预览Camera的,并且在预览Camera上有其独到之处. 独到之处在哪?当使用Surfaceview无能为力.痛不欲生时就仅仅有使用GLS ...

  9. Hibernate框架(一)总结介绍

    作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...

随机推荐

  1. svn和 android adt的 eclipse插件更新地址

    下边这两个插件的更新地址是每次安装android开发环境时都能用到的,为了方便在这里记录一下. android adt: http://dl-ssl.google.com/android/eclips ...

  2. NC使用教程

    NetCat参数说明: 一般netcat做的最多的事情为以下三种: 扫描指定IP端口情况 端口转发数据(重点) 提交自定义数据包 1.扫描常用命令. 以下IP 处可以使用域名,nc会调用NDS解析成I ...

  3. 整理OD一些快捷键和零碎知识点

    第一次记录:2019.9.15 完成了近期基本知识点的记录 第二次记录:2019.9.16 更新VB和的Delphi的汇编代码特点 介绍几个快捷键: Alt+B 断点编辑器,空格键可切换断点状态 ct ...

  4. 玩转Django2.0---Django笔记建站基础五(模板)

    第五章 模板 Django作为web框架,需要一种很便利的方法去动态地生成HTML网页,因此有了模板这个概念.模板包含所需HTML的部分代码以及一些特殊语法 Django可以配置一个或多个模板引擎(甚 ...

  5. 用canvas绘制标准的五星红旗

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 使用doxygen

    Getting started with Doxygen 可执行文件doxygen是解析源文件并生成文档的主程序. 另外, 也可以使用可执行文件doxywizard, 是用于编辑配置文件, 以及在图形 ...

  7. generic

    是什么 算法实现时保有待定类型的参数. 为什么 一份代码用于多个算法(当算法中只数个类型不同的时候) 可重新性 很多常用算法和容器数据结构都可以type-generic的方式实现 why not 许多 ...

  8. Linux开发环境准备(一)

    工欲善其事,必先利其器 今天是腊月廿九,明天春节.我想着在今天对2019年所学到的东西做下总结. 从操作系统的安全性,系统代码是否开源,对开发人员的友好性,以及学习和工作的需求,我最终选择了Linux ...

  9. OpenCV各种绘制调用:线,矩形,圆,椭圆,文字

    OpenCV提供了各种绘制接口,可以往图片里画各种东西,这种功能可以为以后在图像上标记一些信息方便调试 // drawcall.cpp: 定义控制台应用程序的入口点. // #include &quo ...

  10. Spring 框架初学

    一 .   spring IOC, DI: 将原来有程序员建立类的对象工作交由spring来操作: 从外部来看: 将各个类以bean 的方式配在spring容器的配置文件中(application.x ...