欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hibernate框架学习(十)——查询优化

程序员文章站 2022-05-04 15:15:30
一、类级别查询 1、get方法:没有任何策略,调用即立即查询数据库加载数据。 2、load方法:是在执行时不发送任何SQL语句,返回一个对象,使用该对象时才执行查询;应用类级别的加载策略。 1>延迟加载:仅仅获得,没有使用,不会查询,在使用时才进行查询2>是否对类进行延迟加载:可以通过在class元 ......

一、类级别查询

1、get方法:没有任何策略,调用即立即查询数据库加载数据。

Hibernate框架学习(十)——查询优化

2、load方法:是在执行时不发送任何SQL语句,返回一个对象,使用该对象时才执行查询;应用类级别的加载策略。

Hibernate框架学习(十)——查询优化

1>延迟加载:仅仅获得,没有使用,不会查询,在使用时才进行查询
2>是否对类进行延迟加载:可以通过在class元素上配置lazy属性来控制

Hibernate框架学习(十)——查询优化

  lazy(默认):true 查询类时会返回代理对象,会在使用属性时根据关联的session查询数据库,加载数据

           加载时不查询,使用时才查询

     lazy:false 加载时立即查询,和get方法没有区别

  结论:为了提高效率,建议使用延迟加载(懒加载)

3>注意:使用懒加载时要确保,调用属性加载数据时,session还是打开的,不然会抛出异常。

Hibernate框架学习(十)——查询优化

二、关联级别查询

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的作用范围

Hibernate框架学习(十)——查询优化

三、批量抓取

batch-size:抓取集合的数量
       在抓取客户的集合时,一次抓取几个客户的联系人集合