Hibernate檢索策略

來源:互聯網
上載者:User

標籤:action   資料庫   過程   oid   sys   策略   sel   對應檔   記錄   

一、Hibernate的檢索策略分類

  1、立即檢索

     立即查詢方式,調用get方法只會,會馬上去查詢資料庫。

public void Test2(){            SessionFactory sessionFactory = null;            Session session = null;            Transaction tx = null;            try {                sessionFactory = HibernateUtils.getFactory();                session = sessionFactory.openSession();                tx = session.beginTransaction();                //調用get方法查詢出一條記錄,調用只後會馬上發送sql語句去查詢資料庫                Sort food = session.get(Sort.class, 1);                System.out.println(food);                tx.commit();            } catch (Exception e) {                tx.rollback();            }finally{                session.close();                sessionFactory.close();            }        }

 

  2、延遲檢索

     延遲查詢方式,使用session對象的load方法查詢時,調用load方法後不會立即查詢資料庫,

    而是等需要得到該查詢對象裡面的屬性的時候才會去查詢資料庫。

    @Test                                public void Test13(){                    SessionFactory sessionFactory = null;                    Session session = null;                    Transaction tx = null;                    try {                        sessionFactory = HibernateUtils.getFactory();                        session = sessionFactory.openSession();                        tx = session.beginTransaction();                        //調用get方法查詢出一條記錄,調用只後不會會馬上發送sql語句去查詢資料庫                        Sort food = session.load(Sort.class, 1);                        //不發送SQL語句,返回的對象裡面只有id值                        System.out.println(food.getSid());                        //發送SQL語句,查詢資料庫                        System.out.println(food.getSname());                        tx.commit();                    } catch (Exception e) {                        tx.rollback();                    }finally{                        session.close();                        sessionFactory.close();                    }                }
二、延遲檢索分類

  1、類層級的延遲

      延遲查詢方式,使用session對象的load方法查詢時,調用load方法後不會立即查詢資料庫,

    而是等需要得到該查詢對象裡面的屬性的時候才會去查詢資料庫。

    @Test                                public void Test13(){                    SessionFactory sessionFactory = null;                    Session session = null;                    Transaction tx = null;                    try {                        sessionFactory = HibernateUtils.getFactory();                        session = sessionFactory.openSession();                        tx = session.beginTransaction();                        //調用get方法查詢出一條記錄,調用只後不會會馬上發送sql語句去查詢資料庫                        Sort food = session.load(Sort.class, 1);                        //不發送SQL語句,返回的對象裡面只有id值                        System.out.println(food.getSid());                        //發送SQL語句,查詢資料庫                        System.out.println(food.getSname());                        tx.commit();                    } catch (Exception e) {                        tx.rollback();                    }finally{                        session.close();                        sessionFactory.close();                    }                }

  2、關聯層級延遲

    查詢某個類別,再查詢這個類別的所有商品,查詢類別的所有商品的過程是否需要延遲,這個過程稱為關聯層級延遲。

    

@Test        public void Test1(){        SessionFactory sessionFactory = null;        Session session = null;        Transaction tx = null;        try {            sessionFactory = HibernateUtils.getFactory();            session = sessionFactory.openSession();            tx = session.beginTransaction();            //1、使用get方法查詢出食品類            Sort food = session.get(Sort.class, 1);            //2、使用sort對象的方法得到所有食品類中的食品,沒有發送SQL語句            Set<Good> set = food.getSetGoods();            //3、發送SQL語句            System.out.println(set.size());            tx.commit();        } catch (Exception e) {            tx.rollback();        }finally{            session.close();            sessionFactory.close();        }    }
三、關聯層級延遲操作

   1 在對應檔中進行配置實現

    (1)根據類別得到所有的商品,在類別對應檔中配置

   2 在set標籤上使用屬性

    (1)fetch:值select(預設)

    (2)lazy:值

        - true:延遲(預設)

        - false:不延遲

        - extra:極其延遲

    (3)延遲效果

      預設延遲效果:

@Test        public void Test1(){        SessionFactory sessionFactory = null;        Session session = null;        Transaction tx = null;        try {            sessionFactory = HibernateUtils.getFactory();            session = sessionFactory.openSession();            tx = session.beginTransaction();            //1、使用get方法查詢出食品類            Sort food = session.get(Sort.class, 1);            //2、使用sort對象的方法得到所有食品類中的食品,發送SQL語句            Set<Good> set = food.getSetGoods();            //3、發送SQL語句            System.out.println(set.size());            tx.commit();        } catch (Exception e) {            tx.rollback();        }finally{            session.close();            sessionFactory.close();        }    }

    不延遲效果

@Test        public void Test1(){        SessionFactory sessionFactory = null;        Session session = null;        Transaction tx = null;        try {            sessionFactory = HibernateUtils.getFactory();            session = sessionFactory.openSession();            tx = session.beginTransaction();            //1、使用get方法查詢出食品類            Sort food = session.get(Sort.class, 1);            //2、使用sort對象的方法得到所有食品類中的食品,沒有發送SQL語句            Set<Good> set = food.getSetGoods();            //3、發送SQL語句            System.out.println(set.size());            tx.commit();        } catch (Exception e) {            tx.rollback();        }finally{            session.close();            sessionFactory.close();        }    }

       極度延遲效果:

    

@Test        public void Test1(){        SessionFactory sessionFactory = null;        Session session = null;        Transaction tx = null;        try {            sessionFactory = HibernateUtils.getFactory();            session = sessionFactory.openSession();            tx = session.beginTransaction();            //1、使用get方法查詢出食品類            Sort food = session.get(Sort.class, 1);            //2、使用sort對象的方法得到所有食品類中的食品,沒有發送SQL語句            Set<Good> set = food.getSetGoods();            //3、發送SQL語句,但發送的查詢數量的count聚集合函式語句            System.out.println(set.size());            tx.commit();        } catch (Exception e) {            tx.rollback();        }finally{            session.close();            sessionFactory.close();        }    }

 

        

Hibernate檢索策略

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.