文档章节

Hibernate工作流程

chape
 chape
发布于 2013/06/08 11:38
字数 1253
阅读 461
收藏 5
点赞 0
评论 0

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
解说Hibernate的工作流程实例

我们知道如果用java连接数据库我们首先想到的就是JDBC,那么Hibernate原理是什么呢?hibernate可以理解为是一个中间件,它负责把java程序的sql语句接收过来发送到数据库,而数据库返回来的信息h...

chape
2013/06/08
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
为各位看官来介绍一下JBPM是个啥东东

JBPM简介 JBPM,全称是Java Business Process Management(业务流程管理),网络推广它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。jBP...

网络营销
2012/01/09
0
0
struts + Hibernate + Spring WEB框架

struts:负责显示层,是一个完美的MVC实现,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。 Hibernate:创建一系列的持久化类,将每个类的属性与数据库表的属性一一对应。...

rob_rookie
06/26
0
0
2013年12月25日面试内容总结

1、oracle的安装与卸载 由于我使用的是Oracle11g的版本,安装直接双击安装程序,但在最后一步的时候要进行口令的配置;Oracle的卸载呢,如果安装成功了,先启动卸载程序,然后重启F8安全模式...

哎呦坏蛋
2013/12/25
0
0
程序员?这些面试题你能答对几个?

  三人行必有我师,人生是需要不断学习的,在这里我们相遇就是缘分,希望各位可以看完这篇文章,也欢迎大家在下面留言讨论,天冷了,也动动手指转发收藏一下,谢谢大家!   一、数据结构...

java分享
2017/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

centos7设置以多用户模式启动

1、旧版本linux系统修改inittab文件,在新版本执行vi /etc/inittab 会有以下提示 # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON......

haha360
36分钟前
0
0
OSChina 周日乱弹 —— 红薯,五年间我对你不离不弃

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ andonny :分享周二珂的单曲《孤独她呀》 《孤独她呀》- 周二珂 手机党少年们想听歌,请使劲儿戳(这里) @孤星闵月 :没事干,看一遍红楼梦...

小小编辑
41分钟前
90
8
Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
今天
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
16
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
238
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部