- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Hibernate的优化方案概要1
Hibernate的优化方案
HQL优化
使用参数绑定
使用绑定参数的原因是让数据库一次解析SQL,对后续的重复请求可以使用生成好的执行计划,这样做节省CPU时间和内存。
避免SQL注入。
尽量少使用NOT
如果where子句中包含not关键字,那么执行时该字段的索引失效。
尽量使用where来替换having
having在检索出所有记录后才对结果集进行过滤,这个处理需要一定的开销,而where子句限制记录的数目,能减少这方面的开销。
减少对表的查询
在含有子查询的HQL中,尽量减少对表的查询,降低开销。
使用表的别名
当在HQL语句中连接多个表时,使用别名,提高程序阅读性,并把别名前缀与每个列连接上,这样一来,可以减少解析时间并减少列歧义引起的语法错误。
实体的更新与删除
在Hibernate3以后支持hql的update与delete操作。可参考度娘。
一级缓存优化
一级缓存也叫做session缓存,在一个hibernate session有效,这级缓存的可干预性不强,大多于hibernate自动管理,但它提供清除缓存的方法,这在大批量增加(更新)操作是有效果的,例如,同时增加十万条记录,按常规进行,很可能会出现异常,这时可能需要手动清除一级缓存,session.evict以及session.clear。
检索策略(抓取策略)
延迟加载
延迟加载是Hibernate为提高程序执行的效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。load方法采用的策略是延迟加载;get方法采用的策略是立即加载。
检索策略分为两种:
类级别检索
关联级别检索
类级别检索
类级别检索是通过session直接检索某一类对应的数据,例如:
Customer c = session.load(Customer.class, 1);
或
session.createQuery(from Order);
类级别检索策略分为立即检索与延迟检索,默认是延迟检索,类级别的检索策略可以通过class元素的lazy属性来设置,默认值是true。所以我们可在hbm映射配置文件中设置如下:
class name=Customer table=t_customer catalog=hibernateTest lazy=true
...
/class
除此之外,我们也可在PO类中使用@Proxy注解,例如:
@Proxy(lazy = true)
public class Customer {
...
}
现在我着重来讲一下在PO类中@Proxy注解的使用。提示,以下所有案例代码的编写都是建立在Hibernate检索方式概述一文案例基础之上的。首先将@Proxy(lazy = true)这样的注解加在PO类——Customer类上,这样Customer类的代码就变成:
// 客户 ---- 一的一方
@Entity
@Table(name=t_customer)
@NamedQuery(name=myHql, query=from Customer)
// @SqlResultSetMapping注解才真正帮我们去规定执行sql语句如何将结果封装到Customer对象
@SqlResultSetMapping(name=customerSetMapping,entities={ @EntityResult(entityClass=Customer.class,fields={
@FieldResult(name=id,column=id),@FieldResult(name=name,column=name) }) })
// fields指定类里面的每一个属性跟表中的列是如何对应的
@NamedNativeQuery(name=findCustomer,query=select * from t_customer,resultSetMapping=customerSetMapping)
// resultSetMapping需要指定一个名字,它用来指定结果如何封装的操作
@Proxy(lazy = true)
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id; // 主键
private String name; // 姓名
// 描述客户可以有多个订单
/*
*
您可能关注的文档
- Heat Exchangers(换热器).ppt
- hedge fund对冲基金.ppt
- hebaofeng_第06章JAVA异常处理_2012100895853.ppt
- 来来往往的汽车方案一.ppt
- heizer10e_ch04 运营管理 PPT (10th Edition) by Jay Heizer and Barry Render.ppt
- 杨寻:广告教学设计与图片.doc
- Heathly lifestyle健康的生活方式.doc
- 杜甫诗三首_课件.ppt
- heat pipe 设计原理及制造.ppt
- heizer10e_ch06 运营管理 PPT (10th Edition) by Jay Heizer and Barry Render.ppt
- 第12课 大一统王朝的巩固 课件(20张ppt).pptx
- 第17课 君主立宪制的英国 课件.pptx
- 第6课 戊戌变法 课件(22张ppt).pptx
- 第三章 物态变化 第2节_熔化和凝固_课件 (共46张ppt) 人教版(2024) 八年级上册.pptx
- 第三章 物态变化 第5节_跨学科实践:探索厨房中的物态变化问题_课件 (共28张ppt) 人教版(2024) 八年级上册.pptx
- 2025年山东省中考英语一轮复习外研版九年级上册.教材核心考点精讲精练(61页,含答案).docx
- 2025年山东省中考英语一轮复习(鲁教版)教材核心讲练六年级上册(24页,含答案).docx
- 第12课近代战争与西方文化的扩张 课件(共48张ppt)1.pptx
- 第11课 西汉建立和“文景之治” 课件(共17张ppt)1.pptx
- 唱歌 跳绳课件(共15张ppt内嵌音频)人音版(简谱)(2024)音乐一年级上册第三单元 快乐的一天1.pptx
文档评论(0)