HQL查询PPT学习课件_第1页
HQL查询PPT学习课件_第2页
HQL查询PPT学习课件_第3页
HQL查询PPT学习课件_第4页
HQL查询PPT学习课件_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

HQL查询,目录,1Hibernate的批量处理2HQL查询及条件查询3事务控制4二级缓存和查询缓存5本讲小结,2,Hibernate的批量处理,为什么要采用批量处理?Hibernate的Session持有一个必选的一级缓存当一次处理的数据量超过一级缓存容量时,会引发OutOfMemoryException,3,Sessionsession=sessionFactory.openSession();Transactiontx=session.beginTransaction();for(inti=0;i100000;i+)Customercustomer=newCustomer(.);session.save(customer);mit();session.close(),这段程序大概运行到50,000条记录左右会失败并抛出内存溢出异常(OutOfMemoryException)。这是因为Hibernate把所有新插入的客户(Customer)实例在session级别的缓存区进行了缓存的缘故。,4,演示出错示例,出错示例,5,批量处理的方式,及时清理session缓冲区,有两种方法设置JDBCBatchsize执行批量处理并且想要达到一个理想的性能,将JDBC的批量抓取数量(batchsize)参数设置到一个合适值清理缓存完全关闭二级缓存:,hibernate.jdbc.batch_size20,hibernate.cache.use_second_level_cachefalse,6,批量处理的方式,Sessionsession=sessionFactory.openSession();Transactiontx=session.beginTransaction();for(inti=0;i(selectavg(person.weight)fromManagerperson),fromPersonaspwhere(,p.age)notin(,m.agefromMangerm),22,命名查询,将HQL语句放入配置文件中可以大大提高程序的解耦,23,HQL查询总结,简单属性查询单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致数组的长度取决与select中属性的个数如果认为返回数组不够对象化,可以采用hql动态实例化指定对象,24,HQL查询总结,关于查询中的参数传递:可以采用拼字符串的方式传递参数可以采用?来传递参数(索引从0开始)可以采用:参数名来传递参数如果传递多个参数,可以采用setParamterList方法在hql中可以使用数据库的函数,如:date_formateg:date_format(s.createTime,%Y-%m)=?,25,条件查询,条件查询是更具面向对象特色的数据查询方式。条件查询的步骤:获得Hibernate的Session对象以Session对象创建Criteria对象使用Restrictions的静态方法创建Criterion查询条件向Criterion查询添加Criterion查询条件执行Criteria的list()或uniqueResult()方法返回结果集,26,条件查询示例,查询实体Student中属性name为大于a的记录列表,27,直接使用SQL查询Hibernate还支持使用SQL查询,使用SQL查询可以利用某些数据库的特性,或者用于将原有的JDBC应用迁移到Hibernate应用上。使用命名的SQL查询还可以将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。如果是一个新的应用,通常不要使用SQL查询。SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口的子接口,因此完全可以调用Query接口的方法:setFirstResult(),设置返回结果集的起始点。setMaxResults(),设置查询获取的最大记录数。list(),返回查询到的结果集。,28,其他查询,SQL查询,29,目录,1Hibernate的关联映射2Hibernate的批量处理3HQL查询及条件查询4事务控制5二级缓存和查询缓存6本讲小结,30,事务的概念,事务的概念事务是最小的逻辑执行单元整个事务的执行不能分开执行要么同时执行,要么同时放弃执行。事务的特性(ACID)原子性一致性隔离性持续性Hibernate默认事务:JDBCTransaction,31,Session与事务,从编程的角度看,Hibernate的事务由Session对象开启。从底层实现来看,Hibernate事务由TransactionFactory的实例来产生。Hibernate建议采用每个请求对应一次Session的模式。,32,上下文相关的Session,getCurrentSession创建的session会绑定到当前线程,而openSession不会。getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭。如果要使用getCurrentSession,需要在hibernate.cfg.xml配置。,33,上下文相关的Session,getCurrentSession设置本地事务时,要在hibernate.cfg.xml文件里进行如下设置:threadjta对于Hibernate的Session和事务管理,Spring框架提供了非常完美的解决方案。,34,目录,1Hibernate的关联映射2Hibernate的批量处理3HQL查询及条件查询4事务控制5二级缓存和查询缓存6本讲小结,35,缓存管理,缓存的概念物理载体一般是内存一级缓存Session(会溢出,需要处理)由Hibernate管理二级缓存sessionFactory管理需要手动配置Hibernate3和Hibernate4的配置方式不同,36,数据缓存,1、数据缓存概述在特定的硬件基础上,缓存(Cache)往往是提升系统性能的关键因素。而对于ORM实现而言,缓存则显得尤为重要,它是持久层性能提升的关键。相对JDBC数据存取,ORM实现往往需要借助更复杂的机制,以实现内部状态的管理、OR关系的映射等。缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库与数据访问层之间。,37,数据库访问层,DataCache,Database,38,2、数据缓存策略一般而言,ORM的数据缓存应包含如下几个层次:(1)事务级缓存(2)应用级/进程级缓存(3)分布式缓存,39,3、Hibernate数据缓存Hibernate数据缓存(Cache)分为两个层次,以Hibernate语义加以区分,可分为:(1)内部缓存(2)二级缓存Hibernate中,缓存将在以下情况中发挥作用:(1)通过主键加载数据时(2)延迟加载,40,内部缓存内部缓存在Hibernate中又称为一级缓存,属于事务级缓存。Session在内部维护了一个Map数据类型,此数据类型中保持了所有的与当前Session相关联的数据对象。这些Map数据结构中维护了当前Session中所有相关PO的状态,属于Session的私有数据,伴随Session实例的创建而创建,消亡而消亡。,41,二级缓存在Hibernate中,二级缓存涵盖了应用级缓存和分布式缓存领域二级缓存将由从属于SessionFactory的所有Session实例共享。Hibernate本身并未提供二级缓存的产品化实现而是为众多的第三方缓存组建提供了接口。,42,Hibernate3二级缓存配置步骤,43,Hibernate4二级缓存配置步骤,在Hibernate.cfg.xml文件中配置true导入Hibernate4liboptionalehcache目录下的jar:在Hibernate.cfg.xml文件中配置org.hibernate.cache.ehcache.EhCacheRegionFactory在要缓存的实体类映射文件中添加在项目src目录下添加ehcache.xml,44,查询缓存,一级、二级缓存都是对整个实体进行缓存,它不会缓存普通属性;如果想对普通属性进行缓存,则可以考虑使用查询缓存。查询缓存不仅要求所使用

温馨提示

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

评论

0/150

提交评论