Hibernate的批量处理和分页技术、投影技术

投影查询——过滤部分字段
返回的List集合元素为Object[]

1Query query = session.createQuery("select c.cname, c.csex from Customer c"); 2List list = query.list(); 3Iterator iter = list.iterator(); 4Object[] objs = null; 5while(iter.hasNext()){ 6objs = (Object[]) iter.next(); 7for(int i = 0; i < objs.length; i ++){ 8System.out.println(objs[i]); 9System.out.println("-------------------");

分页查询
 返回的list集合元素是Object

1      Query query = session.createQuery("SELECT c FROM Customer c left join c.orders o where c.id=1"); 2 query.setMaxResults(2);//设置每次查询最多查询多少记录,简单来说就是页大小 3 query.setFirstResult(2);//设置每次查询的开始位置, 4 Iterator iter = query.list().iterator(); 5 while (iter.hasNext()) { 6 System.out.println(((Customer)iter.next())); 7 }

批量处理

1     @Test 2 public void testBatchDealWith(){ 3 for(int i = 0; i <10000; i ++){ 4 Customer customer=new Customer(); 5 customer.setCustomerName("jeremy"+i); 6 session.save(customer); 7 if(i==20||i==40){ 8 System.out.println("--------------------------"); 9 } 10 } 11 }

因为默认情况下,Hibernate会缓存所有的持久对象在session级别的缓存,并最终应用程序会失败并发生OutOfMemoryException某处50,000条记录左右。如果使用的是批量处理与Hibernate解决这个问题。

要使用批量处理功能,首先设置hibernate.jdbc.batch_size为批量大小若干无论是在20或50根据对象的大小。这将告诉每X行插入批次hibernate的容器。为了实现这个在代码中,我们需要做一点修改如下:

1@Test 2public void testBatchDealWith(){ 3 4 for(int i = 0; i <10000; i ++){ 5   Customer customer=new Customer(); 6   customer.setCustomerName("jeremy"+i); 7   session.save(customer); 8 if(i==50){ 9 session.flush(); 10 session.clear(); 11 } 12 } 13} 14 15<property name="hibernate.jdbc.batch_size">20</property>

这样运行速度会得到很好的提升

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Hibernate的批量处理和分页技术、投影技术 - HelloWorld