Hibernate批量抓取

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语句的发送,提高检索效率。

时间: 2024-10-13 00:31:37

Hibernate批量抓取的相关文章

八 Hibernate延迟加载&amp;抓取策略(优化)

面试:Hibernate效率很低,如何优化? 缓存怎么弄的,语句怎么优化? 聊聊一级缓存,聊聊抓取策略和延迟加载,聊聊批量抓取 延迟加载: 一般不单独使用,和延迟加载一起使用 延迟加载:lazy(懒加载) 执行到该行代码的时候不会发送语句,真正使用这个对象的属性的时候才会发送sql语句进行查询. 类级别延迟加载:指的是是通过load方法查询某个对象的时候是否采用延迟,通过class标签上的lazy来配置. 让类级别延迟加载失效:1 lazy设为false 2 final修饰 3 调用Hibern

Hibernate学习---第十一节:Hibernate之数据抓取策略&amp;批量抓取

1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // 基于标准的 sql 语句查询 String sql = "select * from t_person"; // 通过 createSQLQuery 获取 SQLQuery,而 SQLQuer 是 Query的子类 SQLQuery query = session.createSQLQue

Hibernate的抓取策略

立即检索:当执行某行代码的时候,马上发出SQL语句进行查询(get())延迟检索:当执行某行代码的时候,不会马上发出SQL语句进行查询.当真正使用这个对象的时候才会发送SQL语句(load()) 类级别检索和关联级别检索 类级别的检索:<class>标签上配置lazy 关联级别的检索:<set>/<many-to-one>上面的lazy 从一的一方关联多的一方(<set>) fetch:控制sql语句的类型 join :发送迫切左外连接的SQL查询关联对象.

Hibernate之抓取策略

时间:2017-1-23 19:08 --区分延迟和立即检索 1.立即检索    当执行某行代码时,会马上发出SQL语句进行查询.    例如:get() 2.延迟检索    当执行某行代码时,不会马上发出SQL语句,只有当真正使用对象时,才会向数据库发出SQL语句.    例如:load() 3.示例代码    /* * 区分立即检索和延迟检索 */ public void fun1(){ Session session = HibernateUtils.openSession(); Tran

使用HtmlAgilityPack批量抓取网页数据

[转]使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载 登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息. 抓取网页  HtmlAgilityPack.HtmlDocument htmlDoc;            if (!string.IsNullOrEmpty(登录URL))            {                htmlDoc = htmlWeb.Load(登录URL, 提交的用户验证信息,

一个Python3批量抓取站点图片的程序

边学边写代码,记录下来.这段代码用于批量抓取主站下所有子网页中符合特定尺寸要求的的图片文件,支持中断. 原理很简单:使用BeautifulSoup4分析网页,获取网页<a/>和<img/>元素,对<a/>集合反复弹栈入栈,对<img/>集合进行筛选下载. 具体代码如下:import os import sys import time import urllib.request from urllib.parse import urljoin,urlparse

Python批量抓取商品数据

(批量抓取pids.csv文件中商品数据)pids.csv 文件内容:pid733641371225907336415 报错: 解决后代码: 原文地址:http://blog.51cto.com/2290153/2125131

Hibernate优化---抓取策略

1.延迟加载 类的延迟加载 在类的映射文件中的class标签上配置lazy属性:默认为true,当你配置为false的时候,就算你使用session.load他也会在你调用这个方法之后发送SQL语句,而不是在你使用查询得到的对象的时候才发送SQL语句 关联级别的延迟加载 在类的映射文件中的set和many-to-one上配置lazy属性:默认为true,也就是说,当你查询某个对象是,他不会连带着查询他的关联对象,当你使用这些关联对象的时候才会发送SQL语句查询 2.抓取策略 set上的fetch

Hibernate fetch 抓取策略

上一篇文章(Hibernate的延迟加载 ,懒加载,lazy)说到Hibernate的延迟加载跟fetch的配置还有一定关系,下面就来讨论下fetch的用法. 抓取策略(fetch)是指当我们去查询一个对象里面所关联的其他对象时,按照哪种方法去抓取关联对象. fetch策略一共有四种:select.subselect.join.batch,下面我们一一介绍.我们还是用上面介绍延迟加载的相关表和实体类. Company表: Employee表(employee_company_id为外键) Com