Hibernate工作原理机制和概念

知兮丶青
阅读(803) 2017-12-28
Hibernate工作原理机制和概念
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