关于Hibernate的一些基础知识!
【这是我一直学习而总结/查询的一些Hibernate知识/资料】(实时更新).......
=============== 说一下Hibernate.properties里的两个属性 ===============
hibernate.jdbc.fetch_size 50
hibernate.jdbc.batch_size 25
这两项会影响到Hibernate的CRUD性能!
C = create, R = read, U = update, D = delete
Fetch size 是指JDBC的statement读取数据库的时候每次从数据库中取出的记录数
例如一次查询1万条记录,对于Oracle的JDBC的驱动来说的话是不会1次性把1万条数据都直接取出来,而只会读取Fetch Size条数,当记录集遍历完了这些记录以后,再去数据库取Fetch Size条数据!
因些会大大减少内存的使用次数节省内存消耗. Fetch Size的数值设置的越大,读取数据库的次数就会越少,速度也就越快;...(相反)
Oracle数据库的JDBC驱动默认的Fetch Size=10,是一个非常保守的设定,根据我的测试,当Fetch Size=50的时候,性能会提升1倍之多,当Fetch Size=100,性能还能继续提升20%,Fetch Size继续增大,性能提升的就不显著了。(转载自“中文JAVA技术网”)
因此我建议使用Oracle的一定要将Fetch Size设到50。。(转载自“中文JAVA技术网”)
不过并不是所有的数据库都支持Fetch Size特性,例如MySQL就不支持。
MySQL就像我上面说的那种最坏的情况,他总是一下就把1万条记录完全取出来,内存消耗会非常非常惊人!这个情况就没有什么好办法了
Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。
Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。我做的一个测试结果是当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size = 50的时候,删除仅仅需要5秒!!!
可见有多么大的性能提升!很多人做Hibernate和JDBC的插入性能测试会奇怪的发现Hibernate速度至少是JDBC的两倍,就是因为Hibernate使用了Batch Insert,而他们写的JDBC没有使用Batch的缘故。
以我的经验来看,Oracle数据库 Batch Size = 30 的时候比较合适,50也不错,性能会继续提升,50以上,性能提升的非常微弱,反而消耗内存更加多,就没有必要了
=============== 说一下Hibernate里代理类 ===============
拿Hibernate中的 get()和load()方法来说 当返回数据为空时 get() 将返回NULL 而load()将抛出ObjectNotFoundException这里我们针对load进行解释
示例:
Student stu = (Student)session.load(Student.class,"1001");【1001:为ID】
load()方法主要返回的是一个Hibernate的代理类不会直接去调用数据库/相反get()永远不会返回代理类它会始终访问数据库【其实用load()的一个好处就在于如果我有一个coment: comment.setClaszB(B);当 comment保存的时候你只需要B的主键;而恰恰代理类只返回对象的ID】 这个代理类只不过是提供了一个查询数据库的一个能力;当我们调用session.load()方法时只不过返回了一个Hibernate生成代理类(怎么生成稍后做解释)这里面并没有我们想要的数据;在session关闭的时候调用stu.getName()方法就会抛出org.hibernate.LazyInitializationException: could not initialize proxy - no Session异常 像我们前面所说的这个代理类有一查询数据库的能力,示例中的session.load()方法前面加了一个(Session)强制转换更能说明代理的是Student的子类也就是说具有更强的功能(查询数据库的能力); 在session没有关闭的时候我们调用stu.getName()方法就会返回我们需要的数据,这时在关闭session的情况下我们在调用Student这个类的时候就不会有异常了... 可能有人会想如果我只是想让借这个代理类去查询数据库感觉有点多余! 如果只是这样想我们完全可以用Hibernate.initialize(str)来初始化这个代理对象【详细请看
http://mllongze.iteye.com/blog/907968】
这个代理类其实是靠Hibernate JAR包里的asm.jar和cglib-2.1.3.jar在内存中修改Student类的字节码修改后的字李码只要是符合class文件的规则就可以创建出代理对象了;
分享到:
相关推荐
"Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...
本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之配合使用的相关组件。让我们深入探讨一下这些jar包以及它们在Hibernate中的作用。 1. Hibernate核心库: - `hibernate-core.jar`:这...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
**初学Hibernate,Hibernate入门** Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。在Java应用中,通过Hibernate,开发者可以将数据库操作抽象成对象模型,使得代码...
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
### Hibernate入门知识点详解 #### Hibernate概述与ORM思想 - **定义**:Hibernate是一个开源的、轻量级的对象关系映射(Object-Relational Mapping,简称ORM)框架,它主要应用于JavaEE架构中的DAO(Data Access ...
【hibernate入门--第一个实例】 Hibernate 是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。通过使用Hibernate,我们可以将数据库操作转换为对Java对象的操作,从而简化了数据库...
《Hibernate入门到精通》这本书是针对Java开发人员深入学习Hibernate框架的一份宝贵资源。Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。通过使用Hibernate,...
### Hibernate入门教程知识点详解 #### 一、Hibernate框架简介 **Hibernate** 是一款开放源代码的**对象关系映射(Object-Relational Mapping,简称ORM)**框架,它为Java应用提供了一种高效的机制,用于处理Java...
**hibernate入门** Hibernate 是一个强大的Java持久化框架,它简化了数据库操作,使得开发者无需直接编写SQL语句即可实现对象与关系数据库之间的映射。这个文档将带你步入Hibernate的世界,了解其基本概念和核心...
### Hibernate经典入门篇知识点梳理 #### 一、Hibernate简介与作用 - **概念**:Hibernate是一种开放源码的对象关系映射(ORM)框架,用于Java应用与关系型数据库之间的交互。它提供了一种机制,使得Java对象能够...
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,看了这个希望能给你点启示!
本篇将详细介绍Hibernate入门实例的操作步骤,包括手工配置文件和利用Eclipse自动生成配置的两种方法。 **一、手工配置文件** 1. **环境准备** 在开始前,确保已安装JDK、Eclipse IDE,并在项目中引入Hibernate的...
《MyEclipse Hibernate 快速入门中文版》是专为初学者设计的指南,旨在帮助开发者迅速掌握在MyEclipse集成开发环境中使用Hibernate框架的基本操作和应用。此资源包括一个HTML文档(MyEclipse_Hibernate_Quickstart_...
Hibernate的入门学习主要包括理解这些基本概念和操作,后续深入学习则会涉及到复杂映射、事务处理、性能优化和缓存管理等高级话题。随着不断实践和学习,开发者可以充分利用Hibernate框架提供的各种特性,编写更加...
hibernate入门实例,内容是增加人员信息实例,手动配置相关配置文件、pojo类,测试数据。后台数据采用mysql数据库,有实体表创建语句,相关hibernate的jar包与数据库驱动包也上传了,可以直接使用,很方便!