文档章节

Hibernate工作流程

chape
 chape
发布于 2013/06/08 11:38
字数 1253
阅读 462
收藏 5

Hibernate工作原理

工作流程:

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
3.通过config.buildSessionFactory();//创建SessionFactory
4.sessionFactory.openSession();//打开Sesssion
5.session.beginTransaction();//创建事务Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事务
8.关闭Session
9.关闭SesstionFactory

为什么要用:

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

2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。简化了DAO层的编码工作

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

2. Hibernate是如何延迟加载?

1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)

2. Hibernate3 提供了属性的延迟加载功能

      当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在于内存中,实现了延迟加载,节省了服务器的内存开销,从而提高了服务器的性能。

3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)

      类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、

4. 说下Hibernate的缓存机制

1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事务级缓存

2. 二级缓存
a) 应用级缓存
b) 分布式缓存
条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据
c) 第三方缓存的实现
////////一级缓存:session级的缓存也叫事务级的缓存,只缓存实体,生命周期和session一致。不能对其进行管理,不用显示的调用。

二级缓存:sessionFactory缓存,也叫进程级的缓存,使用第3方插件实现的,也值缓存实体,生命周期和sessionFactory一致,可以进行管理。

首先配置第3方插件,我们用的是EHCache,在hibernate.cfg.xml文件中加入

<property name="hibernate.cache.user_second_level_cache">true</property>

在映射中也要显示的调用,<cache usage="read-only"/>

二级缓存之查询缓存:对普通属性进行缓存。如果关联的表发生了修改,那么查询缓存的生命周期也结束了。

在程序中必须手动启用查询缓存:query.setCacheable(true);

5. Hibernate的查询方式

Sql、Criteria,Hql:
1、 属性查询
2、 参数查询、命名参数查询
3、 关联查询
4、 分页查询
5、 统计函数

6. 如何优化Hibernate?

1.使用 双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3. 不用一对一,用多对一取代 (?)
4.配置对象缓存,不使用集合缓存
5. 一对多集合使用Bag,多对多集合使用Set
6. 继承类使用显式多态
7. 表字段要少,表关联不要怕多,有二级缓存撑腰

1.Hibernate有哪几种查询数据的方式

      (1)导航对象图查询

      (2)OID查询

      (3)HQL

      (4)QBC

      (5)本地SQL

2.load()和get()的区别

get和load都使用内存,get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;而load方法调用时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。详细区别见此

load加载方法:

User user = (User)session.load(User.class, userId);

get加载方法:

User user = (User)session.get(User.class, userId);

      区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个null;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如user.getPassword())会抛出异常:org.hibernate.ObjectNotFoundException;

      区别2:load支持延迟加载,get不支持延迟加载。

也就是说:

User user = (User)session.load(User.class, userId);

这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询

而:

User user = (User)session.get(User.class, userId);

立即去执行数据库查询

注意:

Users user = (Users)session.load(User.class, userId);    
System.out.println(user.getId());

      上面这2句代码,不会去执行数据库操作。因为load后会在hibernate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId()时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。

本文转载自:http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html

共有 人打赏支持
chape
粉丝 157
博文 339
码字总数 191349
作品 0
成都
程序员
私信 提问
《JavaEE基础实用教程》笔记说明

“《JavaEE基础实用教程》笔记”分类中的文章是本人学习《JavaEE基础实用教程》时所做的笔记。 该书作者:郑阿奇 著。ISBN:9787121091360。 这里整理出第3、4、5章的笔记,主要内容是Strut...

JerryPan
2016/02/19
1K
1
SpringMVC和hibernate工作流程描述

SpringMVC工作流程描述 (1)向服务器发送HTTP请求,请求被前端控制器 DispatcherServlet 捕获。 (2)DispatcherServlet 根据 <servlet-name>-servlet.xml 中的配置对请求的URL进行解析,得...

wdongqiang
2016/04/01
411
0
Hibernate的基本工作流程

工作流程: 1. 创建Configuration实例,其构造函数将配置文件(Hibernate.cfg.xml)读入到内存。一个Configuration实例代 表Hibernate所有java类到数据库映射的集合。 2. 创建SessionFactor...

wangxiaoyi
2012/09/04
0
0
Spring Struts Hibernate的工作流程

其实这个知识点已经在我的博客:Spring必备知识中提到了,但是比较分散,这里整理出单独一篇文章。 Spring Web MVC 处理Http请求的大致过程: 一旦Http请求到来,DispatcherSevlet将负责将请...

牧师-Panda
2016/09/08
40
0
Java框架之Hibernate

首先,上图... Hibernate 框架.png 上面的是hibernate中经常用到的知识点,我们一个一个看. 一 工作流程 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务T...

Miss_差不多
2017/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据反欺诈技术架构

一年多以前,有朋友让我聊一下你们的大数据反欺诈架构是怎么实现的,以及我们途中踩了哪些坑,怎么做到从30min延迟优化到1s内完成实时反欺诈。当时呢第一是觉得不合适,第二也是觉得场景比较...

微笑向暖wx
19分钟前
0
0
flink-系统内部消息传递的exactly once语义

At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的。这些计算机有可能fail。 一个sender发送一条message到receiver。根据receiver出现fail时sender如...

xtof
26分钟前
0
0
iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iO...

壹峰
28分钟前
0
0
配置网络、远程登录、Linux秘钥认证

配置网络 一台服务器安装完系统之后不管是为了方便管理还是业务需要,我们都要给它配置ip地址。让机器能够联网。在现实的生产环境的当中,往往我们给服务器配置的ip都是提前规划好的,但是在...

李超小牛子
31分钟前
0
0
dotConnect for Oracle入门指南(五):检索和修改数据

【下载dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技术上,为基于Oracle数据库的应用程序提供完整的解决方案。它为设计应用程序结构带来了新的...

电池盒
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部