Hibernate工作原理机制和概念
什么是Hibernate
Hibernate是开源O/R映射框架。
Hibernate是一个开源的持久层框架,它提供了强大、高性能的对象到关系型数据库的持久化服务。
Hibernate提供的HQL(Hibernate Query Language)是面向对象的查询语言。
什么是ORM
ORM(Object/Relation Mapping)即对象/关系映射。
可以理解为是一种规范,ORM可作为应用程序和数据库的桥梁ORM不是一个产品,是一类框架的总称。
DAO层(持久层)---> Hibernate/JDBC
|
|-- Mapping
|
DB数据库
什么是PO
PO(Persistent Object)持久化对象,他的作用是完成持久化操作,简单的说就是通过对象来操作数据库的增、删、改、查操作,以面向对象的方式来访问数据库。
PO = POJO + 映射文件:POJO(Plain Old Java Objects)简单的Java对象,实际是普通JavaBean。
Hibernate工作原理机制
原理:
1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
//自由状态 User user = new User(); user.setName("weizhixi"); //读取并解析配置文件 Configuration cfg = new Configuration().configure(); //读取并解析映射信息,创建SessionFactory SessionFactory sessionFactory = cfg.buildSessionFactory(); //打开Sesssion Session session = factory.openSession(); //创建事务Transation session.beginTransaction().begin(); //持久化状态 session.save(user); user.setName("weizhixi.com"); //提交事务 session.beginTransaction().commit(); //关闭Session session.close(); //关闭SesstionFactory factory.close(); //游离状态 //session.save(user);
Hibernate核心接口
Configuration 类负责管理Hibernate的配置信息。数据库配置,驱动类等,Xml文件(hibernate.cfg.xml)。
SessionFactory(会话工厂) 应用程序从SessionFactory里获得Session(会话)实例。通常情况下,整个应用只有唯一的一个会话工厂。
Session(会话) 它代表与数据库之间的一次操作,也称为持久化管理器,因为它是与持久化有关的操作接口,工作完成后,需要关闭。
Transaction(事务) 它将应用代码从底层的事务实现中抽象出来,可能是一个JDBC事务或者JTA用户事务或通过对象代理结构(CORBA)。
Query与Criteria(数据检索)
Interceptor(拦截机制)
对象关系映射模式
属性映射
类映射
关联映射
一对一
一对多
多对一
多对多
cascade(级联)取值(all、none、save-update、delete)
inverse(反转)取值(true/false)
延迟加载/懒加载
lazy只有真正使用这个对象的时候才会创建,对于hibernate而已,真正使用的时候才会发出sql语句。
性能优化策略
一级缓存
一级缓存也称作Session级缓存,一级缓存的生命周期与session一致session关闭了一级缓存也消失,一级缓存是无法取消的,但可以管理。
那些方法支持一级缓存?
实体查询 get()、load()、Iterator()
管理一级缓存的方法:
session.clear()、session.evice() ;
如何避免一次性大量数据入库导致内存溢出:
先flush(),在clear()
二级缓存
二级缓存也称作SessionFactory级的缓存,它可以被所有的session共享,二级缓存的生命周期与SessionFactory的一致,SessionFactory可以管理二级缓存。
二级缓存是采用第三方工具来实现,由缓存策略提供商提供,比如有EHCache、OSCache、SwarmCache、JBoss TreeCache等等。
Hibernate的二级缓存默认是打开的,通过Hibernate.cfg.xml文件来管理。
二级缓存配置:<property name="hibernate.cache.use_second_level_cache">false</property>
配置缓存提供商:<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
查询缓存
查询缓存的生命周期 ,是不确定的,当前关联的表发生改变时,查询缓存的生命周期结束。
查询缓存的配置:<property name="hibernate.cache.use_query_cache">true</property>
查询缓存的使用:query.setCacheable(true);
批量抓取
如果查询的数据比较多可以用 batch-size 来提高搜索,例如:batch-size="10" 批量抓取,表示每次查询出10条关联数据。
<set ... batch-size="10">
批量更新
批量更新指在一个事务场景中处理大量数据。
Hibernate提供了以下方式进行批量处理数据:
使用HQL进行批量操作(数据库层面executeUpdate())
使用JDBC API进行批量操作(数据库层面)
使用Session进行批量操作(会话层面)
原创文章,转载请注明出处:https://www.weizhixi.com/article/44.html