SSH与SSM学习之hibernate25——批量抓取
来源:互联网 发布:淘宝网四海认证钓具 编辑:程序博客网 时间:2024/05/30 07:13
- SSH与SSM学习之hibernate25批量抓取
- 一添加数据
- 二测试代码
- 三分析
- 三默认情况下的查询
- 四Companyhbmxml添加batch-size
- 五批量抓取
SSH与SSM学习之hibernate25——批量抓取
一、添加数据
我们现在需要添加数据,所以的配置使用默认的配置。
/** * 添加测试数据 */@Testpublic void addData(){ Session session = HibernateUtils.openSession(); Transaction t = session.beginTransaction(); //------------------------------------------- for (int i = 0; i < 5; i++) { Company c = new Company(); c.setName("新公司_"+i); Employee emp = new Employee(); emp.setName("wiming_"+i); emp.setCompany(c); session.save(c); session.save(emp); } //------------------------------------------- t.commit(); session.close();}
现在我们的有5个公司,每个公司有1个员工。
二、测试代码
/** * 批量抓取 */@Testpublic void test(){ Session session = HibernateUtils.openSession(); Transaction t = session.beginTransaction(); //------------------------------------------- Query query = session.createQuery("from Company"); List<Company> list = query.list(); System.out.println("---------one--------"); for (Company c : list) { System.out.println(c.getEmps()); System.out.println("---------------"); } //------------------------------------------- t.commit(); session.close();}
三、分析
我们知道我们的表中有5个公司。上面的测试代码,在默认情况下,除了查询到公司的数据以外,还会查询5次。这是因为我们的员工的数据是使用懒加载的(默认的)。也就是说每循环一次,就会去查询一次数据。这样感觉效率很低下。
因此有一个属性 batch-size,它的意思就是,一次抓取多少条数据。那上面的例子举例,如果batch-size=3,那么意思就是说第一次循环的时候,查询了Company的3个对象的集合数据,第一次循环以后,第一、二、三的集合数据就查询出来,不用再去查了。到了第四的时候,再去查询3条,由于数据只有两条了,所以最后只查询2个对象的集合。这样我查询集合其实只是2次而已。
三、默认情况下的查询
Hibernate: select company0_.id as id1_0_, company0_.name as name2_0_ from tb_company company0_---------one--------Hibernate: select emps0_.com_id as com_id3_1_0_, emps0_.em_id as em_id1_1_0_, emps0_.em_id as em_id1_1_1_, emps0_.name as name2_1_1_, emps0_.com_id as com_id3_1_1_ from tb_employee emps0_ where emps0_.com_id=?[Employee{em_id=1, name='wiming_0'}]---------------Hibernate: select emps0_.com_id as com_id3_1_0_, emps0_.em_id as em_id1_1_0_, emps0_.em_id as em_id1_1_1_, emps0_.name as name2_1_1_, emps0_.com_id as com_id3_1_1_ from tb_employee emps0_ where emps0_.com_id=?[Employee{em_id=2, name='wiming_1'}]---------------Hibernate: select emps0_.com_id as com_id3_1_0_, emps0_.em_id as em_id1_1_0_, emps0_.em_id as em_id1_1_1_, emps0_.name as name2_1_1_, emps0_.com_id as com_id3_1_1_ from tb_employee emps0_ where emps0_.com_id=?[Employee{em_id=3, name='wiming_2'}]---------------Hibernate: select emps0_.com_id as com_id3_1_0_, emps0_.em_id as em_id1_1_0_, emps0_.em_id as em_id1_1_1_, emps0_.name as name2_1_1_, emps0_.com_id as com_id3_1_1_ from tb_employee emps0_ where emps0_.com_id=?[Employee{em_id=4, name='wiming_3'}]---------------Hibernate: select emps0_.com_id as com_id3_1_0_, emps0_.em_id as em_id1_1_0_, emps0_.em_id as em_id1_1_1_, emps0_.name as name2_1_1_, emps0_.com_id as com_id3_1_1_ from tb_employee emps0_ where emps0_.com_id=?[Employee{em_id=5, name='wiming_4'}]---------------
四、Company.hbm.xml添加batch-size
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.qwm.hibernate03.domain" > <class name="Company" table="tb_company"> <id name="id"> <generator class="native"></generator> </id> <property name="name" ></property> <!-- batch-size: 抓取集合的数量为3. 抓取客户的集合时,一次抓取几个公司的员工集合. --> <set name="emps" batch-size="3"> <key column="com_id"></key> <one-to-many class="Employee"></one-to-many> </set> </class></hibernate-mapping>
五、批量抓取
Hibernate: select company0_.id as id1_0_, company0_.name as name2_0_ from tb_company company0_---------one--------Hibernate: select emps0_.com_id as com_id3_1_1_, emps0_.em_id as em_id1_1_1_, emps0_.em_id as em_id1_1_0_, emps0_.name as name2_1_0_, emps0_.com_id as com_id3_1_0_ from tb_employee emps0_ where emps0_.com_id in ( ?, ?, ? )[Employee{em_id=1, name='wiming_0'}]---------------[Employee{em_id=2, name='wiming_1'}]---------------[Employee{em_id=3, name='wiming_2'}]---------------Hibernate: select emps0_.com_id as com_id3_1_1_, emps0_.em_id as em_id1_1_1_, emps0_.em_id as em_id1_1_0_, emps0_.name as name2_1_0_, emps0_.com_id as com_id3_1_0_ from tb_employee emps0_ where emps0_.com_id in ( ?, ? )[Employee{em_id=4, name='wiming_3'}]---------------[Employee{em_id=5, name='wiming_4'}]---------------
阅读全文
0 0
- SSH与SSM学习之hibernate25——批量抓取
- SSH与SSM学习之hibernate04——Configuration
- SSH与SSM学习之hibernate05——SessionFactory
- SSH与SSM学习之hibernate06——Session
- SSH与SSM学习之hibernate07——Transaction
- SSH与SSM学习之hibernate13——HQL查询
- SSH与SSM学习之hibernate14——Criteria查询
- SSH与SSM学习之hibernate21——离线查询
- SSH与SSM学习之Struts206——参数获取
- SSH与SSM学习之Struts211——拦截器
- SSH与SSM学习之Struts212——标签
- SSH与SSM学习之Spring15——cglib代理
- SSH与SSM学习之SSH整合01——SSH整合原理和导包
- SSH与SSM学习之SSH整合04——Struts2与Spring整合
- SSH与SSM学习之SSH整合06——Hibernate与Spring整合
- SSH与SSM学习之SSH整合02——单独配置Spring容器
- SSH与SSM学习之SSH整合03——单独配置Struts2
- SSH与SSM学习之SSH整合05——单独配置Hibernate
- Unity ulua ugui 获取 InputField 框
- hibernate 延迟加载详解
- ThreadLocal线程范围内的共享变量
- 四 大数据分析之 SVD理论
- xdoj 1024 简单逆序对
- SSH与SSM学习之hibernate25——批量抓取
- 关于thinkphp5中model中的hasOne函数的参数说明
- 自定义JSTL函数库
- linux下opencv的交叉编译注意事项
- Linux错误:supervisor:/tmp/unix.sock can't find
- spring-cloud-zuul之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记
- 如何彻底卸载Jenkins(Windows版本)
- NOIP2007提高组 矩阵取数
- 电力系统潮流方程雅克比矩阵奇异解释