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方法只是统计 并不是真正的查询
浙公网安备 33010602011771号