• 1. 第七章缓存及注解第三单元第1页/共25页
  • 2. 本章相关学习资源 《使用缓存提高查询性能》专题 《使用注解简化映射配置》专题 《升级新闻管理系统》相关专题 《使用Hibernate升级新闻管理系统》 第7章 《缓存及注解》 第2页/共25页学习平台“Hibernate实现数据持久化”课程学生用书
  • 3. 预习检查简述缓存的作用 简述Hibernate的缓存分类 列举完成实体类常用配置的注解第3页/共25页提问
  • 4. 本章任务任务1:使用一级缓存查询特定房屋信息 任务2:使用二级缓存和查询缓存 任务3:使用注解配置项目 任务4:升级新闻管理系统第4页/共25页
  • 5. 本章目标第5页/共25页使用一级缓存提高查询性能使用二级缓存提高查询性能使用查询缓存调高查询性能升级新闻管理系统点重点难使用注解完成项目配置点重
  • 6. 串讲:缓存缓存介于应用程序和永久性数据存储源之间 使用缓存,可以降低应用程序直接读写永久性数据存储源的频率,提高运行性能 第6页/共25页
  • 7. 串讲: Hibernate缓存Hibernate缓存分类 一级缓存(Session缓存) 二级缓存(SessionFactory的外置缓存) 查询缓存 缓存范围 事务范围 进程范围 集群范围 第7页/共25页提问
  • 8. 讲解:一级缓存一级缓存(Session缓存) 减少访问数据库的频率 保证数据库中记录与缓存中对象同步第8页/共25页//获得ID为1的学生信息 Student student=(Student)session.load(Student.class, 1); System.out.println(student.getSname()+"-"+student.getSex()); //在同一个Session范围内,再次获得ID为1的学生信息 Student student2=(Student)session.load(Student.class, 1); System.out.println(student2.getSname()+"-"+student2.getSex());select student0_.SID as SID1_0_,student0_.SNAME as SNAME1_0_, student0_.SEX as SEX1_0_ from STUDENT student0_ where student0_.SID=?两次查询Student对象,控制台只输出一句SQL,说明Session缓存降低了访问数据库的频率 演示示例:使用一级缓存
  • 9. 上机练习需求说明 租房系统中,查询ID为1的房屋基本信息 分析: 在同一个Session范围内两次查询ID为1的房屋基本信息 在不同Session范围内两次查询ID为1的房屋基本信息 控制台输出SQL语句,观察两者区别完成时间:15分钟共性问题集中讲解第9页/共25页练习
  • 10. 串讲:二级缓存二级缓存( SessionFactory的外置缓存) 可以被所有的Session共享 是可配置的插件第10页/共25页缓存插件缓存实现类是否支持 查询缓存类型EHCacheorg.hibernate.cache.EhCacheProvider是进程范围的缓存; 内存或硬盘OSCacheorg.hibernate.cache.OSCacheProvider是进程范围的缓存; 内存或硬盘SwarmCacheorg.hibernate.cache.SwarmCacheProvider否集群范围的缓存JBossCacheorg.hibernate.cache.TreeCacheProvider是集群范围的缓存
  • 11. 配置步骤 选择合适的缓存插件,配置其自带的配置文件 串讲:二级缓存第11页/共25页 演示示例:配置EHCache二级缓存 选择需要使用二级缓存的持久化类,设置它的二级缓存的并发访问策略12
  • 12. 串讲:二级缓存应用场景第12页/共25页适用场景不适用场景很少被修改的数据经常被修改的数据不是很重要的数据,允许出现偶尔并发问题财务数据,绝对不允许出现并发问题不会被并发访问的数据与其他应用共享的数据应用参考的常量数据
  • 13. 串讲:查询缓存Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用第13页/共25页为此,Hibernate提供了针对条件查询的查询缓存提问
  • 14. 串讲:查询缓存配置步骤第14页/共25页 演示示例:配置查询缓存 开启查询缓存 hibernate.cache.use_query_cache1在程序中手动启用查询缓存 query.setCacheable(true); 2
  • 15. 上机练习需求说明 租房系统中,分别使用二级缓存以及查询缓存查询ID为1的房屋基本信息完成时间:20分钟共性问题集中讲解第15页/共25页练习
  • 16. 小结第16页/共25页//获得ID为1的学生信息 Student student=(Student)session.load(Student.class, 1); System.out.println(student.getSname()+"-"+student.getSex()); //在同一个Session范围内,再次获得ID为1的学生信息 Student student2=(Student)session.load(Student.class, 1); System.out.println(student2.getSname()+"-"+student2.getSex());S提问简述Hibernate的缓存分类 以下为在同一个Session范围内查询ID为1的学生信息的代码,解释控制台输出一条SQL语句的原因
  • 17. 使用AnnotationConfiguration建立会话工厂串讲:注解替换复杂的hbm.xml文件简化Hibernate程序开发 使用注解步骤第17页/共25页1添加Annotations jar包2使用注解配置持久化类以及对象关联关系34在Hibernate配置文件(hibernate.cfg.xml)中声明持久化类
  • 18. 讲解:注解配置实体类第18页/共25页注解含义和作用@Entity将一个类声明为一个实体bean(即一个持久化POJO类)@Id声明了该实体bean的标识属性(相当于数据表的主键)@GeneratedValue定义标识符的生成策略@Table为实体bean映射指定表(table)、目录(catalog)和schema的名字。默认值:实体bean的类名,不带包名@UniqueConstraint定义表的唯一约束@Lob表示属性将被持久化为Blob或者Clob类型@Column将属性映射到列@Transient将忽略这些字段和属性,不用持久化到数据库@NamedQuery配置命名查询
  • 19. 讲解:注解配置对象关联关系第19页/共25页注解含义和作用@OneToOne建立实体bean之间的一对一关联@OneToMany建立实体bean之间的一对多关联@ManyToOne建立实体bean之间的多对一关联@ManyToMany建立实体bean之间的多对多关联 演示示例:使用注解配置项目
  • 20. 上机练习需求说明 租房系统中,使用注解配置项目,实现如下功能: 查询某个区的所有街道 查询特定的街道信息 分析: 使用注解配置实体类以及对象关联关系 使用注解配置命名查询完成时间:20分钟共性问题集中讲解第20页/共25页练习
  • 21. 修改/删除 新闻信息串讲:升级新闻管理系统第21页/共25页参考功能分页查询 新闻信息查询新闻信息详情发布新闻信息
  • 22. 答疑时间同学们请就以下方面的问题请教老师 项目答疑 (教员备课时自行填写)第22页/共25页
  • 23. 总结Hibernate一级缓存有什么作用? Hibernate二级缓存在哪些场景下适用? 使用Hibernate注解的步骤有哪些? 什么注解可以定义标识符的生成策略?第23页/共25页提问
  • 24. 作业 必做 教员备课时在此添加内容 选做 教员备课时在此添加内容 提交时间:xxx 提交形式:xxx 阅读学生用书《使用Struts 2实现租房管理系统》第 1章,观看平台《Ajax基础》、《jQuery》、《Ext JS》、《MVC》专题课件 教员备课时在此添加内容 第24页/共25页课后作业预习作业
  • 25. 第25页/共25页