###什么是批量抓取?
- 一批关联对象一起抓取,配置batch-size
- 应用场景:当我们想获取全部的商品类别,然后在获取所有类别下面的商品时.
- 测试批量抓取
/*
* 测试批量抓取
* */
@Test
public void test9(){
Session session=HibernateUtils.getCurrentSession();
Transaction tx=session.beginTransaction();
/**
* 在获取客户的时候,批量抓取联系人
* 客户与联系人是一对多的关系
* 在Customer.hbm.xml中配置batch-size
*/
List<Customer> list=session.createQuery("from Customer").list();
for(Customer c:list){
System.out.println(c.getName());
for(LinkMan l:c.getLinkMans()){
System.out.println(l.getName());
}
}
tx.commit();
}
- 分析
- 批量抓取涉及到关联级别的延迟加载,在查询出customer的时候并不会发送sql语句去查询其关联的联系人,而在需要使用联系人的时候才发送sql语句去查询
*但是例如当batch-size=”2”时,也是在需要使用联系人的时候才发送sql语句去查询,不过查询的时候查询出了两个customer(customer1,customer2)对应的联系人(分别存入了对应的customer中)(也就是说customer2对应的联系人就不用延迟加载了,要用就可以直接用,因为已经发送过了查询语句)
batch-size值(值越大发送语句越少)
- 批量抓取涉及到关联级别的延迟加载,在查询出customer的时候并不会发送sql语句去查询其关联的联系人,而在需要使用联系人的时候才发送sql语句去查询