一 檢索策略概念
1 hibernate檢索策略分為兩類
(1)立即查詢:根據(jù)id查詢浓若,調(diào)用get方法,一調(diào)用get方法馬上發(fā)送語句查詢數(shù)據(jù)庫
//根據(jù)cid=1客戶
//執(zhí)行g(shù)et方法之后瞪慧,是否發(fā)送sql語句
//調(diào)用get方法馬上發(fā)送sql語句查詢數(shù)據(jù)庫
Customer customer = session.get(Customer.class,1);
System.out.println(customer.getCid());
(2)延遲查詢:根據(jù)id查詢鸟廓,調(diào)用load方法影暴,調(diào)用load方法不會馬上發(fā)送語句查詢數(shù)據(jù)括改,只有得到對象里面的值時候才會發(fā)送語句查詢數(shù)據(jù)庫
/*
* 1 調(diào)用load方法之后,不會馬上發(fā)送sql語句
* 返回對象里面只有id值
* 2 得到對象里面不是id的而是其他值時候才會發(fā)送語句
* */
Customer customer = session.load(Customer.class,1);
System.out.println(customer.getCid());
System.out.println(customer.getCustName());
2 延遲查詢分為兩類
(1)類級別延遲
根據(jù)id查詢返回實體類對象,調(diào)用load方法不會馬上發(fā)送語句
(2)關(guān)聯(lián)級別延遲
查詢某個客戶嘱能,在查詢這個客戶的所有聯(lián)系人吝梅,查詢客戶的所有聯(lián)系人的過程是否需要延遲,這個過程稱為關(guān)聯(lián)級別延遲
默認延遲
二 關(guān)聯(lián)級別延遲操作(在映射文件中進行配置實現(xiàn))
1 根據(jù)客戶得到所有聯(lián)系人惹骂,在客戶映射文件中配置
2 在set標(biāo)簽上使用屬性
(1)fetch:值 select (默認)
(2) lazy:值
- true:延遲 (默認)
默認設(shè)置
- false:不延遲
false
調(diào)用get之后苏携,發(fā)送兩條sql語句,分別查詢客戶和聯(lián)系人
extra:及其延遲
extra
- 要什么值發(fā)送什么查詢語句
三 批量抓取
1 查詢所有客戶对粪,返回list集合右冻,遍歷list集合,得到每個客戶著拭,得到每個客戶的所有聯(lián)系人
@Test
public void testSelect6(){
Transaction tx = null;
try {
Session session= HibernateUtils.getSessionObject();
tx = session.beginTransaction();
//查詢客戶
Criteria criteria= session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
//得到每個客戶里面所有聯(lián)系人
for(Customer customer:list){
System.out.println(customer.getCid()+":"+customer.getCustName());
//每個客戶里面的聯(lián)系人
Set<LinkMan> linkMEN= customer.getSetlinkMan();
for (LinkMan linkMan:linkMEN){
System.out.println(linkMan.getLkm_id()+":"+linkMan.getLkm_name());
}
}
tx.commit();
}catch (Exception e){
e.printStackTrace();
tx.rollback();
}
}
2 上面操作代碼纱扭,發(fā)送多條查詢語句,優(yōu)化
優(yōu)化
- batch-size值,值越大發(fā)送語句越少