hibernate 之 加载策略和抓取策略


1. 加载策略:在hibernate中,hibernate为了查询效率,提供了2中加载策略,一种即时加载,另一种延迟加载(懒加载)。

2.即时加载:查询数据时候,立即从数据库中将数据查询出来。

get方法获取数据就是采用的即时加载:

@Test
    public void testGet(){
        Student stu = (Student)session.get(Student.class, 1);
        System.out.println("================");
        System.out.println(stu.getName()+"---"+stu.getSex());
    }

list方法采用的也是即时加载:

@Test
    public void testList(){
        List<Student> list = session.createQuery("from Student").list();
        System.out.println("============");
    }

3. 延迟加载:在调用方法查询数据时,不会立即到数据库中查询数据,只有真正用到数据的时候才会到数据库查询。

@Test
    public void testLoad(){
        Student stu = (Student)session.load(Student.class, 1);
        System.out.println("================");
        System.out.println(stu.getId()+"---");
    }

4. 懒加载:

  class 默认时 lazy=true

  Property默认是lazy=false的

  Many-to-one:默认是

               Lazy=false 即时加载

      lazy=proxy懒加载

      lazy=no-proxy懒加载  不使用代理

       set: 默认

               lazy=true 懒加载

             lazy=extra 机智的加载方式,检查是否真正需要数据,如果仅仅是显示数据个数,那么不会加载数据,如果真正需要显示数据,那么加载数据

              lazy=false即时加载

5.抓取策略:指hibernate采用何种方式从数据库获取数据,大的方面有两类 selete 和 join 。

  select 抓取指 通过select语句来获取关联数据。

        <many-to-one name="teacher" column="tid" fetch="select"/>

  join抓取策略,指通过join来获取关联数据

        <many-to-one name="teacher" column="tid" fetch="join"/>

 注意:当采用join抓取数据时,懒加载不去作用。

原文地址:https://www.cnblogs.com/forever2h/p/6739010.html