Hibernate框架学习(十)——查询优化
一、类级别查询
1、get方法:没有任何策略,调用即立即查询数据库加载数据。
2、load方法:是在执行时不发送任何SQL语句,返回一个对象,使用该对象时才执行查询;应用类级别的加载策略。
1>延迟加载:仅仅获得,没有使用,不会查询,在使用时才进行查询
2>是否对类进行延迟加载:可以通过在class元素上配置lazy属性来控制
lazy(默认):true 查询类时会返回代理对象,会在使用属性时根据关联的session查询数据库,加载数据
加载时不查询,使用时才查询
lazy:false 加载时立即查询,和get方法没有区别
结论:为了提高效率,建议使用延迟加载(懒加载)
3>注意:使用懒加载时要确保,调用属性加载数据时,session还是打开的,不然会抛出异常。
二、关联级别查询
1、集合策略
lazy属性:决定是否延迟加载
true(默认):延迟加载,懒加载
false:立即加载
extra:极其懒惰,与懒加载效果基本一致
fetch属性:决定加载策略,使用什么类型的SQL语句加载集合数据
select(默认):单表查询加载
join:使用多表查询加载集合
subselect:使用子查询加载集合
2、关联属性策略
lazy属性:决定加载时机
false:立即加载
proxy:由Customer的类级别加载策略决定
fetch属性:决定加载的SQL语句
select:使用单表查询
join:使用多表查询
3、结论
为了提高效率,fetch应选择select,lazy应选择 true,全部使用默认值。
4、no-session问题解决
扩大session的作用范围
三、批量抓取
batch-size:抓取集合的数量
在抓取客户的集合时,一次抓取几个客户的联系人集合
推荐阅读
-
Python ORM框架SQLAlchemy学习笔记之数据查询实例
-
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
-
利用Django框架中select_related和prefetch_related函数对数据库查询优化
-
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
-
Python的Django框架中的select_related函数对QuerySet 查询的优化
-
ElasticStack学习(十):深入ElasticSearch搜索之QueryFiltering、多/单字符串的多字段查询
-
一级缓存 ---- Hibernate框架学习
-
hibernate框架学习笔记8:一对多关系案例
-
hibernate框架学习笔记9:多对多关系案例
-
Python并发编程之学习异步IO框架:asyncio 中篇(十)