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. 第五次Scrum meeting

    第五次Scrum meeting 会议内容: 连接方面:确定封装成json的文本格式,尽量在满足在线组和手机客户端两组的情况下,降低自身的难度 测试方面:进行新一轮测试,主要测试程序的稳定性和可靠性, ...

  2. 2013337朱荟潼 Linux第三章读书笔记——进程管理

    第三章 进程管理 总结 fork创造的子进程复制了父进程资源,包括内存及进程描述符的内容,资源的复制而不是指针的复制. vfork的行为更像一个线程(指没有自已独立的内存空间),更明显的是vfork的 ...

  3. 基于python的机器学习实现日元币对人民币汇率预测

    ## 导入所需的包 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow a ...

  4. week6:个人博客作业

    这周主要是参与团队编程的讨论 团队编程中发现很多问题: 1,每个人共同空闲的时间不好找 就我组来说,我是考研,每天晚上都要去外面上课,有的人在进行大创,,也有的像我一样在整考研的东西,还有的进行其他, ...

  5. 更新pip10后 ImportError: cannot import name ‘main'

    百度了几个回答都没有解决问题,有些回答明显是直接复制过来的一点价值都没有,然后google一下立马解决.很多时候不能怪搜索引擎,问题出在一些国内网友对知识的不负责任 解决:找到报错文件,也就是那个pi ...

  6. 『编程题全队』alpha阶段项目复审

    小组的名字和链接 优点 缺点,bug 报告 最终名次 Gakki赛高 (1)支持注册账号和账号管理(2) 支持自动登录,提供便捷性(3)题目不重复且题目答案准确(4)支持排行榜统计功能(5)自己设计算 ...

  7. 查看Jira 使用的H2数据库 数据结构以及内容的方法

    1. 同事在研究jira 想看看jira的数据库 数据结构, 告知使用的是java的H2数据库. 如图示 2. 然后根据此内容 进行百度等. 下载 可以进行数据库连接的工具,主要找到两个,下载地址分别 ...

  8. BZOJ2648 SJY摆棋子(KD-Tree)

    板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  9. 点分治&动态点分治小结

    (写篇博客证明自己还活着×2) 转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/8006488.html 有的时候,我们会发现这样一类题:它长得很像一个$O(n) ...

  10. bzoj 1050 [HAOI2006]旅行comf (并查集)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1050 思路: 先将每条边的权值排个序优先小的,然后从小到大枚举每一条边,将其存到并查集 ...