1. Hibernate简介

    • Hibernat是一个ORM(关系映射)框架,对JDBC访问数据库的操作进行了简化,并且将数据库表中的字段和关系映射为对象,简化了对数据库的操作。
  2. 使用方法

    • 读取并解析配置文件

    • 读取并解析映射信息,创建SessionFactory

    • 打开Sesssion

    • 创建事务Transation

    • 持久化操作

    • 提交事务

    • 关闭Session

    • 关闭SesstionFactory

  3. 为什么要用Hibernate

    • 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

    • Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

    • hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

    • hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

  4. 延迟加载

    • 有类的延迟加载和集合的延迟加载,hibernate3添加了属性,查询对象的时候不是立即发出sql语句而是在真正用到对象的时候才发出sql语句

    • lazy=false 管理是否开启懒加载

    • 对象是用load方法,而集合默认为懒加载

  5. session

    • session是维护数据库连接并且执行查询,更新,删除操作,Session不是线程安全的
  6. update和saveOrUpdate的区别

    • update()方法操作的对象必须是持久化了的对象。也就是说,如果此对象在数据库中不存在的话,就不能使用update()方法。

    • saveOrUpdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会 更新数据库中的对象;如果是未持久化的对象使用此方法,则save到数据库中。

  7. 一级缓存

    • 一级缓存为session内的缓存 生命周期和session声明周期相同,
  8. 二级缓存

    • 二级缓存是在SessionFactory这个级别维护的缓存,它能够通过节省几番数据库调用往返来提高性能。

    • 放在二级缓存中的数据应该为不经常改变,保密性底的数据

    • Hibernate框架并没有实现二级缓存,是借助于第三方插件来实现的(ehcache)

  9. 查询缓存

    • 查询缓存实际上保存的是sql查询的结果,这样再进行相同的sql查询就可以之间从缓存中拿到结果了。

    • 生命周期: 数据放到查询缓存中,将会一直存在,直到缓存中的数据被更改,则缓存中的数据消失

    • 根据时间戳来判断数据状态

    • 默认关闭,需要配置文件开启,还需要用query.setCacheable(true);来启动

  10. load和get

    • get查询时先查询一级缓存然后二级缓存然后数据数据库,直接返回实体对象,如果查询不到返回null

    • load如果一级缓存查询不到对象会返回一个代理对象,然后等到真正使用这个对象的时候才去查询二级和数据库。查询不到抛异常

  11. hibernate的三种状态之间如何转换

    • 当对象由瞬时状态(Transient)一save()时,就变成了持久化状态;

    • Session 一 Close()了,它的缓存也都关闭了,整个Session也就失效了,这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。

    • 当游离状态(Detached)update()时,又变为了持久状态(Persistent)。

    • 当持久状态(Persistent)delete()时,又变为了瞬时状态(Transient), 此时,数据库中没有与之对应的记录。

  12. hibernate里面的sorted collection 和ordered collection有什么区别

    • sorted collection是在内存中通过Java比较器进行排序的

    • ordered collection是在数据库中通过order by进行排序的

  13. persist和save的区别

    • persist不保证立即执行,可能要等到flush;persist不更新缓存;
  14. cascade,即对住对象的更新怎么影响到子对象;

    • save-update: 级联保存(load以后如果子对象发生了更新,也会级联更新). 但它不会级联删除

    • delete: 级联删除, 但不具备级联保存和更新

    • all-delete-orphan: 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新.

    • all: 级联删除, 级联更新,但解除父子关系时不会自动删除子对象.

    • delete-orphan:删除所有和当前对象解除关联关系的对象

  15. fetch 抓取策略,在配置文件的Set标签配置

    • join : 左外链接 而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。

    • select : 默认select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询;

    • subselece : 子查询

  16. 实现关系

    • many-to-one 对象

    • one-to-many set

    • many-to-may Set

  17. POJO的要求

    • 必须有一个无参的构造方法

    • 不能为final

    • 属性要为Private,并且提供get/set

  18. ****inverse****

    • 在多对多关系中默认为flase 表示为两端都在维护关系

    • 应该改为一端维护关系而不是两端。 inverse=true 代表配置这个的一方放弃了维护关系的权利

  19. 数据库中查询速度慢

    • 建索引

    • 减少表之间的关联

    • 优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面

    • 简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据

  20. SessionFactory

    • SessionFactory就是一个用于创建Hibernate的Session对象的工厂。SessionFactory通常是在应用启动时创建好的,应用程序中的代码用它来获得Session对象。作为一个单个的数据存储,它也是线程安全的,所以多个线程可同时使用同一个SessionFactory,hibernate中的配置文件,映射文件,持久化类的信息都保存在SessionFactory。

    • 一个SessionFactory 在启动的时候只能建立一次

  21. 五个核心接口

    • Configuration 接口:配置Hibernate,根据其启动hibernate,创建

    • SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建

    • Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,

    • Transaction 接口:管理事务;

    • Query 和Criteria 接口:执行数据库的查询。

  22. Hiberante和Mybatis的区别

    • Hibernate属于全自动ORM映射工具,使用Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

Hiberante知识点梳理的更多相关文章

  1. Javascript重要知识点梳理

    Javascript重要知识点梳理 一.Javascript流程控制 js中常用的数据类型 var关键字的使用 if – else if – else switch while for 二.Javas ...

  2. Memcache知识点梳理

    Memcache知识点梳理 Memcached概念:    Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的HAS ...

  3. [独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  4. [独孤九剑]Oracle知识点梳理(九)数据库常用对象之package

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  5. [独孤九剑]Oracle知识点梳理(八)常见Exception

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  6. [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  7. [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure、function、Sequence

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  8. [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、View

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  9. [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

随机推荐

  1. python之路第四篇(基础篇)

    一.冒泡算法实现: 方法一: li = [13,33,12,80,66,1] print li for m in range(4): num1 = li[m] num2 = li[m+1] if nu ...

  2. Centos 7.4 下初探Zabbix安装

    工作一波停一波起,感觉离开.net好久了. 最近工作中发现服务器监视都是用了zabbix,对于我这类不懂的狠狠弥补了一下知识. 无意发现zabbix带有api,就想开发个工具调用api来着.可是api ...

  3. Node.js学习之TCP/IP数据通讯

    Node.js学习之TCP/IP数据通讯 1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用 ...

  4. rem绝对自适应方案

    rem css3新增的rem是现在非常受欢迎的单位.看一下MDN上的说明: 这个单位代表根元素的 font-size 大小(例如 <html> 元素的font-size). 使用这个单位可 ...

  5. IIS 500错误或无法显示此网页解决方法

    不知道是不是XP版本的原故,发现越来越多的XP系统装好IIS后连默认网站都打不开,(其他系统没有注意)出现几个大字,IIS 500错误.相信碰到这个问题的人都深有体会,确实很烦人.卸了IIS重装也是不 ...

  6. MVC 中获取Json数据

    @{ ViewBag.Title = "json示例项目"; } @Scripts.Render("~/bundles/jquery") <h2>j ...

  7. java spark-streaming接收TCP/Kafka数据

    本文将展示 1.如何使用spark-streaming接入TCP数据并进行过滤: 2.如何使用spark-streaming接入TCP数据并进行wordcount: 内容如下: 1.使用maven,先 ...

  8. iptables使用实践

    1.iptables 本质上是一组规则,报文从端口接收到之后,按照规则的顺序进行匹配,一旦匹配上则执行动作,后续就不再匹配. 2.为了体现出优先级,iptable分为4个表,5个链,如下: 优先级顺序 ...

  9. Mysql 学习之EXPLAIN作用

    一.MYSQL的索引 索引(Index):帮助Mysql高效获取数据的一种数据结构.用于提高查找效率,可以比作字典.可以简单理解为排好序的快速查找的数据结构.索引的作用:便于查询和排序(所以添加索引会 ...

  10. (转)Python-正则表达式

    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式! 1.了解正则表达式 正则表达式是对字符串操作的 ...