zoukankan      html  css  js  c++  java
  • [Hibernate] Hibernate小结

    Hibernate是采用ORM模式实现数据持久层的java组件。它提供了高效的、强大的将java对象进行数据持久化操作的服务。利用hibernate,开发人员可以按照java对象的结果进行持久层的开发,并可以完成java对象和关系型数据库之间的转换和操作。

    hibernate的工作原理:

        1.创建Configeration实例

          根据它的构造方法将指定的配置信息(默认hibernate.cfg.xml)读到内存。一个Configeration 实例

          代表Hibernate 所有Java类到Sql数据库映射的集合。

        2.创建SessionFactory实例

          当使用Configeration实例创建了SessionFactory实例后,把Configeration 对象中的所有配置信息

          拷贝到SessionFactory的缓存中。SessionFactory的实例代表一个数据库存储源,创建后不在与

          Configeration 对象关联。SessionFactory是线程安全的,通常情况下,一个应用程序只有一个

          SessionFactory的实例。

        3.创建Session实例

          通过SessionFactory创建Session实例,session不是线程安全的,每个使用者应该用SessionFactory

          实例获得自己的session实例。获得session实例后就可以利用session的各种方法对对象进行持久化

          操作了。

        4.创建Transaction事务

          通过Session的beginTransaction()方法可以得到一个对象的实例。主要用于管理实务。一个事物对

          象可能会包括多个对数据库进行的操作。

    hibernate的缓存:为了提高系统性能,hibernate也使用了缓存机制。在hibernate框架中,主要包含两个

                     方面的缓存,一级缓存和二级缓存。hibernate缓存的作用主要表现在以下两个方面:

                     1 通过主键(ID)加载数据的时候 2 延迟加载中。

    一级缓存:hibernate的一级缓存是由session提供的,因此它只存在session的生命周期中。也就是说

              session关闭的时候该session所管理的一级缓存也随之被清除。hibernate的一级缓存是

              session所内置的,不能被卸载,也不能进行任何配置。一级缓存采用的是Key-Value的MAP方式

              来实现的。在缓存实体对象时,对象的主关键字ID是MAP的Key,实体对象就是对象的值。所以说

              一级缓存是以实体对象为单位进行存储的。访问的时候使用的是主键关键字ID。一级缓存使用的

              是自动维护的功能。但可以通过session提供的手动方法对一级缓存的管理进行手动干预。

              evict()方法用于将某个对象从session的一级缓存中清除。clear()方法用于将session缓存中的

              方法全部清除。

        

    二级缓存:SessionFactory提供的缓存机制可以将缓存分为内置缓存和外置缓存。内置缓存存放了映

              射文件中数据的副本和预定义SQL语句。SessionFactory的外置缓存就是我们的二级缓存

              。它是一个可配置的插件,默认情况下SessionFactory不会启用这个插件,外置缓存的数据是数

              据库数据的副本。外置缓存的介质可以是内存或者硬盘。二级缓存的实现原理与一级缓存是一样

              的。也是通过Key-Value的Map来实现对对象的缓存。二级缓存是作用在SessionFactory范围内的

              。因此它比一级缓存的范围更广。它可被所有的Session对象所共享。需要注意的是放入缓存中

              的数据不能有第三方的应用对数据进行修改。

    Hibernate实体对象的生命周期

         实体对象的生命周期主要存在三种不同状态:瞬态、持久态和游离态。

         瞬态:表示该实体对象在内存中是自由自在的。与数据库中的数据没有任何关系。与session没有任何

               关系,也就是没有通过session的实例对其任何持久化的操作。

         持久态:该实体对象处于hibernate框架所管理的状态。也就是说这个对象是与session的实体对象相

                 关的。处于持久态的实体对象的特征就是其所作的任何的变更操作都将被Hibernate持久化到

                 数据库中。我们可以说持久态的周期与其对应的session的周期息息相关的。hibernate会依

                 据处于持久态的实体对象的属性变化而改变数据库中的对应记录。

         游离态:处于持久态的实体对象,当不再与其对应的session对象相关联时,就处于游离态。

  • 相关阅读:
    schema约束和引入
    第一天
    github pages搭建网站(三)
    git安装和使用(二)
    使用github(一)
    命名实体识别总结
    约瑟夫环
    标准化和归一化
    cumsum累计函数系列:pd.cumsum()、pd.cumprod()、pd.cummax()、pd.cummin()
    pandas处理时间序列(4): 移动窗口函数
  • 原文地址:https://www.cnblogs.com/kentyouyou/p/2966842.html
Copyright © 2011-2022 走看看