Hibernate是对jdbc的封装,大大简化了数据访问层繁琐的重复性代码。sql
Hibernate是一个优秀的ORM实现,很大程度上简化了DAO的编码功能。数据库
Hibernate能够很方便的进行数据的移植工做。api
Hibernate提供了缓存机制,是程序执行更改的高效。缓存
ORM(Object Relation Mapping)对象关系映射,是把数据库中的关系数据映射成为程序中的对象。session
使用ORM的优势:提升了开发效率下降了开发成本、开发更简单更对象化、可移植性强。app
在Config里面把Hibernate.show_sql设置为true就能够。可是不建议开启,由于开启以后会下降程序的运行效率。框架
三种:ide
能够定义为final类,可是这样的话就不能使用Hibernate代理模式下的延迟关联来提升性能了,因此不建议定义实体类为final。函数
Integer类型是对象,它的值容许为null,而int属于基础数据类型,值不能为null。性能
读取并解析配置文件。
读取并解析映射文件,建立SessionFactory。
打开Session。
建立事务。
进行持久化操做。
提交事务。
关闭Session。
关闭SeesionFactory。
数据查询时,没有OID指定的对象,get方法返回null,load方法返回一个代理对象。
load方法支持延迟加载,get方法不支持延迟加载。
Hibernate经常使用的缓存有一级缓存和二级环境。
一级缓存:也叫session缓存,只在session做用范围内有效,不须要用户干涉,有Hibernate自身维护,能够经过evict方法清除object的缓存,clear方法清除一级缓存中的全部缓存,flush刷新缓存。
二级缓存:应用级别的缓存,在全部session中都有效,支持配置第三方的缓存,如EhCache。
临时/瞬时状态:直接new出来的对象,该对象尚未被持久化(没保存在数据库中),不受Session管理。
持久化状态:当调用session的Save、saveOrUpdate、get、load、list等方法的时候,对象就是持久化状态。
游离状态:Session关闭以后对象就是游离状态。
getCurrentSession会绑定当前线程,而openSession则不会。
getCurrentSession事务是Spring控制,而且不须要手动关闭,而openSession须要手动开启和提交事务。
Hibernate中每一个实体类必须提供一个无参构造函数,由于Hibernate框架要使用reflection api,经过调用Classnewlnstance()来建立实体类的实例,若是没有无参的构造函数就会抛出异常。