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. 云平台项目--学习经验--jsrender前端渲染模板

    jsrender的好处:可以预先自定义一些固定的html标签,在需要显示数据的时候,可以直接传入真实的数据并显示在web页面中,避免了Js编写中的复杂过程:针对高性能和纯字符串渲染并优化,不需要依赖D ...

  2. grunt入门讲解1:grunt的基本概念和使用

    Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.老版本的 Node. ...

  3. 各小组Alpha版项目发布作品点评

    第一组:新蜂小组 题目:俄罗斯方块 评论:主体功能已经完成,可以流畅的进行游戏,游戏素材都是由贴图美化过的,期待计分系统等的完善. 第二组:天天向上 题目:连连看 评论:核心功能完成,可以流畅的进行游 ...

  4. Qt开发之Hello Qt及学习小技巧

    创建第一个Qt程序的简单流程 如果安装了andriod或ios的版本也会显示出来,这里只显示了桌面端的 一个项目文件代码结构如下: 如下图可直接编辑label里的文字内容: 运行结果:(快捷键ctrl ...

  5. MySQL的IFNULL解决判空问题

    问题:mybatis返回的null类型数据消失,导致前端展示出错 思路:如果查询出的结果是空值,应当转换成空字符串.当然在前端也能进行判断,但要求后台实现这个功能. 解决方案: 使用如下方法查询: S ...

  6. subprocess 子进程模块

    subprocess子进程模块 import subprocess #Popen方法是用来执行系统命令的,直接把结果打印到终端了 res =subprocess.Popen(r'dir',shell= ...

  7. hdwiki 前后台版权信息在哪修改

    hdwiki 前台copyright 信息在 view/default/footer.htm 搜索footer-phdwiki 后台copyright 信息在 view/default/admin_m ...

  8. 【刷题】LOJ 6006 「网络流 24 题」试题库

    题目描述 假设一个试题库中有 \(n\) 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 \(m\) 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组 ...

  9. 以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)

    以BZOJ 2002 弹飞绵羊为例学习有根树LCT(Link-Cut Tree) 注:本文非常简单,只涉及有根树LCT,对于无根树,LCT还有几个本文没有提到的操作,以后慢慢更新 =v= 知识储备 [ ...

  10. 解题:APIO 2018 铁人两项

    题面 建立圆方树,考虑所有路径,发现路径上原来的点双(现在的方点)里的点都可以做中间点.但是路径上被方点夹着的圆点被计重了,要扣掉:枚举的两个端点也被算进去了,要扣掉.所以直接将方点权值设为点双大小, ...