• Hibernate基础知识介绍


    一、什么是Hibernate?
    Hibernate,翻译过来是冬眠的意思,其实对于对象来说就是持久化。持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
    持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC就是一种持久化机制。文件IO也是一种持久化机制。
    我们从三个角度理解一下Hibernate:
    1、Hibernate是对JDBC进一步封装
    原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。
    2、从分层的角度来看
    我们知道非常典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。
    3、Hibernate是一个ORM(对象关系映射)框架。

    ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。ORM 采用元数据来描述对象-关系映射细节, 元数据通常采用 XML 格式, 并且存放在专门的对象-关系映射文件

    中。ORM的基本框架如下:




    二、Hibernate的核心组件

    在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml,一般使用xml来进行配置)和映射文件(***.hbm.xml),把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据表,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
    除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
    1、Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
    2、SessionFactory接口:产生Session实例工厂。
    3、Session接口:用来操作PO。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
    4、Query接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
    5、Transaction接口:用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。


    三、JavaBeans在Hibernate中存在三种状态

    持久化对象可以是普通的Javabeans,惟一特殊的是它们与(仅一个)Session相关联。为了在系统中能够找到所需对象,需要为每一个对象分配一个唯一的标识号。在关系数据库中称之为主键,而在对象术语中,则叫做对象标识(Object identifier-OID). JavaBeans在Hibernate中存在三种状态:
    1.临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联关系时,那么这个JavaBeans对象就称为临时对象(Transient Object)。

    1)在使用代理主键的情况下, OID 通常为 null

    2)不处于 Session 的缓存中
    3)在数据库中没有对应的记录


    2.持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object)。

    1)OID 不为 null
    2)位于 Session 缓存中
    3)若在数据库中已经有和其对应的记录, 持久化对象和数据库中的相关记录对应
    4)Session 在 flush 缓存时, 会根据持久化对象的属性变化, 来同步更新数据库
    5)在同一个 Session 实例的缓存中, 数据库表中的每条记录只对应唯一的持久化对象


    3.脱管状态(detached):在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成脱管状态(Detached Object),可以被应用程序的任何层自由使用。

    1)OID 不为 null
    2)不再处于 Session 缓存中
    3)一般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录


    四、Hibernate的基本运行过程


    Hibernate的运行过程如下:
    1、应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
    2、从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作结果到数据库中。


    五、Hibernate的优/缺点:
     优点:
    1、数据库对象化
          以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加具有层次性。
    2、移植性
          因为Hibernate做了持久层的封装,我们并没有直接操纵数据库,代码都具有可复用性。
    3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。
          Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。
    4、提高效率,提高生产力。
     
    缺点:
    1、使用数据库特性的语句,将很难调优
    2、对大批量数据更新存在问题
    3、系统中存在大量的攻击查询功能



  • 相关阅读:
    PHP扩展开发报错解决[error: ‘PHP_FE_END’ undeclared here (not in a function)] .
    php 如何获取一个变量的名字
    php 使用异或(XOR)加密/解密文件
    php 常用自定义方法
    使用onbeforeunload事件检测窗口是否刷新或关闭
    mysql 优化 insert 性能
    《高级软件测试》11.28.全员配置环境并学习测试环境的使用
    《高级软件测试》11.27.小组开会
    《高级软件测试》11.25.黑盒测试实践作业及任务划分
    第一周小组博客作业
  • 原文地址:https://www.cnblogs.com/kangsir/p/6653260.html
Copyright © 2020-2023  润新知