首页 > 代码库 > Hibernate框架对查询功能优化(2)

Hibernate框架对查询功能优化(2)

1. 查询策略:使用Hibernate查询一个对象的时候,查询其关联对象.应该如何查询.是Hibernate的一种优化手段!!!

2. Hibernate框架的检索策略解决的问题

   * 查询的时机

      Customer c1 = (Customer) session.get(Customer.class, 1);

      System.out.println(c1.getLinkmans().size());

      * lazy属性解决查询的时机的问题,需要配置是否采用延迟加载!!

   * 查询的语句形式

      List<Customer> list = session.createQuery("from Customer").list();

      for(Customer c : list){

        System.out.println(c.getLinkmans()); }

   * fetch属性就可以解决查询语句的形式的问题!!

      set标签上配置策略

 1. 在<set>标签上使用fetch和lazy属性

  * fetch的取值 -- 控制SQL语句生成的格式

    * select -- 默认值.发送查询语句

    * join -- 连接查询.发送的是一条迫切左外连接!!!配置了join.lazy就失效了

    * subselect -- 子查询.发送一条子查询查询其关联对象.(需要使用list()方法进行测试)

  * lazy的取值 -- 查找关联对象的时候是否采用延迟!

    * true -- 默认.延迟

    * false -- 不延迟

    * extra -- 及其懒惰, 查询关联对象的时候 采用比延迟加载更懒惰的方式进行查询.

2. set标签上的默认值是fetch="select"和lazy="true"

3. 总结:Hibernate框架都采用了默认值,开发中基本上使用的都是默认值。特殊的情况。

  many-to-one标签上配置策略

 1. 在<many-to-one>标签上使用fetch和lazy属性

   * fetch的取值 -- 控制SQL的格式.

    * select -- 默认。发送基本select语句查询

    * join -- 发送迫切左外连接查询

  * lazy的取值 -- 控制加载关联对象是否采用延迟.

    * false -- 不采用延迟加载.

    * proxy -- 默认值.代理.现在是否采用延迟.

      * 由另一端的<class>上的lazy确定.如果这端的class上的lazy=”true”.proxy的值就是true(延迟加载).

      * 如果class上lazy=”false”.proxy的值就是false(不采用延迟.)

 2. 在<many-to-one>标签上的默认值是fetch="select"和proxy

Hibernate框架对查询功能优化(2)