SSH企业培训之数据抓取策略与高速缓存.ppt

上传人:小飞机 文档编号:5449443 上传时间:2023-07-08 格式:PPT 页数:23 大小:379KB
返回 下载 相关 举报
SSH企业培训之数据抓取策略与高速缓存.ppt_第1页
第1页 / 共23页
SSH企业培训之数据抓取策略与高速缓存.ppt_第2页
第2页 / 共23页
SSH企业培训之数据抓取策略与高速缓存.ppt_第3页
第3页 / 共23页
SSH企业培训之数据抓取策略与高速缓存.ppt_第4页
第4页 / 共23页
SSH企业培训之数据抓取策略与高速缓存.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《SSH企业培训之数据抓取策略与高速缓存.ppt》由会员分享,可在线阅读,更多相关《SSH企业培训之数据抓取策略与高速缓存.ppt(23页珍藏版)》请在三一办公上搜索。

1、数据抓取策略与高速缓存,介绍,讲授:刘晓涛Email:Blog:,数据加载策略与优化。高速缓存讨论(含批量处理)。对象同一性。复合主键。触发器/数据库生成值的处理。计算列的处理。,本章目标,数据加载策略与优化,延迟加载加载代理(往往是ID),真正用到数据时才加载关联数据。lazy=“true”,默认值。即时加载一条SQL语句连接查询,fetch=“join”。两条SQL语句单独查询,fetch=“select”。批量加载设置batch-size属性。,Hibernate抓取策略,1.保持默认,同fetch=select,如:fetch=select,另外发送一条select语句抓取当前对象关联

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

3、联集合,合适的时候使用子查询。6.batch-szie在上的应用batch-size属性,可以批量加载实体类,参见:7.batch-szie在集合上的应用batch-size属性,可以批量加载实体类,参见:,hibernate一级缓存,一级缓存和session的生命周期一致下面方法支持一级缓存:get()load()iterate(缓存实体对象而不是属性)如何管理一级缓存:session.clear()session.evict()如何避免一次性大量的实体数据入库导致内存溢出先flush,再clear如果数据量特别大,考虑采用jdbc实现,如果jdbc也不能满足要求可以考虑采用数据本身的特定导

4、入工具。,hibernate二级缓存,也称为进程级的缓存或SessionFactory级缓存,可以被所有的session共享二级缓存的生命周期和SessionFactory的生命周期一致。二级缓存的配置和使用:将echcache.xml文件拷贝到src下开启二级缓存,修改文件true指定缓存产品提供商,修改文件指定那些实体类使用二级缓存(两种方法)在映射文件中采用标签在文件中,采用标签二级缓存是缓存实体对象的,对象同一性,同一性概念数据库中一条记录在内存中应该只有一种表示。同一性级别事务(session)级别。过程(SessionFactory)级别(多个session中保证同一性)。JVM级

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

6、blic class FiscalYearPeriod private FiscalYearPeriodPK fiscalYearPeriodPK;private Date beginDate;private Date endDate;/getXxx()/setXxx(),主键类,public class FiscalYearPeriodPK implements Serializable private int fiscalYear;/核算年private int fiscalPeriod;/核算月/getXxx()/setXxx(),覆盖hashCode()方法,hashCode(给对象产

7、生OID)。Overridepublic int hashCode()final int prime=31;int result=1;result=prime*result+fiscalPeriod;result=prime*result+fiscalYear;return result;,覆盖equals()方法,Overridepublic boolean equals(Object obj)if(this=obj)return true;if(obj=null)return false;if(getClass()!=obj.getClass()return false;final Fis

8、calYearPeriodPK other=(FiscalYearPeriodPK)obj;if(fiscalPeriod!=other.fiscalPeriod)return false;if(fiscalYear!=other.fiscalYear)return false;return true;,映射文件,save(),session.beginTransaction();FiscalYearPeriod fiscalYearPeriod=new FiscalYearPeriod();FiscalYearPeriodPK pk=new FiscalYearPeriodPK();pk.s

9、etFiscalYear(2009);pk.setFiscalPeriod(3);fiscalYearPeriod.setFiscalYearPeriodPK(pk);fiscalYearPeriod.setBeginDate(new Date();fiscalYearPeriod.setEndDate(new Date();session.save(fiscalYearPeriod);session.getTransaction().commit();,load(),session.beginTransaction();FiscalYearPeriodPK pk=new FiscalYear

10、PeriodPK();pk.setFiscalYear(2009);pk.setFiscalPeriod(3);FiscalYearPeriod fiscalYearPeriod=(FiscalYearPeriod)session.load(FiscalYearPeriod.class,pk);System.out.println(fiscalYearPeriod.getPeriodSts();session.getTransaction().commit();,数据库生成值的处理,*update=“false”insert=“false”该列不会出现在insert/update语句中,是只读的。*generated:立即执行一个select获取数据库生成的值,触发器,如果没有设置generated=“”,就需要显式地再查询:session.save(object);session.flush();session.refresh(object);/获取触发器的结果。,默认的属性值,*default:设置默认值,计算列(衍生属性)的处理,formula属性可以是表达式/SQL函数/SQL子查询。,总结,数据加载策略与优化。高速缓存讨论(含批量处理)。对象同一性。复合主键。触发器/数据库生成值的处理。计算列的处理。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号