lazy
需要的时候,加载,不需要的时候,不加载。
类的懒加载
session.load方法是懒加载
类的延迟加载在映射文件中可以配置
集合的懒加载
默认情况
1.默认的就是延迟加载
2、当遍历集合的时候,向数据库要数据,并且输出
lazy为false
lazy为true开启懒加载
lazy为extra更进一步的懒加载
总结
延迟加载是通过控制SQL语句的发出的时间来提高效率的。
fetch抓取策略
研究发出怎么样的sql语句,加载集合
默认值select
这样的情况会导致n+1条sql,n为classes表中的记录数
subselect
场景:当把需求分析翻译过来以后,含有子查询,这个时候,用这种策略效率比较高
join
如果根据需求分析,翻译成sql 语句含有子查询,这个时候用join无效
lazy与fetch
many to one中
如果fetch为"join",lazy不论设置成什么样的值,都不起作用
如果fetch为"select",先加载classes,再加载student,而lazy决定在什么时候加载student
查询缓存
为数据缓存,不需要缓存一张表中的所有的字段,只需要一部分字段
UpdateTimeStampsCache记录了查询缓存中数据随着时间的变化,hibernate内部就是通过时间戳的方式来检查查询缓存中的数据是否发生变化
步骤
步骤1
二级缓存的准备工作
步骤2
开启查询查询缓存
hql语句不一样就不能利用查询缓存