前言

从本节我们开始进入到对于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. 关于pycharm中输出的内容不全的解决办法

    很多时候我们会发现有的时候输出的结果特别多的时候,会在最后输出时用...代替,最后输出一个总长度,那要咋么弄咧? import pandas as pd # 设置显示的最大列.宽等参数,消掉打印不完全 ...

  2. Java入门 - 高级教程 - 08.Applet

    原文地址:http://www.work100.net/training/java-applet.html 更多教程:光束云 - 免费课程 Applet 序号 文内章节 视频 1 概述 2 Apple ...

  3. MyBatis4——一对一、一对多关联查询

    关联查询: 一对一: 1.业务扩展类     核心:用resultType指定的类的属性包含多表查询的所有字段. 2.resultMap     通过添加属性成员建立两个类之间的连接 <!--利 ...

  4. ii

    char a[10], b[10], c[10], d[10],e[10],f[10],g[10],h[10]; scanf("%s %s %s %s", a, b, c, d); ...

  5. 文艺平衡树(区间splay)

    文艺平衡树(luogu) Description 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列. 其中需要提供以下操作:翻转一个区间,例如原有序序列是 5\ 4\ 3\ 2\ ...

  6. Shell常用命令之yum

    介绍 yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 ...

  7. Hibernate(四)

    ==================================投影(查询)=============================投影查询:查询一个持久化类的一个或多个属性值    1.将每条 ...

  8. 优雅地关闭worker进程

    关闭nginx两种方式 nginx -s stop  立即停止nginx进程  nginx -s quit 优雅地关闭worker进程 开始优雅的关闭worker进程后 01设置定时器 worker_ ...

  9. linux安装mariadb

    yum install -y mariadb-server 账号:root 密码:空 本地登录:mysql -u root -p 远程登录:mysql -h 192.168.0.1 -u root - ...

  10. SpringMVC基础(二)_文件上传、异常处理、拦截器

    实现文件上传 实现文件上传,需要借助以下两个第三方 jar 包对上传的二进制文件进行解析: commons-fileupload commons-io form表单的 enctype 取值必须为:mu ...