`

用Hibernate更新不到9万条数据用了2.5小时

阅读更多
    最近与六人行合作,给六人行增加新的功能,但又要照顾好原有的数据,我真的是伤透了脑筋。原来的基于asp下的数据库的设计简直一团糟,但你又不能大幅度修改,以免对原有的asp程序产生重大的影响。由于缺乏系统的规划,而且双方沟通也有障碍,再加之我在整合旧系统方面确实缺乏足够的经验,这项工作进展非常缓慢,我心里自然很是郁闷。
    昨天从旧系统中涉及图片的部分,都抽象成了相册对象、图片对象和缩略图对象,并把原来的旧系统中的活动图片表里的数据用select into导到了新表中,不到9万条记录。但表中图片名需要处理一下,即更新9万条数据。我写了一段程序,计算出共多少记录,然后定好了每次取多少记录,计算出取的次数,然后做了个循环,直接用hibernateDao的saveOrUpdate方法逐条更新,中间没有复杂的算法,但在我的机器(台式机,3.0cpu,512M内存)上竟然用了2.5小时,感觉时间是不是长了点?把代码贴在下面,有感兴趣的请说教说教
	/**
	 * 此action处理表的图片的url,在最初由旧表导入数据时,url字段里只有图片的名称,<br>
	 * 没有存储目录,我们此方法就是把图片对应的目录也给加上。加目录的规则是,取图片<br>
	 * 上传时间的年,月,组成目录名,然后再和图片名,一起构成图片的url.当然,此url<br>
	 * 相对于$req.contextPath/uploadFiles目录<br>
	 * 使用演示:formatImageUrl.action?myUrl=success<br>
	 * @author Davy Lee
	 * @return String myUrl
	 * @throws Exception
	 */
	public String formatImageUrl() throws Exception
	{
		int totalRecord = 0;
		int totalPage = 0;
		try 
		{
			totalRecord = ((Integer)((ImageList)this.getTableList()).getOption().uniqueResult("select count(t.id) from TImage as t")).intValue();
		} catch (Exception e) 
		{
			log.error(e);
		}
		if(totalRecord % this.getPageSize() == 0)
		{
			totalPage = totalRecord / this.getPageSize();
		}else
		{
			totalPage = totalRecord / this.getPageSize() + 1;
		}
		if(totalPage > 0)
		{
			List result = null;
			log.debug("一共有:" + totalPage + "页!");
			log.debug("每页记录数:" + this.getPageSize());
			log.debug("总共记录数为:" + totalRecord);
			for(int i=1;i<(totalPage+1);i++)
			{
				log.debug("开始处理第i页");
				try 
				{
					//fetch all record of TImage object
					((ImageList)this.getTableList()).setPageNum(i);
					result = ((ImageList)this.getTableList()).getList("from TImage as t ");
				} catch (RuntimeException e) 
				{
					log.error(e);
				}
				if(result != null && result.size() > 0)
				{
					ITImage image = null;
					SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
					SimpleDateFormat monthFormat = new SimpleDateFormat("M");
					//year of the upload time
					String year = "";
					//month of the upload time
					String month = "";
					//upload time
					Date inTime = null;
					//the name of the picture
					String picName = "";
					//the final url of picture which saved in database
					String url = "";
					log.debug("be careful!It is time to start ........");
					for(int j=0;j<result.size();j++)
					{		
						log.debug("开始处理第" + i + "页的第" + j + "条记录!");
						image = (ITImage) result.get(j);
						log.debug("current id is :" + image.getId());
						inTime = image.getInTime();
						year = yearFormat.format(inTime);
						month = monthFormat.format(inTime);
						picName = image.getUrl();
						//calculate final url
						url = year + "-" + month + "/" + picName;
						image.setUrl(url);
						//save object
						((ImageList)this.getTableList()).getOption().saveOrUpdate(image);
						//clear variables
						image = null;
						inTime = null;
						year = "";
						month = "";
						picName = "";
						url = "";
						log.debug("结束处理第" + i + "页的第" + j + "条记录!");
					}
					log.debug("be careful!It is time to end ........");
					result = null;
				}
			}		
		}
		return this.getMyUrl();		
	}

代码不是很完整,但能让人看出大体流程,心烦,不多写了........
分享到:
评论

相关推荐

    Hibernate中大量数据的更新

    本文将讨论使用 Hibernate 批量更新大量数据的方法和技巧。 批量更新的必要性 在实际应用中,我们经常需要将大量数据插入到数据库中,例如数据迁移、数据同步、数据备份等场景。在这些场景中,如果使用传统的 ...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...

    struts1.2 + spring2.5 + hibernate3.2框架demo

    Struts1.2、Spring2.5和Hibernate3.2是经典的Java企业级开发框架组合,它们各自在应用程序的不同层次上发挥着重要作用。Struts1.2是一个MVC(Model-View-Controller)框架,主要负责处理用户界面与业务逻辑之间的...

    Spring2.5+Hibernate3.2开发手册

    Spring 2.5 和 Hibernate 3.2 是两个在企业级Java应用开发中非常重要的框架。Spring 是一个全面的后端应用框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及大量的集成支持。而Hibernate 则是...

    hibernate5.2.10+struts2.5项目开发jar包

    在IT行业中,开发Java Web应用时,经常使用到的两个框架是Hibernate和Struts2。这个"hibernate5.2.10+struts2.5项目开发jar包"集合了这两个框架的特定版本,为开发者提供了一个基础的开发环境。下面我们将详细探讨...

    spring2.5+hibernate3.2

    spring2.5 + hibernate3.2x 标注(annotation)开发的简单示例 http://blog.csdn.net/IamHades/archive/2008/01/11/2038188.aspx

    spring2.5+hibernate基于xml配置的实例

    这个"spring2.5+hibernate基于xml配置的实例"是一个经典的组合,展示了如何在旧版本的Spring(2.5)和Hibernate中通过XML配置文件来整合和管理应用的组件。 首先,Spring 2.5是Spring框架的一个早期版本,它引入了...

    struts2+spring2.5+hibernate3.2

    Struts2、Spring2.5和Hibernate3.2是经典的Java Web开发框架组合,被称为SSH(Struts2、Spring、Hibernate)集成。这个整合包可能是为了帮助开发者快速搭建基于这些技术的项目环境。 Struts2是MVC(Model-View-...

    spring2.5 hibernate api

    Spring 2.5 和 Hibernate 是两个非常重要的Java企业级开发框架,它们在现代Web应用程序的开发中扮演着核心角色。Spring 提供了一个全面的编程和配置模型,旨在简化Java应用程序的开发,而Hibernate则是一个强大的...

    spring2.5+strust1+hibernate3.0JAR包集合

    然而,随着技术的发展,Spring、Struts和Hibernate都有了更新的版本,比如Spring Framework已经发展到5.x,Struts有Struts2,Hibernate也到了5.x,这些新版本带来了更多的特性和性能优化,但这个经典的组合仍然在...

    Struts2.0+spring2.5+hibernate3.2

    5. **开发业务逻辑**: 使用Spring的Service层和Hibernate的DAO层处理数据操作,Action层负责接收请求和转发响应。 SSH框架组合的优点包括: - **解耦合**:Spring的DI和AOP使得组件间松耦合,便于测试和维护。 - *...

    struts2.0 spring2.5 hibernate3.2 注解最新框架

    Struts2.0、Spring2.5和Hibernate3.2是经典的Java企业级开发框架,它们在2000年代末至2010年初广泛应用于构建大型Web应用程序。这三大框架的集成提供了完整的MVC(Model-View-Controller)架构,支持服务层和持久层...

    最新Struts2.1+Spring2.5+Hibernate3.3整合开发

    Struts2.1、Spring2.5和Hibernate3.3是Java Web开发中经典的三大框架,它们的整合应用是企业级应用开发中的常见实践。这三个框架的集成为开发者提供了强大的功能,包括模型-视图-控制器(MVC)架构、依赖注入(DI)...

    hibernate保存不到数据1

    标题中的"hibernate保存不到数据1"是一个关于Hibernate框架在尝试保存数据到数据库时遇到问题的场景。描述提到了一个具体的解决方案,即通过在`hibernate.cfg.xml`配置文件中设置`connection.autocommit`属性为`true...

    hibernate3+spring2.5

    在《hibernate3+spring2.5》示例中,Hibernate3负责数据持久化层,提供了对象的创建、查询、更新和删除等操作,极大地提高了开发效率。 Spring2.5是Java应用的全功能框架,它强调依赖注入(DI)和面向切面编程(AOP...

    struts2 hibernate3 spring2.5 annotation 整合

    Struts2、Hibernate3和Spring2.5是Java Web开发中的三大框架,它们各自负责不同的职责,但可以协同工作以构建高效的企业级应用。这里主要讨论的是如何将这三者结合,并利用注解(Annotation)进行配置,以简化开发...

    Hibernate下数据批量处理解决方案

    在Java开发中,尤其是涉及到大数据量的处理时,人们往往会质疑ORM框架,如Hibernate,是否适合进行批量数据操作。然而,实际上,通过适当的技术手段,我们可以有效地解决Hibernate在批量处理时可能出现的性能问题。...

    struts2+spring2.5+hibernate3.2整合完整项目,带数据库脚本

    Struts2、Spring2.5和Hibernate3.2是Java Web开发中经典的三大框架,它们的整合使用在过去的许多年里被广泛应用于企业级应用系统。这个完整的项目提供了从开发环境到运行环境的所有必要组件,包括数据库脚本,使得...

    SSH整合jar包-spring5.0+hibernate5.1+struts2.5

    Struts2.5是Struts框架的一个重要更新,提供了更高的稳定性和性能。它增强了对Java EE 7的支持,优化了过滤器和拦截器的处理,减少了内存消耗。Struts2.5也引入了更多的插件支持,比如JSON和REST插件,使得开发现代...

    struts2+spring2.5+hibernate3.3例子(增删改)

    Struts2、Spring2.5和Hibernate3.3是经典的Java Web开发框架组合,它们各自在应用程序的不同层面提供了强大的功能。这个例子展示了如何将这三个框架整合在一起,实现一个简单的图书管理系统的增删改操作。 **Struts...

Global site tag (gtag.js) - Google Analytics