前言:hibernate是最开始最传统的重量级框架与之简化版的spring jpa原理和思想非常相近,由于较为复杂,而且在一些场景下不适合写一些复杂的sql,现在的项目普遍弃用了这个框架,但是基本的面试题还是要了解的
1.hibernate简介
hibernate核心思想是类与对象关系映射,让java的对象和数据库的表相关联,通过操作java对象的方式操作数据表,常见的使用方法例如save,update,get,load等方法,还有相关标签@id,@param等,查询一般使用query接口,或者使用hql的方式
2.hibernate session 对象存在的三种方式及存在意义
瞬时状态:对象再刚刚被创建出来的时候,刚刚被new出来但是未被session对象里面的方法操作,如果没有使用就会被垃圾回收机制回收
持久状态:对象被session里面的get或者load等方法操作过,并且存在于hibernate的缓存中,对象的数据会随时保存到数据库中
游离状态:java对象被session操作完成以后就进入游离状态
3.Hibernate get和load 原理及区别
最直接的区别就是每次使用get方法就要从数据库中重新获取,load方法是先从hibernate的缓存中获取如果没有然后才从数据库中获取
4.hibernate的缓存问题
hibernate分为一级缓存和二级缓存
一级缓存:一级缓存是session级别的缓存,hibernate自带的,并且一级缓存只存在一次会话中,如果session失效,则缓存被清除,如果需要清除缓存使用
session.flush();让一级缓存与数据库同步;
session.evict();清空一级缓存中指定的对象;
session.clear();清空一级缓存中所有的对象;
二级缓存:
很少使用
基于应用程序级别的缓存,作用在SessionFactory范围内的, 可以跨多个session,即不同的session都可以访问缓存。 Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影响代码。