Hibernate的批量抓取
批量抓取理解:如果我们需要查找到客户的所有联系人的话,按照正常的思路,一般是首先查询所有的客户,得到返回的客户的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的批量抓取的更多相关文章
- Hibernate批量抓取
------------------siwuxie095 Hibernate 批量抓取 以客户和联系人为例(一对多) 1.批量抓取 同时查询多个对象的关联对象,是 Hibernate 抓取策略的一种 ...
- Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取
1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // ...
- day36 08-Hibernate抓取策略:批量抓取
package cn.itcast.test; import java.util.List; import org.hibernate.Hibernate; import org.hibernate. ...
- Python3利用BeautifulSoup4批量抓取站点图片的代码
边学边写代码,记录下来.这段代码用于批量抓取主站下所有子网页中符合特定尺寸要求的的图片文件,支持中断. 原理很简单:使用BeautifulSoup4分析网页,获取网页<a/>和<im ...
- 使用HtmlAgilityPack批量抓取网页数据
原文:使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息.抓取网页 Htm ...
- Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)
概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...
- 如何上传Packages到PyPI并批量抓取
1.如何上传包到PyPI ? 更新中... 2.批量抓取simple网站第三方模块 https://pypi.python.org/simple/ 3. 第三方模块的安装和使用 python set ...
- python实现列表页数据的批量抓取练手练手的
python实现列表页数据的批量抓取,练手的,下回带分页的 #!/usr/bin/env python # coding=utf-8 import requests from bs4 import B ...
- 使用IDM批量抓取音效素材下载
IDM下载器的站点抓取功能,能够抓取网站上的图片.音频.视频.PDF.压缩包等等文件.更重要的是,能够实现批量抓取操作,省时省力.今天就来看一下,如何用IDM巧妙的批量抓取音效素材. 1.进入音效合辑 ...
随机推荐
- java String源码浅出
1.public char charAt(int index) 返回指定索引处的 char 值. 源码: =====================String.class============== ...
- bzoj4011 [HNOI2015]落忆枫音 拓扑排序+DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4011 题解 首先考虑如果没有那么一条被新加进来的奇怪的边的做法. 我们只需要给每一个点挑一个父 ...
- 在父组件中,传值给子组件-vue
1.通过 props <x-test :name="username"></x-test>1)props为字符串数组 props: ['name']2)pr ...
- 【学习笔记】Minkowski和
这还是个被我咕了N久的玩意 Minkowski和是一个奇怪的玩意 他长这样 $S={a+b \| a \in A , b \in B}$ AB可以是点集也可是向量集(显然) 他可以处理一些奇怪的东西 ...
- java -cp与java -jar的区别
java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”格式:java -cp .;myClass.j ...
- 模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
目录 模块的四种形式 模块 模块的四种形式 import和from...import 循环导入问题 模拟问题的发生: 解决方案 模块的搜索路径 Python文件的两种用途 模块的四种形式 Nike推荐 ...
- compile and link C/CPP programs on Mac
ref: https://stackoverflow.com/questions/29987716/cannot-use-gsl-library-on-macos-ld-symbols-not-fou ...
- php array_keys()函数 语法
php array_keys()函数 语法 作用:返回包含数组中所有键名的一个新数组.直线电机选型 语法:array_keys(array,value,strict) 参数: 参数 描述 array ...
- CSS中的 , > + ~
1.群组选择器(',') /* 表示既h1,又h2 */ h1, h2 { color: red; } 2.后代选择器(空格) /* 表示 h1 下面的所有 span 元素,不管是否以 h1 为直接父 ...
- [LOJ2288][THUWC2017]大葱的神力:搜索+背包DP+费用流+随机化
分析 测试点1.2:搜索+剪枝. 测试点3:只有一个抽屉,直接01背包. 测试点4.5:每个物品体积相同,说明每个抽屉能放下的物品个数固定,建图跑费用流. 测试点6:每个物品体积相近,经过验证发现每个 ...