• 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抓取数据时,懒加载不去作用。

  • 相关阅读:
    Spring 源码学习
    Feign Client 原理和使用
    算法基础:排序算法看这一篇就够了
    Spring 源码学习2
    Spring 源码学习
    最优包裹组合-贪心算法
    @Transactional 事务的底层原理
    Mysql索引扫盲总结
    snowflake原理解析
    分布式ID总结
  • 原文地址:https://www.cnblogs.com/forever2h/p/6739010.html
Copyright © 2020-2023  润新知