1. 明确Hibernate是一个实现了ORM思想的框架,它封装了JDBC,是程序员可以用对象编程思想来操作数据库。

2. 明确ORM(对象关系映射)是一种思想,JPA(Java Persistence API)是JDK实现ORM思想的规范(一套接口),Hibernate又是这套接口的具体实现。

3. 明确Hibernate程序四要素:实体类(POJO类)、映射文件(*.hbm.xml)、主配置文件(hibernate.cfg.xml)和调用Hibernate的程序。

4. 明确映射文件中重点关注Hbiernate常用的六种内置主键生成策略:increment、identity、sequence、native、uuid、assigned生成策略。

5. 明确调用Hibernate程度时,session的方法必须在事务之内执行,因为session是操作缓存中的数据,只有提交了事务之后,缓存中的数据才能写到数据库中。

6. 明确Hibernate对单表的增删改查操作,注意查询的时候get与load的区别,注意底层增删改的执行顺序不一定同代码的顺序相同,如果想用一定的顺序执行,需要在适当的位置添加刷新点,以使刷新点之前的代码先执行。

7. 明确Hbiernate的四个重要接口:

  1. Configuration接口:用于加载主配置文件和映射文件,以实现对Hibernate的启动。

  2. SessionFactory接口:用于开启Session对象,SessionFactory是一个重量级对象(开销大)、单例对象,但同时是线程安全的(因为大多数成员变量是final的),由Configuration对象开启,应用结束时自动关闭。

  3. Session接口:用于向应用程序提供操作数据库的方法,Session是一个轻量级对象、多例对象(一个用户一个Session对象)、线程不安全的(因为一个用户的多个事务会同时对Session对象进行访问,引起并发问题);

  Session的使用原则是一个线程(事务)一个Session,使用完毕,立即关闭;

  因此,通常使用getCurrentSession()方法,它将openSession()方法包装到了ThreadLocal方法中,从而使得同一线程只有一个Session对象,且事务提交或回滚后,Session会自动关闭。

  4. Transcation接口:通过该接口,可以将事务从持久层,提升到Dao层。由Session对象创建。

8. 明确Hibernate中的对象的四种状态:瞬时态、持久态、游离态、和无名态。

9. 明确Hibernate支持原始SQL语句查询,支持QBC查询及Hibernate特有的HQL查询。

   HQL,Hibernate Query Language,Hibernate查询语言,它与SQL非常相似。但,HQL是面向对象的查询语言,而SQL是面向二维表的。HQL查询语句中使用的是类名与属性名,而SQL语句使用的是表名与字段名。
   QBC,Query By Criteria,标准查询,一种比HQL更为面向对象的查询方法。

 注意:iterator()和list()方法的区别,以及N+1问题的解决。

10. 重点明确关联关系映射,关联关系在内存中反映为实体关系,映射到DB中为主外键关系。实体间的关联,即对外键的维护。关联关系的发生,即对外键数据的改变;

  关联方向分为单向关联和双向关联;

  关联关系维护,在1:n关联中分为一方维护和多方维护,两者的底层执行是不同的,哪方维护关联关系,代码中就save谁,并且执行时先插入关联方数据,另外只有一方可以放弃维护权,转交给多方维护;

  关联关系维护,在n:m关联中是通过中间表的形式实现的。

11. 明确Hbiernate检索优化,所谓检索优化,指的是并不是代码中一出现查询语句,马上就在后台调用执行select语句。而是在代码中真正需要时才执行select。即将select的执行进行了最大可能的“延迟”;

  根据检索对象的不同,可以将检索优化分为两类:  (1)当前对象检索优化 (2)关联对象检索优化

  对于不使用优化进行对象检索的过程,称为直接加载;否则称为延迟加载,或懒加载。

  对于当前对象进行检索加载,Session中提供了两个方法:get()与load();

  默认情况下,get()为直接加载,而load()为延迟加载,load()方法默认情况下采用延迟加载策略,但也是可以改变的,可以改为直接加载;

  对于关联对象的检索,也可进行延迟加载的优化。采用何种优化策略,要依据映射文件的配置。映射文件中对于关联对象检索的优化配置属性有两个:lazy、fetch;

  关联对象检索优化分为两种:  (1)多端配置优化  (2)单端配置优化

12. 明确Hibernate缓存机制,分为事务范围缓存、应用范围缓存、集群范围缓存(不介绍)

  1. 事务范围缓存(单Session,即一级缓存):伴随着事务的开启而开启,伴随着事务的关闭而关闭,一级缓存由Hibernate管理,不受程序员控制;

   注意刷新时间点的概念,Session的刷新是指Session缓存中的数据的更新,默认的刷新时间点有三个:执行Query查询,执行session.flush(),执行事务的提交,可以修改刷新时间点,是部分时间点失效;

  插入操作不到刷新时间点就执行,删除操作一到刷新时间点就执行,更新操作到刷新时间点要比较快照才能决定是否执行;

  注意同步时间点的概念,Session的同步是指,将Session缓存中的数据同步更新到数据库中,执行同步的时间点只有一个:事务的提交;

  注意快照的概念,简单来说就是当代码通过Session的查询方法调用,将数据加载到内存后,Hbiernate会将此数据存于Session缓存中,同时在快照中备份该数据,快照中的数据在刷新点前是不可以被修改的,当刷新点到来时,比较快照中的数据和Session缓存中的数据,无论是否执行update语句,只有数据不相同的时候,才执行相应的更新操作,同时改变Session缓存中的数据和快照中的数据。

  2. 应用范围缓存(单SessionFactory,即二级缓存):应用范围的缓存可以被应用程序内的所有事务共享访问,缓存的生命周期依赖于应用的生命周期;

  准确来说,SessionFactory缓存的外置缓存才称作二级缓存,Hbiernate本身只提供了二级缓存的规范,但没有实现,所以需要提供第三方缓存产品的支持;

  二级缓存分为四类:类缓存、集合缓存、更新时间戳缓存、查询缓存(Query查询结果的缓存,区分于get和load方法),一级缓存只有类缓存;

  类缓存,缓存的是类的详情;集合缓存,在没有对集合中元素对应的类进行类缓存的时候,缓存的是所有元素的id;

  Query查询默认不会从一、二级缓存中读取数据,但可以改变,同时Query查询要从缓存中读取数据,必须保证Query所执行的HQL语句完全相同;

  二级缓存的并发访问策略(具体现在不研究):事务型、读写型、非严格读写型、只读型;

13. 明确Hibernate对事务并发控制的管理,使用乐观锁和悲观锁解决提交更新丢失问题,同时Hbiernate可以设置事务的隔离级别,同数据库的事务隔离级别。

14. 明确Hibernate注解开发,主要是为了替代映射文件。

  

Hibernate5总结的更多相关文章

  1. hibernate5.2需要的最少jar文件

    hibernate5.2需要的最少jar文件: required文件夹中的所有jar文件 + mysql-connector-java-bin.jar.

  2. SSH(Struts2+Spring4+HIbernate5)的简化

    今天给大家带来的是一个简单的新闻发布系统 首先在学习过程中我是深有体会,做事情不要浮躁,不要想着一口吃下一个胖子, 最最重要的是理解,理解透了学什么东西都是随心所欲的. 开发环境:win10系统 jd ...

  3. 关于Hibernate5.x的那点事

    1.如果采用程序建表: 4.x版本: Configuration cfg = new Configuration().configure(); SchemaExport se = new Schema ...

  4. Hibernate5.2之反向工程

                                                          Hibernate5.2之反向工程 一.描述 可能很多人在使用Hibernate进行项目开发 ...

  5. Hibernate5.2之QBC查询

                                                         Hibernate5.2值QBC查询 一.简介  Hibenate的QBC查询个人认为是Hib ...

  6. Hibernate5.2之多对多关联关系(六)

    Hibernate5.2之多对多关联关系(六) 一.简介 Hibernate中多对多关联关系在工程中使用的频率也是非常高的,例如:大学中学生选课.用户订单等.在本博客中笔者一样通过实例代码为读者阐述H ...

  7. Hibernate5.2之一对一外键关联(五)

                                                     Hibernate5.2之一对一外键关联(五) 一.简介 上篇文章中笔者介绍了Hibernate关联关 ...

  8. Hibernate5.2之一对一主键关联(四)

                                                      Hibernate5.2之一对一主键关联(四) 一.简介 一对一关联关系分为两种:a.主键关联:b. ...

  9. Hibernate5.2关联关系之单向多对一(二)

    Hibernate5.2之单向一对多(二) 一. 简介 在本篇博文中笔者会在上一篇博客的代码基础上进行修改,本篇文章将介绍单向的一对多. 二. hbm文件的方式 Customer.hbm.xml &l ...

  10. Hibernate5.2关联关系之单向一对多(一)

    Hibernate5.2之单向一对多 一. 简介    Hibernate中最复杂的应该就是各种关联(单向一对多.单向多对一.双向一对多.一对一.多对多)关系的映射,于是笔者就想着去写一些关于Hibe ...

随机推荐

  1. VTK初学一,vtkDelaunay2D创建球冠曲面

    #ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRend ...

  2. 使用@Configuration注解来代替Spring的bean配置

    下面是一个典型的Spring配置文件(application-config.xml): <beans> <bean id="orderService" class ...

  3. Unity4.6新UI系统初探(uGUI)

    一.引言 Unity终于在即将到来的4.6版本内集成了所见即所得的UI解决方案(视频).事实上从近几个版本开始,Unity就在为这套系统做技术扩展,以保证最终能实现较理想的UI系统.本文试图通过初步的 ...

  4. cocos2dx 2.x 竖屏

    1, xcode中General->Device Orientation只勾选Portrait. 2, 修改RootViewController.mm中下面代码: // For ios6.0 a ...

  5. Java Concurrency - ThreadLocal, 本地线程变量

    共享数据是多线程应用最常见的问题之一,但有时我们需要为每个线程保存一份独立的变量.Java API 提供了 ThreadLocal 来解决这个问题. 一个 ThreadLocal 作用的例子: imp ...

  6. CAF(C++ actor framework)(序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)

    这里应该是序列化的最后一篇.感觉自己写的不是很好,也一点点在学习.这次就不贴上代码了.代码在github上的announce5.cpp.代码简单,但是分析下去会有细思恐极的感觉! 先看一下几个函数是干 ...

  7. [转帖]windows10,business版和consumer版本区别

    windows10,business版和consumer版本区别 时间:2018-07-08 10:50来源:原创 作者:5分享 点击: 7113 次 windows10系统(1803)busines ...

  8. Cannot uninstall &#39;html5lib&#39;. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

    如标题,安装Tensorflow-gpu时遇到的完整问题 Cannot uninstall 'html5lib'. It is a distutils installed project and th ...

  9. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  10. .NET Framework posters with Namespaces &amp; Types

    Framework is platform containing a huge library of types, methods, classes, etc., cataloged into nam ...