標籤: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檢索策略