hibernate day02

Posted on 2018-05-14 17:19  _wahaha  阅读(117)  评论(0)    收藏  举报

1 一级缓存   目的:减少对数据库的访问次数 ,从而提升hibernate的执行效率。(同懒加载目的都是为了提升数据库效率)

2 Hibernate 分为一级缓存及二级缓存,一级缓存也叫做session的缓存,她可以在session 范围内较减少数据库的访问次数,只在session范围内有效!时间较短!

当调用session的save/saveOrUpdate/get/load/list/iterator方法的时候,都会把对象放入session的缓存中(但没说)。session的缓存由hibernate维护,用户无法操作缓存内容!如果想操作缓存内容,必须通过hibernate提供的evit/clear 方法操作

3 session几个方法   flush() 让一级缓存与数据库同步  evict (arg0)清空一级缓存指定的对象  clear()清空一级缓存中缓存的所有对象  在什么情况下用这些方法呢

  在需要与数据库同步更新的时候使用,在批量操作的时候使用  一般都是先用flush方法再用clear方法

4 不同的session可以共享缓存数据?  不能共享缓存数据 可以用实验证明!

5 list与iterator 查询方法的区别   list查询  一次把所有记录都查询出来   iterator查询  n+1次查询  n表示所查询记录的总数  即第一次语句查询所有记录的主键,再根据每一个主键去数据库里查询    iterator 查询 会将查出数据放入缓存 并根据主键从缓存中取       list方法查询数据 会将查出数据放入缓存 但不会从缓存中获取数据

6 懒加载特性 get 及时加载  只要使用get方法 立刻向数据库查询   load 默认使用懒加载  当用到数据的时候才向数据库查询 

   懒加载 lazy 当用到数据的时候才向数据库查询,这是hibernate懒加载的特性   目的是为了程序的执行效率 

session 关闭后 不能使用懒加载数据   lazyInitializationException

7 一对一映射 需要知道两种映射的配置方法 1)多对一的特例   外键唯一  2)主键外键为同一个字段

8 组件映射与继承映射  

组合映射    车 及 车轮   <component>

继承映射

 如何解决session关闭后不能使用懒加载数据的问题:1) 先使用一次数据 2)强迫代理对象初始化3) 关闭懒加载 设置lazy=false  记住 在使用数据之后再关闭session

 extra  做统计的时候 用extra  在集合数据进行懒加载的时候提升效率  在真正使用数据的时候才向数据库发送查询的sql  而且 如果调用集合的size及isEmpty方法只是统计 并不是真正的查询 

 

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3