批量抓取理解:如果我们需要查找到客户的所有联系人的话,按照正常的思路,一般是首先查询所有的客户,得到返回的客户的List集合。然后遍历List集合,得到集合中的每一个客户,在取出客户中的联系人(客户表和联系人表是一个一对多的关系,一个客户有多个联系人),对于这种情况,我们就可以使用Hibernate的批量抓取,因为批量抓取进行了优化,比上面的先得到客户,在查询客户的联系人的效率更加的高效。

  

原始方法实现:

 // 批量抓取的原始做法
@Test
public void fun2() {
Transaction ts = null;
Session session = null;
SessionFactory factory = null;
try {
factory = Tools.getSessionFactory();
session = factory.openSession();
ts = session.beginTransaction();
// 通过id找到对应的数据记录
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> customers = criteria.list();
for(Customer customer : customers) {
System.out.println(customer.getCid() + " -- " + customer.getCustName());
Set<LinkMan> sets = customer.getMans();
for (LinkMan set : sets) {
System.out.println("\t"+set.getLid()+"::"+set.getLinkName());
}
}
ts.commit();
} catch (Exception e) {
ts.rollback();
e.printStackTrace();
} finally {
session.close();
}
}

运行截图:

  对于原始的方式进行查询,每次查询一个联系人均会向数据库发送一条查询语句,这样的话,效率就低了。

控制台输出:

九月 12, 2017 9:33:49 下午 org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000228: Running hbm2ddl schema update
Tue Sep 12 21:33:49 PDT 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Hibernate:
select
this_.cid as cid1_0_0_,
this_.custLevel as custLeve2_0_0_,
this_.custName as custName3_0_0_,
this_.custSource as custSour4_0_0_,
this_.custMobile as custMobi5_0_0_
from
t_customer this_
4028db335e71d615015e71d61bb60000 -- Geore
Hibernate:
select
mans0_.clid as clid5_1_0_,
mans0_.lid as lid1_1_0_,
mans0_.lid as lid1_1_1_,
mans0_.linkName as linkName2_1_1_,
mans0_.linkGender as linkGend3_1_1_,
mans0_.linkPhone as linkPhon4_1_1_,
mans0_.clid as clid5_1_1_
from
t_linkman mans0_
where
mans0_.clid=?
4028db335e71d615015e71d61bf30001::Mr.Li 4028db335e71d646015e71d64c8e0000 -- Alley
Hibernate:
select
mans0_.clid as clid5_1_0_,
mans0_.lid as lid1_1_0_,
mans0_.lid as lid1_1_1_,
mans0_.linkName as linkName2_1_1_,
mans0_.linkGender as linkGend3_1_1_,
mans0_.linkPhone as linkPhon4_1_1_,
mans0_.clid as clid5_1_1_
from
t_linkman mans0_
where
mans0_.clid=?
4028db335e71d6ff015e71d705ad0001::Mr.Zhang
4028db335e71d753015e71d759930001::Mr.Xie
4028db335e71d646015e71d64ccc0001::Mr.Wang 4028db335e721e35015e721e3b030000 -- Mary
Hibernate:
select
mans0_.clid as clid5_1_0_,
mans0_.lid as lid1_1_0_,
mans0_.lid as lid1_1_1_,
mans0_.linkName as linkName2_1_1_,
mans0_.linkGender as linkGend3_1_1_,
mans0_.linkPhone as linkPhon4_1_1_,
mans0_.clid as clid5_1_1_
from
t_linkman mans0_
where
mans0_.clid=?
4028db335e721e35015e721e3b410001::Mr.Zhao

Hibernate批量抓取实现:

  对于Hibernate的批量抓取的实现,其实在代码上并不需要进行改变,而只要修改配置文件的set标签,在set标签中添加属性batch-size,对于batch-size的值是一个整形的数据,整形的数据越大越好,越大发送的sql语句越少

配置代码:

 <set name="mans" cascade="save-update,delete" fetch="select" lazy="extra" batch-size="20">

控制台输出:

 INFO: HHH000228: Running hbm2ddl schema update
Tue Sep 12 21:38:34 PDT 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Hibernate:
select
this_.cid as cid1_0_0_,
this_.custLevel as custLeve2_0_0_,
this_.custName as custName3_0_0_,
this_.custSource as custSour4_0_0_,
this_.custMobile as custMobi5_0_0_
from
t_customer this_
4028db335e71d615015e71d61bb60000 -- Geore
Hibernate:
select
mans0_.clid as clid5_1_1_,
mans0_.lid as lid1_1_1_,
mans0_.lid as lid1_1_0_,
mans0_.linkName as linkName2_1_0_,
mans0_.linkGender as linkGend3_1_0_,
mans0_.linkPhone as linkPhon4_1_0_,
mans0_.clid as clid5_1_0_
from
t_linkman mans0_
where
mans0_.clid in (
?, ?, ?
)
4028db335e71d615015e71d61bf30001::Mr.Li
4028db335e71d646015e71d64c8e0000 -- Alley
4028db335e71d753015e71d759930001::Mr.Xie
4028db335e71d646015e71d64ccc0001::Mr.Wang
4028db335e71d6ff015e71d705ad0001::Mr.Zhang
4028db335e721e35015e721e3b030000 -- Mary
4028db335e721e35015e721e3b410001::Mr.Zhao

Hibernate的批量抓取的更多相关文章

  1. Hibernate批量抓取

    ------------------siwuxie095 Hibernate 批量抓取 以客户和联系人为例(一对多) 1.批量抓取 同时查询多个对象的关联对象,是 Hibernate 抓取策略的一种 ...

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

    1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // ...

  3. day36 08-Hibernate抓取策略:批量抓取

    package cn.itcast.test; import java.util.List; import org.hibernate.Hibernate; import org.hibernate. ...

  4. Python3利用BeautifulSoup4批量抓取站点图片的代码

    边学边写代码,记录下来.这段代码用于批量抓取主站下所有子网页中符合特定尺寸要求的的图片文件,支持中断. 原理很简单:使用BeautifulSoup4分析网页,获取网页<a/>和<im ...

  5. 使用HtmlAgilityPack批量抓取网页数据

    原文:使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息.抓取网页  Htm ...

  6. Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)

    概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...

  7. 如何上传Packages到PyPI并批量抓取

    1.如何上传包到PyPI ? 更新中... 2.批量抓取simple网站第三方模块 https://pypi.python.org/simple/ 3. 第三方模块的安装和使用 python  set ...

  8. python实现列表页数据的批量抓取练手练手的

    python实现列表页数据的批量抓取,练手的,下回带分页的 #!/usr/bin/env python # coding=utf-8 import requests from bs4 import B ...

  9. 使用IDM批量抓取音效素材下载

    IDM下载器的站点抓取功能,能够抓取网站上的图片.音频.视频.PDF.压缩包等等文件.更重要的是,能够实现批量抓取操作,省时省力.今天就来看一下,如何用IDM巧妙的批量抓取音效素材. 1.进入音效合辑 ...

随机推荐

  1. 【转】linux lost+found文件夹

    lost+found这个目录一般情况下是空的,当系统非法关机后,如果你丢失了一些文件,在这里能找回来 用来存放fsck过程中部分修复的文件的 如果你运行fsck命令(文件系统检查和修复命令),它也许会 ...

  2. 1122. Hamiltonian Cycle (25)

    The "Hamilton cycle problem" is to find a simple cycle that contains every vertex in a gra ...

  3. 常用windbg命令(转)

    1.查看版本信息:version.vertarget. 2.查看模块信息:lm.!dlls.!lmvi等. 3.调用栈:用k命令显示调用栈,用.frames命令切换栈帧. 4.内存操作:读内存用d命令 ...

  4. SpringBoot---Kafka

    1.实战 <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka --> <dependency> < ...

  5. ESP8266-向物联网云平台发送数据--dweet

    方法一: //向物联网平台发送数据 //发送数据格式: https://dweet.io/dweet/for/my-thing-name?hello=world 免费平台 //my-thing-nam ...

  6. Python的命令行参数(argparse)

    参考:https://www.cnblogs.com/lindaxin/p/7975697.html 参考:https://www.cnblogs.com/dengtou/p/8413609.html ...

  7. handy源码阅读(五):PollerBase类

    使用poll内核函数等待事件发生: struct PollerBase: private noncopyable { int64_t id_; int lastActive_; PollerBase( ...

  8. js解决手机键盘影响定位的问题

    // 滑动其他地方隐藏软键盘document.body.addEventListener('touchend', function(evt) { document.activeElement.blur ...

  9. linux php扩展模块安装

    安装Freetds Freetds 官方网站是 http://www.freetds.org,可以去官方网站下载程序,文中下载的是0.92.79版本. wget ftp://ftp.freetds.o ...

  10. Android实现无标题栏全屏的三种方法

    一.通过Java代码 在setContentView之前执行: requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏 getWindow().se ...