hibernate高级应用.ppt

上传人:牧羊曲112 文档编号:6507055 上传时间:2023-11-07 格式:PPT 页数:27 大小:206.50KB
返回 下载 相关 举报
hibernate高级应用.ppt_第1页
第1页 / 共27页
hibernate高级应用.ppt_第2页
第2页 / 共27页
hibernate高级应用.ppt_第3页
第3页 / 共27页
hibernate高级应用.ppt_第4页
第4页 / 共27页
hibernate高级应用.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《hibernate高级应用.ppt》由会员分享,可在线阅读,更多相关《hibernate高级应用.ppt(27页珍藏版)》请在三一办公上搜索。

1、Hibernate高级应用,主讲人:杨云振,Hibernate事务和并发处理Hibernate缓存策略批量处理延迟加载,课程内容,什么是事务?单个逻辑工作单元,它包含一系列的操作。事务的特性(ACID)原子性一致性隔离性持久性,事务,1.脏读取(Dirty Reads)一个事务读取了另一个事务未提交的数据2.不可重复读(Non-repeatable Reads)一个事务再次读取之前曾读过的数据时,发现该数据已经被另一个提交的事务修改3.虚读(幻读)一个事务重新执行一个查询,返回一套符合条件的记录,但这些记录中包含了因为其他最近提交的事务而产生的新记录,数据操作过程引发的问题?,1.脏读取(Di

2、rty Reads),2.不可重复读,虚读(幻读),数据库事务管理隔离级别,什么是事务的隔离级别?数据库通过某种机制,在多个并行的事务之间进行隔离,使每个事务在执行过程中保存独立.,从上到下严密程度递增,性能递减,Hibernate是JDBC轻量级的封装,本身不具备事务的管理能力,在事务管理层委托给底层的JDBC或JTA进行事务的管理和调度。1.基于JDBC的事务管理,Hibernate事务管理,JDBC的事务是有Connection管理的,事务的周期依赖于Connection的生命周期。而Session依托于Connection实现的,事务局限与session的生命周期。提供了跨越sessi

3、on的事务管理能力。,基于JTA的事务管理。,Hibernate隔离级别的设置,在hibernate的配置文中配置隔离级别 4 隔离级别与它们的代表数字如下,悲观锁(perssimistic locking)在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制。乐观锁(optimistic locking)乐观锁并没有对任何操作加锁,它只是在事务更新记录时,对事务进行检查,看从上一次读取这条记录后,它是否被其他事务修改.,Hibernate中锁机制,悲观锁是解决事务并发的一种方法,悲观锁是在更新数据时把记录锁住,防止其他事务读写这个记录.Hibernate的加锁模式

4、有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.使用时间戳

5、实现乐观锁3.对比字段值实现乐观锁其中已使用version的方法最为常用。步骤:1.首先为映射文件(xx.hbm.xml)中的class节点添加optimistic-lock属性2.在Id节点下添加version节点,Hibernate中的乐观锁,缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。ORM缓存策略1.事务级缓存(session level cache)session生命周期的缓存,关闭session即消亡2.应用级/进程级缓存(sessionFactory level cache)某个应用中的共享缓存,多个事务可以共享,

6、在sessionFactory层实现,所有sessionFactory创建的session可以共享.3.分布式缓存多个JVM共享的缓存,通过远程机制实现缓存数据同步,任意实例修改数据,所有的JVM都要更新缓存.,缓存机制,1.内部缓存(session level)一级缓存是事务级的缓存,session中维护的一个Map,Map的key是包含了数据类型和id,从数据库加载的数据都会进入Map缓存中,通过session加载数据时会先在session缓存里找,一级缓存是session的private数据,session实例消亡就清除了,在应用中就保持在一次请求的开始和结束之间.一般由Hibernat

7、e自动维护,也支持手动维护session.evit(Object obj)将持久化对象从一级缓存中清除.session.clear()清空一级缓存session.contains(Object obj)判断指定的对象是否存在于一级缓存中.session.flush()刷新一级缓存区的内容,使缓存与数据库数据保持同步.,Hibernate缓存(一),2.二级缓存(sessionFactory level)包含了应用级和分布式的缓存,由本sessionFactory的所有session实例共享,session操作时会先查一级缓存,然后查二级缓存,最后再查物理数据库.要使用二级缓存必须要进行配置.,

8、Hibernate缓存(二),1.不会被其他应用修改包括直接用JDBC修改等,因为其他应用修改了数据之后hibernate并不知道,不能自动更新缓存,不过可以手动更新缓存2.数据大小可以接受,毕竟内存资源也不多3.数据更新频率低(比如数据字典等常量数据)4.可能被系统频繁使用5.非关键的数据6.不会被并发访问的数据,适合用缓存的数据,EHCache org.hibernate.cache.EhCacheProviderOSCache org.hibernate.cache.OSCacheProviderSwarmCahe org.hibernate.cache.SwarmCacheProvid

9、er 提供了分布式JBossCache org.hibernate.cache.TreeCacheProvider 提供了分布式,常用的二级缓存插件,步骤1.首先要在配置,启用二级缓存2.然后配置cache的配置文件ehcache.xml 3.最后要在映射文件中指定实体的缓存同步策略,Hibernate的二级缓存的配置,org.hibernate.cache.EhCacheProvider true,配置,maxElementsInMemory为缓存对象的最大数目,eternal设置是否永远不过期,timeToIdleSeconds对象处于空闲状态的最多秒数,timeToLiveSeconds

10、对象处于缓存状态的最多秒数,overflowtodisk内存不足时是否启用磁盘缓存,配置缓存配置文件(ehcache.xml),配置映射文件,Usage属性表示:缓存同步策略read-only:只读 nonstrict-read-write:更新频率高read-write:严格可读写transactional(Ecache不支持):事务型缓存,场景:使用hibernate将100000条记录插入一个数据库中 session session=sessionfactory.opensession();Transaction tx=session.beginTransaction();for(int

11、 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=sessionF

12、actory.openStatelessSession();该接口的方法与session 类似.3.Query.executeUpdate()执行批量更新,会清除相关联的类二级缓存,也可能会造成级联和乐观锁定问题Query query=session.createQuery(“update User info u set birthDay=:bd”).setDate(“bd”,new Date();query.executeUpdate();,批量处理的方法(二),延时加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载是当真正需要数据的时候,才真正执行数据加载操作,在hibernate中提供了实体对象的延迟加载以及对集合的延迟加载,另外在hibernate3中还提供了对属性的延迟加载。是通过设置属性lazy=true来实现的。,延时加载,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号