SSH企业培训之数据抓取策略与高速缓存ppt课件_第1页
SSH企业培训之数据抓取策略与高速缓存ppt课件_第2页
SSH企业培训之数据抓取策略与高速缓存ppt课件_第3页
SSH企业培训之数据抓取策略与高速缓存ppt课件_第4页
SSH企业培训之数据抓取策略与高速缓存ppt课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据抓取策略与高速缓存数据抓取策略与高速缓存 引见引见讲授:讲授:刘晓涛刘晓涛:lxt008163Blog:.csdn/liuxiaotao008MSN:lxt008live数据加载策略与优化。数据加载策略与优化。高速缓存讨论高速缓存讨论(含批量处理含批量处理)。对象同一性。对象同一性。复合主键。复合主键。触发器触发器/数据库生成值的处理。数据库生成值的处理。计算列的处理。计算列的处理。本章目标本章目标数据加载策略与优化数据加载策略与优化延迟加载延迟加载加载代理加载代理(往往是往往是ID),真正用到数据时才加载关联数据。,真正用到数据时才加载关联数据。lazy=“true”,默认值。默认值。即

2、时加载即时加载一条一条SQL语句连接查询语句连接查询,fetch=“join”。两条两条SQL语句单独查询语句单独查询,fetch=“select”。批量加载批量加载设置设置batch-size属性。属性。Hibernate抓取策略抓取策略1.保持默认,同保持默认,同fetch=select,如:如:fetch=select,另外发送一条另外发送一条select语句抓取当前对象关联实体或集合语句抓取当前对象关联实体或集合2.设置设置fetch=join,如:如:fetch=join,hibernate会通过会通过select语句使用外连接来加载其关联实体或集合语句使用外连接来加载其关联实体或集

3、合此时此时lazy会失效会失效3.保持默认,同保持默认,同fetch=select,如:如:fetch=select,另外发送一条另外发送一条select语句抓取当前对象关联实体或集合语句抓取当前对象关联实体或集合4.设置设置fetch=join,如:如:fetch=join,hibernate会通过会通过select语句使用外连接来加载其关联实体或集合语句使用外连接来加载其关联实体或集合此时此时lazy会失效会失效Hibernate抓取策略抓取策略5.设置设置fetch=subselect,如:如:fetch=“subselect”,另外发送一条另外发送一条select语句抓取在前面查询到的

4、所有语句抓取在前面查询到的所有实体对象的关联集合实体对象的关联集合,合适的时候使用子查询。合适的时候使用子查询。6.batch-szie在在上的应用上的应用batch-size属性,可以批量加载实体类,参见:属性,可以批量加载实体类,参见:Classes.hbm.xml7.batch-szie在集合上的应用在集合上的应用batch-size属性,可以批量加载实体类,参见:属性,可以批量加载实体类,参见:Classes.hbm.xmlhibernate一级缓存一级缓存一级缓存和一级缓存和session的生命周期一致的生命周期一致下面方法支持一级缓存:下面方法支持一级缓存:get()load()i

5、terate缓存实体对象而不是属性)缓存实体对象而不是属性)如何管理一级缓存:如何管理一级缓存:session.clear()session.evict()如何避免一次性大量的实体数据入库导致内存溢出如何避免一次性大量的实体数据入库导致内存溢出先先flush,再,再clear如果数据量特别大,考虑采用如果数据量特别大,考虑采用jdbc实现,如果实现,如果jdbc也不能满足要求可也不能满足要求可以考虑采用数据本身的特定导入工具。以考虑采用数据本身的特定导入工具。hibernate二级缓存二级缓存也称为进程级的缓存或也称为进程级的缓存或SessionFactory级缓存,可以被所有的级缓存,可以被

6、所有的session共享共享二级缓存的生命周期和二级缓存的生命周期和SessionFactory的生命周期一致。的生命周期一致。二级缓存的配置和使用:二级缓存的配置和使用:将将echcache.xml文件拷贝到文件拷贝到src下下开启二级缓存,修改开启二级缓存,修改hibernate.cfg.xml文件文件true指定缓存产品提供商,修改指定缓存产品提供商,修改hibernate.cfg.xml文件文件org.hibernate.cache.EhCacheProvider指定那些实体类使用二级缓存两种方法)指定那些实体类使用二级缓存两种方法)在映射文件中采用在映射文件中采用标签标签在在hibe

7、rnate.cfg.xml文件中,采用文件中,采用标签标签二级缓存是缓存实体对象的二级缓存是缓存实体对象的对象同一性对象同一性同一性概念同一性概念数据库中一条记录在内存中应该只有一种表示。数据库中一条记录在内存中应该只有一种表示。同一性级别同一性级别事务事务(session)级别。级别。过程过程(SessionFactory)级别多个级别多个session中保证同一性)。中保证同一性)。JVM级别。级别。分布式系统级别。分布式系统级别。Hibernate保证事务保证事务(session)级别的实体对象的同一性。其他级别的实体对象的同一性。其他级别不保证。级别不保证。复合主键类需要覆盖复合主键类

8、需要覆盖hashCode()和和equals()方法以保证对象的方法以保证对象的同一性。同一性。复合主键映射复合主键映射设计决策设计决策表最好加入一个与业务无关的列作为主键。表最好加入一个与业务无关的列作为主键。最好不使用自然键最好不使用自然键(如如User使用使用 user_name 作为主键作为主键),因为业务需求发生变化是很难重构数据模型。因为业务需求发生变化是很难重构数据模型。遗留数据库可能用两个或以上的列作为复合主键。遗留数据库可能用两个或以上的列作为复合主键。通常将复合主键相关的属性,单独放到一个主键类中通常将复合主键相关的属性,单独放到一个主键类中主键类必须实现序列化接口主键类必

9、须实现序列化接口(implements Serializable)。需要覆盖需要覆盖hashCode()和和equals()方法以保证对象的同一方法以保证对象的同一性。性。案例案例public class FiscalYearPeriod private FiscalYearPeriodPK fiscalYearPeriodPK;private Date beginDate;private Date endDate;/getXxx()/setXxx() 主键类主键类public class FiscalYearPeriodPK implements Serializable private i

10、nt fiscalYear; /核算年核算年private int fiscalPeriod; /核算月核算月/getXxx()/setXxx()覆盖覆盖hashCode()方法方法hashCode(给对象产生给对象产生OID)。Overridepublic int hashCode() final int prime = 31;int result = 1;result = prime * result + fiscalPeriod;result = prime * result + fiscalYear;return result;覆盖覆盖equals()方法方法Overridepubli

11、c boolean equals(Object obj) if (this = obj) return true; if (obj = null) return false; if (getClass() != obj.getClass() return false; final FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;if (fiscalPeriod != other.fiscalPeriod) return false; if (fiscalYear != other.fiscalYear) return false; ret

12、urn true;映射文件映射文件 save()session.beginTransaction(); FiscalYearPeriod fiscalYearPeriod = new FiscalYearPeriod();FiscalYearPeriodPK pk = new FiscalYearPeriodPK();pk.setFiscalYear(2021);pk.setFiscalPeriod(3);fiscalYearPeriod.setFiscalYearPeriodPK(pk); fiscalYearPeriod.setBeginDate(new Date(); fiscalYea

13、rPeriod.setEndDate(new Date(); session.save(fiscalYearPeriod); session.getTransaction()mit(); load()session.beginTransaction();FiscalYearPeriodPK pk = new FiscalYearPeriodPK();pk.setFiscalYear(2021);pk.setFiscalPeriod(3);FiscalYearPeriod fiscalYearPeriod = (FiscalYearPeriod)session.load(FiscalYearPe

14、riod.class, pk); System.out.println(fiscalYearPeriod.getPeriodSts(); session.getTransaction()mit();数据库生成值的处理数据库生成值的处理*update=“false” insert=“false该列不会出现在该列不会出现在insert/update语句中,是只读的。语句中,是只读的。* generated:立即执行一个:立即执行一个select获取数据库生成的获取数据库生成的值值触发器触发器如果没有设置如果没有设置generated=“” ,就需要显式地再查询:,就需要显式地再查询:session.save(object);session.flush();session.refresh(object);/获取触

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论