`
kaowww153
  • 浏览: 74541 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

hibernate+spring 批量添加人员

阅读更多

由于用hibernate很耗内存,在此用sql;

	@SuppressWarnings("unchecked")
	public void saveClassInform(final Inform inform) {
		//保存到发件箱
		informDAO.save(inform);
		String idString  = inform.getReceiveIdList().substring(0,inform.getReceiveIdList().length()-1);
		String hql ="select distinct(o.user.uid) from TribeMember o where o.tribe.tid in ("+idString+") and o.status=1";
		final List tmList = tribeMemberDAO.findAllByHQL(hql);
		//保存到收件人收件箱
		if(null!=tmList){
			informDAO.getHibernateTemplate().execute(new HibernateCallback() {			
			public Object doInHibernate(Session session) throws HibernateException,
						SQLException {
			Iterator iterator = tmList.iterator();
			Connection connection = SessionFactoryUtils.getDataSource(informDAO.getHibernateTemplate().getSessionFactory()).getConnection() ;
			PreparedStatement preparedStatement = null;
			String sql = "insert into inform_receive(inform_id,user_id,is_read,status) value(?,?,?,?)";
			preparedStatement = connection.prepareStatement(sql);
			while(iterator.hasNext()){	
				int userId =(Integer.parseInt(iterator.next().toString()));
				preparedStatement.setInt(1, inform.getIid());
				preparedStatement.setInt(2,userId );
				preparedStatement.setInt(3, 0);
				preparedStatement.setInt(4, 1);
				preparedStatement.addBatch();
			}
				preparedStatement.executeBatch();
 				preparedStatement.close();
 				session.flush();
 				session.close();
 				connection.close();
				return null;
			}
		});
	}
	}

 另外在这里附上jdbc批量插数据的代码:

/**
	 * 插入到本地数据库
	 * @param preparedStatement
	 * @param list
	 * @throws SQLException
	 */
	public void addsMedicare(PreparedStatement preparedStatement,List<Medicare> list) throws SQLException {
		List<Medicare> medicareList = list;
		if(CollectionUtils.isNotEmpty(medicareList)){
			PreparedStatement pstmt = null;
			try {
				pstmt = preparedStatement;
				for(int i=0;i<medicareList.size();i++){
					pstmt.setString(1, medicareList.get(i).getMedicareNo());
					pstmt.setString(2, medicareList.get(i).getMedicareUsername());
					pstmt.setString(3, null);
					pstmt.setString(4, medicareList.get(i).getMedicareIdentityNo());
					pstmt.setFloat(5, medicareList.get(i).getMedicareBalance());
					pstmt.setFloat(6, medicareList.get(i).getMedicareInfund());
					pstmt.setFloat(7, medicareList.get(i).getMedicareOutfund());
					pstmt.setTimestamp(8, medicareList.get(i).getMedicareLastModifyTime());
					pstmt.setInt(9, medicareList.get(i).getMedicareFlag()==null?0:medicareList.get(i).getMedicareFlag());
					pstmt.addBatch();
				}	
				pstmt.executeBatch();
			
			} catch (Exception e) {
				e.printStackTrace();
				throw new SQLException(e.getMessage());
			} 
		}
	}
	/**
	 * 插入到语音数据库
	 * @param preparedStatement
	 * @param list
	 * @throws SQLException
	 */
	public void addsIvrMedicare(PreparedStatement preparedStatement,List<Medicare> list) throws SQLException {
		List<Medicare> medicareList = list;
		if(CollectionUtils.isNotEmpty(medicareList)){
			PreparedStatement pstmt = null;
			try {
				pstmt = preparedStatement;
				for(int i=0;i<medicareList.size();i++){
					pstmt.setString(1, medicareList.get(i).getMedicareNo());
					pstmt.setString(2, medicareList.get(i).getMedicareUsername());
					pstmt.setFloat(3, medicareList.get(i).getMedicareBalance());
					pstmt.setFloat(4, medicareList.get(i).getMedicareInfund());
					pstmt.setFloat(5, medicareList.get(i).getMedicareOutfund());
					pstmt.setTimestamp(6, medicareList.get(i).getMedicareLastModifyTime());
					pstmt.addBatch();
				}	
				pstmt.executeBatch();
			} catch (Exception e) {
				e.printStackTrace();
				throw new SQLException(e.getMessage());
			} 
		}
	}
	
	/**
	 * 同步
	 * @throws SQLException
	 */
	public void synchronizeMedicare() throws SQLException {
		long beginTimestamp = System.currentTimeMillis();
		String synMedicareSql = QUERY_SYN_MEDICARE;
		//已有同步数据 ,同步该时间之后的数据
		Timestamp curMaxTime = medicareService.getCurMaxModifyTime();
		if(curMaxTime!= null){
			synMedicareSql += " where ckr.cmodifyTime >  '"+curMaxTime+"'";
		}
		Connection synConn = null; //同步数据库连接
		Connection localConn = null; //本地数据库连接
		Connection ivrConn = null;   //语音数据库
		
		PreparedStatement localPstmt = null; 
		PreparedStatement synPstmt = null; 
		PreparedStatement ivrPstmt = null;
		ResultSet rs = null;
		List<Medicare> list = new ArrayList<Medicare>();
		int index = 0;
		try {
			synConn = DBAccessor.getSynConnection();
			synPstmt = synConn.prepareStatement(synMedicareSql);
			localConn = DBAccessor.getLocalConnection();
			localPstmt = localConn.prepareStatement(INSERT_TO_MEDICARE);
			localConn.setAutoCommit(false);
			ivrConn = DBIVRConnectionFactory.getInstance().getConnection();
			ivrPstmt = ivrConn.prepareStatement(INSERT_TO_IVR_MEDICARE);
			ivrConn.setAutoCommit(false);
			Medicare fo = null;
		
			rs = synPstmt.executeQuery();
			while(rs.next()){
				fo = new Medicare();
				fo.setMedicareId(rs.getInt(1));
				fo.setMedicareNo(rs.getString(2));
				fo.setMedicareUsername(rs.getString(3));
				fo.setMedicareIdentityNo(rs.getString(4));
				fo.setMedicareBalance(rs.getFloat(5));
				fo.setMedicareInfund(rs.getFloat(6));
				fo.setMedicareOutfund(rs.getFloat(7));
				fo.setMedicareLastModifyTime(rs.getTimestamp(8));
				fo.setMedicareFlag(0); //同步过来的都是未发送
				list.add(fo);
				index++;
				if(index%2000==0){
					addsMedicare(localPstmt,list);
					addsIvrMedicare(ivrPstmt, list);
					list.clear();
				}
			}
			if(CollectionUtils.isNotEmpty(list)){
				addsMedicare(localPstmt,list);
				addsIvrMedicare(ivrPstmt, list);
				list.clear();
			}
			localConn.commit();
			ivrConn.commit();
		} catch (Exception e) {
			e.printStackTrace();
			throw new SQLException(e.getMessage());
		} finally{
	        try 
	        { 
	        	if (synPstmt != null){synPstmt.close(); } 
	        	if (synConn != null){synConn.close();} 
	        	
	        	if (localPstmt != null) {localPstmt.close();} 
	        	if (localConn != null){localConn.close();}
	        	
	        	if (ivrPstmt != null){ivrPstmt.close(); }
	        	if (ivrConn != null){ivrConn.close(); }
	        } 
	        catch(Exception e) {} 
        }
		logger.debug("======== 花费时间"+(System.currentTimeMillis()-beginTimestamp)/(60*1000.0)+"分钟"+"共插入"+index+"条数据");
	}

 

分享到:
评论
1 楼 llfzy 2010-02-26  
还用反射哦!

相关推荐

    javaee Struts2+Hibernate+Spring学生成绩管理系统

    在"javaee Struts2+Hibernate+Spring学生成绩管理系统"中,这三种技术被集成在一起,形成了一个强大的开发框架,用于实现对学生成绩的有效管理。 Struts2是Apache软件基金会的一个开源项目,它是基于MVC(Model-...

    Struts 2+Hibernate+Spring整合开发技术详解随书源码18

    Struts 2、Hibernate 和 Spring 是 Java Web 开发中的三个核心框架,它们分别负责不同的职责:Struts 2 主要处理 MVC(Model-View-Controller)架构中的控制器部分,Hibernate 处理对象关系映射(ORM),使得数据库...

    jsp源码图书管理系统(struts+hibernate+spring+ext)

    - **图书管理**:包括图书的添加、删除、修改、查询等操作,支持批量上传和分类管理。 - **借阅管理**:实现图书的借阅、归还、续借等功能,同时记录借阅历史,方便统计分析。 - **统计报表**:根据图书流通情况生成...

    Hibernate+Spring+DWR分页(原创)

    总结,通过整合Hibernate、Spring和DWR,我们可以构建出一套高效、用户体验优良的分页系统,同时实现无刷新、实时排序和批量操作等功能。这样的技术组合在大型Web应用中非常常见,也是提升应用质量的关键所在。理解...

    在线商城struts+hibernate+spring

    此外,Spring还提供了众多的扩展点,如Spring MVC用于Web层的处理,Spring Security提供安全控制,Spring Batch支持批量处理等。 在"OnlineMall"目录下,可能包含了项目的源代码、配置文件和其他资源。源代码中,...

    Struts2.1.6+Hibernate3.3.2+Spring2.5.5+Extjs3.0.0+Annotations

    为了整合Hibernate和Spring,需要将所需的jar包复制到项目的`WebContent\lib`目录下,并在项目的构建路径中添加这些jar包。其中包括Hibernate、Spring及相关依赖。 示例代码展示了如何实现一个基于Hibernate的基础...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)Eclipse版本

    4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...

    学生管理系统 JSP+Struts+hibernate

    3. 性能优化:如缓存策略、数据库索引优化、批量操作等,以提高系统性能。 4. 权限控制:实现角色权限管理,限制不同用户访问特定功能,保障系统安全。 5. 日志记录:记录系统操作日志,便于问题排查和后期维护。 ...

    【分享原创】flex+cairngorm+spring+hibernate

    使用flex+spring+hibernate 数据库mysql 主要功能添加、分页查询、批量更新、批量删除 数据库由hibernate自动创建(需修改hiberante配置) 下载后评论加1分记得评级

    hibernate与spring整合demo

    1. 引入依赖:在项目中添加Spring和Hibernate的依赖库。 2. 配置Hibernate:创建Hibernate的配置文件(如hibernate.cfg.xml),定义数据源、SessionFactory等。 3. 创建实体类:用Java类表示数据库表,并用注解或XML...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).pdf

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8) 本文档介绍了一个基于 ExtJS 4.2、Hibernate 4.1.7 和 Spring MVC 3.2.8 的通用后台管理系统。该系统可以作为 OA、网站、电子政务、ERP、CRM、APP...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).docx

    3. 数据管理:包括Grid列表和表单,提供添加、删除、批量删除、修改、查看、图片查看和按条件查询等功能。 4. 数据导入导出:支持Excel数据的导入导出,兼容xlsx和xls文件格式。 5. 资源管理:实现菜单管理,方便...

    ExtJS 4.2+JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)

    4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...

    通用后台管理系统(ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8).pdf

    《通用后台管理系统:基于ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8的高效框架》 该系统是一种高度可定制和可扩展的后台管理解决方案,适用于OA(办公自动化)、网站、电子政务、ERP(企业资源规划)、CRM...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)MyEclipse版本

    4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...

    通用后台管理系统(ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8).docx

    2. 实现了Grid列表和表单操作,支持添加、删除、批量删除、修改、查看、图片查看和条件查询,增强了数据交互和管理。 3. 提供了Excel数据的导入导出功能,支持xlsx和xls两种格式,便于数据的导入和导出操作。 4. ...

    Struts1.3+Spring2.5+Hibernate3手动整合

    - 实体类上添加Hibernate的注解,如`@Entity`、`@Table`等,声明属性与数据库字段的对应关系。 - 创建DAO接口和实现类,使用Hibernate SessionFactory进行数据库操作。 4. **整合Struts1.3和Spring2.5**: - ...

    Servlet+jsp+批量添加.docx

    在Java Web开发中,Servlet和JSP常被用于构建动态网站。这个例子展示了如何使用Servlet和JSP...在实际开发中,为了提高可维护性和安全性,通常会采用MVC框架(如Spring MVC)和ORM框架(如Hibernate)来简化这些任务。

Global site tag (gtag.js) - Google Analytics