版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、是目前 web 编程第一语言,欢迎详情查看 htt韩顺平老师力作,1.懒加载是什么? 为什么需要懒加载?2.如何解决懒加载问题为什么需要缓存?看一个案例:-原理图从上图看出: 当去查询对象的时候,首先到一级缓存去取数据,如果有,则不到数据库中取,如果没有则到数据库中取,同时在一级缓存中放入对象.一级缓存的细节 什么操作会向一级缓存放入数据save,update,saveOrUpda save 案例:/添加一个学生oad,get,list,iteraockStudent student=new Student();student.setName();s.save(student);/放入一级缓存
2、/我马上查询Student stu2=(Student) s.get(Student.class, student.getId(); /select System.out.prln(你刚刚加入的学生名字是+stu2.getName(); 什么操作会从一级缓存取数据.get / load / listget / load 会首先从一级缓存中取,如没有.再有不同的操作get 会立即向数据库发请求,而load 会返回一个?list 会不会从 ses案例:/查询 45 号学生对象,直到用户真的去使用数据,才会向数据库发请求缓存取数据?Student stu=(Student) s.get(Studen
3、t.class, 45);System.out.prln(|);String hql=from Student where id=45;Student stu2=(Student) s.createQuery(hql).uniqueResult();System.out.prln(stu2.getName();从上面的案例,我看出 query.list() query.uniueResut() 不会从一级缓取数据! 但是 query.list或者 query.uniqueRestu() 会向一级缓存放数据的. 一级缓存不需要配置,就可以使用,它本身没有保护机制,所以程序员要考虑这个问题,可以同
4、 evict 或者 clear 来清除 ses缓存中对象. evict 是清除一个对象,clear是清除所有的 se缓存对象 ses级缓存中对象的生命周期, 当 ses关闭后,就自动销毁.自己用HashMap 来模拟一个 Ses缓存,加深对缓存的深入.package com.hsp.view;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MyCache /使用 map 来模拟缓存sic Map maps=new Has
5、hMap();public sic void main(String args) / TODO Auto-generated method stubgetStudent(1); getStudent(1); getStudent(1); getStudent(1); getStudent(3);getStudent(3);public sic Student getStudent(eger id)/s.get()/先到缓存去 if(maps.containsKey(id)/在缓存有System.out.prln(从缓存取出); return maps.get(id);elseSystem.ou
6、t.prln(从数据库中取);/到数据库取Student stu=MyDB.getStudentFromDB(id);/放入缓存 maps.put(id, stu); return stu;/数据库class MyDBsic List lists=newArrayList();/初始化数据库,假设有三个学生 sicStudent s1=new Student(); s1.setId(1); s1.setName(aaa); Student s2=new Student(); s2.setId(2); s2.setName(bbb); Student s3=new Student(); s3.s
7、etId(3); s3.setName(ccc); lists.add(s1);lists.add(s2);lists.add(s3);public sic Student getStudentFromDB( for(Student s: lists)if(s.getId().equals(id) return s;return null;/ 在数据库中没有.eger id)class Studentprivateeger id;private String name;publiceger getId() return id;public void setId(eger id) this.id
8、 = id;public String getName() return name;public void setName(String name) = name;为什么需要二级缓存?因为一级缓存有限(生命周期短),所以题需要二级缓存(SesFactory 缓存)来弥补这个问1.2.3.需要配置二级缓存是交给第二级缓存的原理去处理,常见的Hashtable , OSCache , EHCache4.二级缓存的对象可能放在内存,也可能放在磁盘.快速入门案例使用 OsCache 来演示二级缓存的使用.1.配置二级缓存对配置说明:updatetrue.hibernate.cach
9、e.OSCacheProvidermap/Student.hbm.xml /2. 可以文件放在 src 目录下,这样你可以指定放入二级缓存的对象capacity 大小. 默认 10003 使用/ TODO Auto-generated method stub/通过获取一个 se,让 hibernate 框架运行(config-加载 hibernate.cfg.xml)SesTrans=null;ion tx=null;try /使用基础模板来讲解.s=HibernateUtil.openSes();tx=s.begranion();/查询 45 号学生Student stu1=(Student
10、) s.get(Student.class, 45);/45-一级缓存System.out.prln(stu1.getName();mit(); catch (Exception e) e.prStackTrace(); if(tx!=null)tx.rollback();finallyif(s!=null & s.isOpen() s.close();System.out.prln(*);try /使用基础模板来讲解.s=HibernateUtil.openSes();tx=s.begranion();/查询 45 号学生Student stu1=(Student) s.get(Studen
11、t.class, 45);System.out.prln(stu1.getName();Student stu3=(Student) s.get(Student.class, 46);System.out.prln(stu3.getName();mit(); catch (Exception e) e.prStackTrace(); if(tx!=null)tx.rollback();finallyif(s!=null & s.isOpen() s.close();/完成一个统计,统计的信息在 Sessfactory/SesFactory 对象.Sistics sistics= Hiberna
12、teUtil.getSesFactory().getSistics();System.out.pr System.out.pr System.out.prSystem.out.prln(sistics); ln(放入+sln(命中+sln(错过+sistics.getSecondLevelCachePount();istics.getSecondLevelCacheHitCount();istics.getSecondLevelCacheMissCount();3. 在配置了二级缓存后,请大家要注意可以通过 Sistics,查看你的配置高不高主键增长策略 increment自增,每次增长 1,
13、 适用于所有数据库. 但是不要使用在多进程,主键类型是数值型select max(id) from Student identity自增,每次增长 1, 适用于支持 identity 的数据(数值 sequence native会根据数据类型来选择,使用 identity,sequence,sql server), 主键类型是,hiloselect hibernate_sequence.nextval from dual主键类型是数值 long , short ,id name=id type=java.lang. hiloegerhilo 标识符用法:由 Hibernate 按照一种 hig
14、h/low 算法生成标识符id name=”id” type=”java.lang.eger” column=”ID”my_hi_valuenext_value uuid会根据 uuid 算法,生成 128-bit 的字串主键属性类型不能是数值型,而是字串型 assigned用户自己设置主键值,所以主键属性类型可以是数值,字串在复合主键foreignone-to-one 的关系中,有另一张表的主键() 来决定 自己主键/ 外键( IdCard)给出一个简单原则:针对 oracle 主键是 uuid 或者 assinged/long/short 建议使用sequence 主键是 String 使用针对主键是/long/short 建议使用 increment/assigend ,如果是字串 UUId/assigned针 对 主 键 是/long/shor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度新型农用拖拉机进口代理销售合同4篇
- 二零二五年度ktv室内装修消防设计审核合同3篇
- 二零二五年度教育培训机构退款合同协议正规范本2025年版
- 二零二五年度WPS文档定制化租赁合同修订版3篇
- 二零二五年度充电桩安装工程节能评估合同4篇
- 2025年个人住宅买卖合同(含物业交割)2篇
- 2025年度智慧停车场运营管理承包合同4篇
- 2025年度水暖工程安全质量监督及验收合同
- 二零二五年度房产抵押贷款风险管理与服务合同4篇
- 2025年度暖气片销售区域代理合同模板
- 非ST段抬高型急性冠脉综合征诊断和治疗指南(2024)解读
- 煤矿反三违培训课件
- 向流程设计要效率
- 安全文明施工的管理要点
- 2024年中国航空发动机集团招聘笔试参考题库含答案解析
- 当代中外公司治理典型案例剖析(中科院研究生课件)
- 动力管道设计手册-第2版
- 2022年重庆市中考物理试卷A卷(附答案)
- Python绘图库Turtle详解(含丰富示例)
- 煤矿机电设备检修技术规范完整版
- 榆林200MWp并网光伏发电项目可行性研究报告
评论
0/150
提交评论