zoukankan      html  css  js  c++  java
  • Hibernate 框架

      首先,我们先来了解一下什么是 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 框架。

  • 相关阅读:
    Python中的unittest和logging
    android短彩信附件机制
    Android Mms之:深入MMS支持
    Android 源码阅读之SMS,MMS
    深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(一,添加附件)
    使用adb命令对手机进行截屏保存到电脑,SDCard
    Android中检测字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(二)
    解决新建短信时,输入“+86”,然后输入联系人名字“1”,按删除键之后,联系人变为“1”,删除操作为达到预期结果
    解决:People下面选择分享可见联系人,选择多个联系人后通过短信分享,短信中只显示一个联系人
    解决:短信添加录音附件,录音,没有录音时间限制,超出彩信最大限制也正常录音
  • 原文地址:https://www.cnblogs.com/HHHY/p/11320534.html
Copyright © 2011-2022 走看看