- 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
最近下载
- 【幼儿园】幼儿园创建“平安校园”实施方案.docx VIP
- 如何才能做到从思想上入党.pdf VIP
- 教学课件:教学设计与教案.ppt
- 浙江农村信用社招聘-2024温州乐清农商银行秋季招聘笔试备考试题及答案解析.docx
- 建筑结构施工图识读教案.pdf
- 2024小红书知识考核试题题库及答案.pdf VIP
- 青岛农业大学基础生物化学期末复习题导学资料.pdf
- 【新版教材】中学音乐人音版七年级下册《领航》课堂教学设计.docx
- 初中语文 2024年新疆乌鲁木齐市沙依巴克区中考语文适应性试卷.pdf
- HIKVISION海康威视白光全彩400万筒型网络摄像机DS-2CD3T46(D)WDV3-L.pdf
文档评论(0)