首先,我们先来了解一下什么是 Hibernate 框架。

什么是 Hibernate 框架?

  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

什么是ORM?

  ORM ( Object Relational Mapping ) 是对象到关系的映射,是一种解决实体对象与关系型数据库相互匹配的技术,其实现思想就是将数据库中的数据表映射为对象,对关系型数据以对象的形式进行操作。

  ORM在业务逻辑层与数据库层之间充当桥梁的作用,它对对象 ( Object ) 到关系数据库 ( Relational ) 进行映射 ( Mapping ) 。如图:

  Hibernate 主要通过持久化类 ( *.java ) 、Hibernate 映射文件 ( *.hbm.xml ) 及 Hibernate 配置文件 ( hibernate.cfg.xml ) 与数据库进行交互。

  持久化类:操作对象,用于描述数据表的结构。

  映射文件:指定持久化类与数据表之间的映射关系。

  配置文件:用于指定 Hibernate 的属性信息。

优点:

  ①、Hibernate 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

  ②、Hibernate 是一个基于 JDBC 的主流持久化框架, 是一个优秀的 ORM 实现,它很大程度的简化了 dao 层的编码工作。

  ③、跨数据库平台。 Hibernate 自身支持多种常用数据库。

Hibernate 常用接口:

  1、Configuration 接口:

    Configuration 接口用于加载 Hibernate 的配置文件及启动 Hibernate ,创建 SessionFactory 实例。

Configuration cfg = new Configuration().configure();    //加载 Hibernate 配置文件

SessionFactory sessionFactory = cfg.buildSessionFactory();    //创建SessionFactory 实例

  2、SessionFactory 接口:

    SessionFactory 接口用于对 Hibernate 进行初始化操作。它是一个 Session 工厂,Session 对象从此接口获取。通常一个项目只有一个 SessionFactory 对象,因为它对应一个数据库;如果项目中存在多个数据库,可以存在多个 SessionFactory 对象。但要注意 SessionFactory 是一个重量级对象,其创建比较耗时、占用资源,它是线程安全的。

Session session = sessionFactory.openSession();        //打开一个新的 Session 对象

或者

Session session = sessionFactory.getCurrentSession();        //获得一个与线程绑定的 Session 对象

  3、Session 接口

    Session 接口是操作数据库的核心对象,它负责管理所有与持久化相关的操作,也称为 CRUD 操作。它是非线程安全的,应避免多个线程共享同一个 Session ,其创建不会消耗太多资源。

  4、Transaction 接口

    Transaction 接口用于对事务的相关操作,如事务的提交、回滚等操作。

  5、Query 接口

    Query 接口主要用于对数据库的查询操作,功能十分强大,其单检索、分页查询等诸多方法为程序开发提供了方便。其中,面向对象查询语言 HQL 通过此接口进行实现。

  6、Criteria 接口

    Criteria 接口同样用于对数据的查询操作,它为 Hibernate 的另一种查询方式 QBC 提供了方法。

Hibernate 实例状态

  Hibernate 的实例状态分为三种,分别是: Transient ( 瞬时状态 ) 、 Persistent ( 持久状态 )  、 Detached ( 脱管状态 )。

  1、Transient ( 瞬时状态 )

    如果一个实例对象通过 new 关键字进行创建,并没有纳入 Hibernate Session 的管理之中,就被认定为是 Transient ( 瞬时状态 )。 如果 Transient ( 瞬时状态 )对象在程序开发中没有被引用,则将被垃圾回收器回收,其特征在于数据库中没有与之匹配的数据,也没有在 Hibernate 缓存管理之内。

  2、Persistent ( 持久状态 )

    处于 Persistent ( 持久状态 ) 的对象在数据库中有与之匹配的数据, 在 Hibernate 缓存的管理之内。 当持久对象有任何改动时, Hibernate 在更新缓存时将对其进行更新;如果 Persistent ( 持久状态 ) 变成了 Transient ( 瞬时状态 ) ,Hibernate 同样会自动对其进行删除操作, 不需要手动检查数据。

  3、Detached ( 脱管状态 )

    Persistent ( 持久状态 ) 对象在 Session 关闭后将变为 Detached ( 脱管状态 ),其特征在于数据库中存在与之匹配的数据,但并没有在 Session 的管理之内。

  实体对象的状态在 Hibernate 中是瞬息万变的。

  这一篇文章,先让我们了解一下 Hibernate 的基本原理、概念和常用接口。熟悉这些原理概念有助于我们更好的理解 Hibernate 框架 和使用它。

  下一篇文章我将会写一下 Hibernate 的入门。 如何使用 Hibernate 框架。

Hibernate 框架的更多相关文章

  1. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  2. Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)

    引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...

  3. 2.0、Hibernate框架的简单搭建

    一.Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句 ...

  4. 【Hibernate框架】对象的三种持久化状态

    一.综述 hibernate中的对象有三种状态,分别是TransientObjects(瞬时对象).PersistentObjects(持久化对象)和DetachedObjects(托管对象也叫做离线 ...

  5. hibernate框架int和Integer类型区别

    hibernate 框架在定义实体时,int类型最好定义为Inttger类型,因为在注入时int是值类型不允许为空.

  6. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  7. ECLIPSE/JAVAWEB (二)三大框架之Hibernate框架 持续更新中...

    (一)发展历史 在Struts框架中使用jdbc连接来读写数据库,我们最常见的就是打开数据库连接.使用复杂的sql语句进行读写.关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常繁琐的过程. ...

  8. Hibernate框架简单应用

    Hibernate框架简单应用 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...

  9. Hibernate框架(未完待续······)

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

  10. Hibernate框架之get和load方法的区别

    我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get ...

随机推荐

  1. Mybatisの常见面试题

    Mybatis -面试问题 最近准备系统的学一下Mybatis,之前只有粗略的看了下,选了十个常见的面试题 1. #{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换. Mybatis ...

  2. 爱,死亡和机器人(Love,Death&Robots)

    从我自己的角度来讲,我真的是很喜欢这部短片,奇幻,科幻,喜剧交叉在一起构成了这18部短片.精彩绝伦,我只能这么去形容. 但是有没有不足呢?客观的来说,也存在不足,过度的吹捧使得有些人神话了它,认为立意 ...

  3. 简单的 自动生成 二维码 PHP 方法

    方法一:<style type="text/css">.eweima{    width:200px; height:200px; margin:auto;}</ ...

  4. iOS13中presentViewController的问题

    iOS13中presentViewController的问题 更新了Xcode11.0 beta之后,在iOS13中运行代码发现presentViewController和之前弹出的样式不一样. 会出 ...

  5. .Net高级编程-自定义错误页 web.config中<customErrors>节点配置

    错误页 1.当页面发生错误的时候,ASP.Net会将错误信息展示出来(Sqlconnection的错误就能暴露连接字符串),这样一来不好看,二来泄露网站的内部实现信息,给网站带来安全隐患,因此需要定制 ...

  6. WinForm控件之【CheckBox】

    基本介绍 复选框顾名思义常用作选择用途,常见的便是多选项的使用: 常设置属性.事件 Checked:指示组件是否处于选中状态,true为选中处于勾选状态,false为未选中空白显示: Enabled: ...

  7. idea万能快捷键(alt enter),你不知道的17个实用技巧!!!

    说明 IDEA里有一个万能快捷键(alt enter),功能非常强大,同一个快捷键,可以根据不同的语境提示你不同的操作, 很多人可能还不了解这些功能,在处理代码的时候还手动处理,了解这些技巧之后,你编 ...

  8. 洛谷 P1463、POI2002、HAOI2007 反素数

    题意: 求最小的$x\in[1,N]$,使得$x$为$g(x)$最大的数 中最小的一个. 分析: 1.$x$不会有超过$10$个不同质因子.理由:$2 \times 3\times 5...\time ...

  9. win10修改桌面图标之间的距离

    操作方法01首先用Win+R组合键打开运行界面,在界面的输入框中输入regedit命令,打开注册表. 02在打开的注册表界面中我们找到HKEY_Current_User下的Control Panel文 ...

  10. C#窗体实现打开关闭VM虚拟机

    vixclass.cs//定义开机.关机等函数 using System; using System.Collections.Generic; using System.Linq; using Sys ...