1、应用场景
当我们想获取全部的商品类别,然后在获取所有类别下面的商品时,为了提高效率,就可以考虑使用批量抓取。
批量抓取使用映射文件中的set标签的batch-size属性来设置,其值是任意一个整数,值越大效率越高。
(1)不使用批量抓取实现效果:
代码:
@Test public void Test(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //1、得到criteria对象 Criteria criteria = session.createCriteria(Sort.class); //2、查询所有sort List<Sort> list = criteria.list(); //3、遍历获取good for (Sort sort : list) { System.out.println(sort); Set<Good> goods = sort.getSetGoods(); for (Good good : goods) { System.out.println(good); } } tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }
执行效果:
2、使用批量抓取效果
1代码
@Test public void Test(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //1、得到criteria对象 Criteria criteria = session.createCriteria(Sort.class); //2、查询所有sort List<Sort> list = criteria.list(); //3、遍历获取good for (Sort sort : list) { System.out.println(sort); Set<Good> goods = sort.getSetGoods(); for (Good good : goods) { System.out.println(good); } } tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }
执行效果
通过以上测试结果可以发现,使用批量抓取可以减少sql语句的发送,提高检索效率。