zoukankan      html  css  js  c++  java
  • Hibernate总结

    1. 持久化与ORM
    2. Hibernate的优点
    3. 实体关系映射文件
    4. Hibernate五大核心接口
    5. Hibernate在性能提升上的常用方法
    6. Hibernate工作原理

    一、持久化与ORM


      持久化:数据持久化一般指将内存中的数据或对象存储到可长期保存的某种介质上,以使其存活时间比创建该对象的进程时间长。

      在对数据或对象持久化后,可以重新获取并能保证在没有对其进行任何改动的情况下,与持久化之前一样,

      一般持久化的实现通过各种关系数据库来完成。

      ORM:即对象—关系映射(Object/Relation Mapping,ORM)是为了解决面向对象与关系数据库存在的互不匹配现象而产生的技术。

      业务实体在内存中表现为对象,在数据库中表现为关系数据。ORM通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

      本质就是将数据表映射为对象类,从一种形式转换到另外一种形式。

      使用ORM技术,将在数据库中直接进行的原始操作演变为对类的属性和方法的操作,而间接更改数据表的数据。

      Hibernate映射文件:其是实体对象与数据库关系表之间相互转换的重要依据,一般来说,一个映射文件对应数据库中一个关系表,关系表之间的关联关系也在映射文件中进行配置。 

    二、Hibernate的优点


    1. Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。
    2. Hibernate是一个和JDBC密切相关联的框架,但是和使用它的Java程序没有任何关系,也不存在兼容性问题。
    3. 对JDBC的轻量级封闭,内存消耗少,运行效率高。 

    三、实体关系映射文件


    1. 类—表映射
    2. 主键映射
    3. 字段映射  

    四、Hibernate五大核心接口


    1. Configuration接口
      • 负责管理Hibernate的配置信息并启动Hibernate,创建SessionFactory对象。
      • 在Hibernate启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
      • Hibernate运行时需要获取一些底层实现的基本信息:数据库密码、URL、用户名等。
      • Configuration config = new Configuration();
    2. SessionFactory接口
      • SessionFactory接口负责初始化Hibernate。
      • 它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式
      • 应用程序从SessionFactory(会话工厂)那里获得Session(会话)实例。
      • 在多个应用线程间进行共享。
      • 通常情况下,整个应用只有唯一的一个会话工厂,如在应用初始化时被创建。然而,如果使用Hibernate访问多个数据库,需要对每一个数据库使用一个会话工厂。
    3. Session接口
      • Session接口是Hibernate使用最多的接口。
      • Session接口负责执行被持久化对象的CRUD操作。
      • Session代表与数据库之间的一次操作,它不是线程安全的
      • Session session = sessionFactory.openSession();
    4. Transaction接口
      • 是Hibernate的数据库事物接口,它对底层的事物接口作了封装,负责事物的相关操作。
      • Transaction trans = session.beginTransaction();
    5. Query和Criteria接口
      • 允许用户在数据库上执行查询并控制查询如何执行。
      • 查询语句使用HQL或者本地数据库的SQL语言编写。
      • Query query = session.createQuery("from User");

    五、Hibernate在性能提升上的常用方法


    1. Lazy Load

      Lazy Load是常用的一种提升性能的方法。在不采用Lazy Load的情况下,Hibernate在获取一个PO的时候,将同时获取PO中的属性,PO中的集合及集合中对象的属性、集合。如果对象的关联结构有深层次的话,最后整个库可能都被加载出来了,而在实际使用中往往可能只需要用到PO中的一两个属性而已。在Hibernate3以后,默认的lazy就已经设置为true了,这个时候包括PO中的属性都是采用Lazy Load的方式,只有在调用到这个属性时才会从缓存或数据库中加载。

      不过不要把所有字段都在用Lazy Load的方式。对于一些基本属性的字段,建议将其lazy设置为false,而对于一些可能需要消耗内存的字段,如clob这样的字段,建议将其lazy设置为true,对于集合,则全部设置为lazy=true。

      2. Cache

      Cache是在提升系统性能方面常用的方法。Hibernate中对于Cache有一级缓存和二级缓存的概念。一级缓存是必须的,位于Session部分;二级缓存则不是必须的,由开发人员自行制定。二级缓存能够明显地提高系统的性能,当然,同时也会更加消耗内存。可以通过配置文件来指定内存中能够加载的最多元素,这有利于避免消耗过多的内存。

      二级缓存的设置在Hibernate中非常简单,只需要在相应的hbm.xml中增加Cache元素,指明使用何种策略,如read-only、read-write等,也可以通过直接在hibernate.cfg.xml中增加class-eache的方式来进行全局指定。

      3. 高效的查询语句

      4. 配置

    六、Hibernate工作原理如下


    1. 读取并解析配置文件。
    2. 读取并解析映射信息,创建SessionFactory。
    3. 打开Session。
    4. 创建事物Transaction。
    5. 持久化操作。
    6. 提交事务。
    7. 关闭Session。
    8. 关闭SessionFactory。
  • 相关阅读:
    leetcode 576. Out of Boundary Paths 、688. Knight Probability in Chessboard
    leetcode 129. Sum Root to Leaf Numbers
    leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
    leetcode 402. Remove K Digits 、321. Create Maximum Number
    leetcode 139. Word Break 、140. Word Break II
    leetcode 329. Longest Increasing Path in a Matrix
    leetcode 334. Increasing Triplet Subsequence
    leetcode 403. Frog Jump
    android中webView加载H5,JS不能调用问题的解决
    通过nginx中转获取不到IP的问题解决
  • 原文地址:https://www.cnblogs.com/zhengbin/p/5578915.html
Copyright © 2011-2022 走看看