




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hibernate高级应用,主讲人:杨云振,Hibernate事务和并发处理 Hibernate缓存策略 批量处理 延迟加载,课程内容,什么是事务? 单个逻辑工作单元,它包含一系列的操作。 事务的特性(ACID) 原子性 一致性 隔离性 持久性,事务,1.脏读取(Dirty Reads) 一个事务读取了另一个事务未提交的数据 2.不可重复读(Non-repeatable Reads) 一个事务再次读取之前曾读过的数据时,发现该数据已经被另一个提交的事务修改 3.虚读(幻读) 一个事务重新执行一个查询,返回一套符合条件的记录,但这些记录中包含了因为其他最近提交的事务而产生的新记录,数据操作过程引发的问题?,1.脏读取(Dirty Reads),2.不可重复读,虚读(幻读),数据库事务管理隔离级别,什么是事务的隔离级别? 数据库通过某种机制,在多个并行的事务之间进行隔离,使每个事务在执行过程中保存独立.,从上到下严密程度递增,性能递减,Hibernate是JDBC轻量级的封装,本身不具备事务的管理能力,在事务管理层委托给底层的JDBC或JTA进行事务的管理和调度。 1. 基于JDBC的事务管理,Hibernate事务管理,JDBC的事务是有Connection管理的,事务的周期依赖于Connection的生命周期。而Session依托于Connection实现的,事务局限与session的生命周期。 提供了跨越session的事务管理能力。,基于JTA的事务管理。,Hibernate隔离级别的设置,在hibernate的配置文中配置隔离级别 4 隔离级别与它们的代表数字如下,悲观锁(perssimistic locking) 在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制。 乐观锁(optimistic locking) 乐观锁并没有对任何操作加锁,它只是在事务更新记录时,对事务进行检查,看从上一次读取这条记录后,它是否被其他事务修改.,Hibernate中锁机制,悲观锁是解决事务并发的一种方法,悲观锁是在更新数据时把记录锁住,防止其他事务读写这个记录. Hibernate的加锁模式有 LockMode.NONE(无锁机制) LockMode. WRITE:当向数据库中插入或更新数据时,Hibernate会自动使用这种锁。 LockMode.READ:Hibernate在读取记录时自动获取 注:以上三种机制为Hibernate 内部对数据的锁定机制,与数据库无关。 LockMode.UPGRADE:利用数据库的for update子句加锁 LockMode.UPGRADE_NOWAIT:Oralce的特定实现,利用oracle的for update nowait子句加锁,悲观锁机制,Hibernate提供了三种方法来检查数据是否发生了变化。 1.使用version实现乐观锁 2.使用时间戳实现乐观锁 3.对比字段值实现乐观锁 其中已使用version的方法最为常用。 步骤: 1.首先为映射文件(xx.hbm.xml)中的class节点添加 optimistic-lock属性 2.在Id节点下添加version节点 ,Hibernate中的乐观锁,缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。 ORM缓存策略 1.事务级缓存(session level cache) session生命周期的缓存,关闭session即消亡 2.应用级/进程级缓存(sessionFactory level cache) 某个应用中的共享缓存,多个事务可以共享,在sessionFactory层实现,所有sessionFactory创建的session可以共享. 3.分布式缓存 多个JVM共享的缓存,通过远程机制实现缓存数据同步,任意实例修改数据,所有的JVM都要更新缓存.,缓存机制,1.内部缓存(session level) 一级缓存是事务级的缓存,session中维护的一个Map,Map的key是包含了数据类型和id,从数据库加载的数据都会进入Map缓存中,通过session加载数据时会先在session缓存里找,一级缓存是session的private数据,session实例消亡就清除了,在应用中就保持在一次请求的开始和结束之间. 一般由Hibernate自动维护,也支持手动维护 session.evit(Object obj) 将持久化对象从一级缓存中清除. session.clear() 清空一级缓存 session.contains(Object obj) 判断指定的对象是否存在于一级缓存中. session.flush() 刷新一级缓存区的内容,使缓存与数据库数据保持同步.,Hibernate缓存(一),2.二级缓存(sessionFactory level) 包含了应用级和分布式的缓存,由本sessionFactory的所有session实例共享,session操作时会先查一级缓存,然后查二级缓存,最后再查物理数据库.要使用二级缓存必须要进行配置.,Hibernate缓存(二),1.不会被其他应用修改 包括直接用JDBC修改等,因为其他应用修改了数据之后hibernate并不知道,不能自动更新缓存,不过可以手动更新缓存 2.数据大小可以接受,毕竟内存资源也不多 3.数据更新频率低(比如数据字典等常量数据) 4.可能被系统频繁使用 5.非关键的数据 6.不会被并发访问的数据,适合用缓存的数据,EHCache org.hibernate.cache.EhCacheProvider OSCache org.hibernate.cache.OSCacheProvider SwarmCahe org.hibernate.cache.SwarmCacheProvider 提供了分布式 JBossCache org.hibernate.cache.TreeCacheProvider 提供了分布式,常用的二级缓存插件,步骤 1. 首先要在hibernate.cfg.xml配置,启用二级缓存 2. 然后配置cache的配置文件ehcache.xml 3.最后要在映射文件xxx.hbm.xml中指定实体的缓存同步策略,Hibernate的二级缓存的配置, org.hibernate.cache.EhCacheProvider true ,配置Hibernate.cfg.xml, maxElementsInMemory为缓存对象的最大数目, eternal设置是否永远不过期, timeToIdleSeconds对象处于空闲状态的最多秒数, timeToLiveSeconds对象处于缓存状态的最多秒数, overflowtodisk内存不足时是否启用磁盘缓存,配置缓存配置文件(ehcache.xml),配置映射文件xx.hbm.xml,Usage属性表示:缓存同步策略 read-only:只读 nonstrict-read-write:更新频率高 read-write:严格可读写 transactional(Ecache不支持):事务型缓存,场景: 使用hibernate将100000条记录插入一个数据库中 session session=sessionfactory.opensession(); Transaction tx=session.beginTransaction(); for(int i=0;i100000;i+) Person p=new Person(.); session.save(p); mit(); session.close();,批量处理,这段程序运行到50000条时,就会内存溢出。,1.清理缓存:只要在session.save(p)之后添加: if(i%20=0) session.flush();/将缓存中的对象同步到数据库 session.clear(); ,批量处理的方法(一),2.使用StatelessSession接口: 它不和一级缓存,二级缓存交互,也不触发任何时间,监听器,通过该接口的操作会立即发送给数据库。 StatelessSession s=sessionFactory.openStatelessSession(); 该接口的方法与session 类似. 3.Query.executeUpdate()执行批量更新,会清除相关联的类二级缓存,也可能会造成级联和乐观锁定问题 Query query = session .createQuery(“update User info u set birthDay=:bd”).setDate(“bd”,n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于抗药性基因编辑技术的甲维盐靶标位点筛选策略
- 基于AI的批次间质量一致性动态监测模型构建
- 后端依赖链断裂导致的前端加扰器失效的熔断机制
- 后处理工艺对金属粉末烧结转子组件表面粗糙度的控制阈值
- 反垃圾邮件系统伦理困境:过度拦截对用户权益的侵蚀
- 双碳目标下余热回收与制冷系统耦合度建模
- 功率油耗仪在碳中和目标下的碳足迹追踪机制优化研究
- 2025年度广东省云浮市专业技术人员继续教育公需科目试卷及答案
- 服装材质识别技术-洞察及研究
- 2025年版隐名投资合同范本
- 《商务分析方法与工具》课程教学大纲
- 模块化硬件设计方案
- 高中日语开学第一课导入课课件
- 气瓶检验员考试题
- 商户二次装修管理方案及管控要点概述
- 初中英语写作教学专题讲座
- 立志追梦圆梦!(航天员桂海潮班会)
- 反恐C-TPAT程序文件整套(通用)
- 大学通用俄语1
- 液化气站年度安全教育培训计划及考试试题
- 大陆法系和英美法系的比较优质课件
评论
0/150
提交评论