`

spring+mybatis实现csv批量上传

阅读更多

简单的一个小例子而已,测试了下9W多条数据导入如果不做批量插入很费时,后改为批量插入在6秒左右:

上传jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script type="text/javascript" src="../js/jquery-1.11.0.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
        i = 1;
        j = 1;
        $(document).ready(function(){
            $("#btn_add1").click(function(){
                document.getElementById("newUpload1").innerHTML+='<div id="div_'+i+'"><input  name="file" type="file"  /><input type="button" value="删除"  onclick="del_1('+i+')"/></div>';
                i = i + 1;
            });

            $("#btn_add2").click(function(){
                document.getElementById("newUpload2").innerHTML+='<div id="div_'+j+'"><input  name="file_'+j+'" type="file"  /><input type="button" value="删除"  onclick="del_2('+j+')"/></div>';
                j = j + 1;
            });
        });

        function del_1(o){
            document.getElementById("newUpload1").removeChild(document.getElementById("div_"+o));
        }

        function del_2(o){
            document.getElementById("newUpload2").removeChild(document.getElementById("div_"+o));
        }

    </script>
</head>
<body>

<h1>springMVC字节流输入上传文件</h1>
<form name="userForm1" action="/file/upload" enctype="multipart/form-data" method="post">
    <div id="newUpload1">
        <input type="file" name="file">
    </div>

    <input type="button" id="btn_add1" value="增加一行" >
    <input type="submit" value="上传" >
</form>
<br>
<br>
<hr align="left" width="60%" color="#FF0000" size="3">
<br>
<br>
<h1>springMVC包装类上传文件</h1>
<form name="userForm2" action="/file/upload2" enctype="multipart/form-data" method="post"">
<div id="newUpload2">
    <input type="file" name="file">
</div>
<input type="button" id="btn_add2" value="增加一行" >
<input type="submit" value="上传" >


</form>
</body>
</html>

 action部分,每1000条执行一次

 /**
     * 更新csv数据
     * @return
     */
    @RequestMapping("/updatePayFeeData")
    @ResponseBody
    public Map<String, String> updatePayFeeData(HttpServletRequest request,HttpServletResponse response){
    	Map<String,String> map = new HashMap<String, String>();
		 //创建一个通用的多部分解析器  
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());  
        //判断 request 是否有文件上传,即多部分请求  
        int pre = (int) System.currentTimeMillis();  
        if(multipartResolver.isMultipart(request)){  
            //转换成多部分request    
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;  
            //取得request中的所有文件名  
            Iterator<String> iter = multiRequest.getFileNames();  
            while(iter.hasNext()){  
                try {
	                	MultipartFile file = multiRequest.getFile(iter.next());
	                	InputStream is=file.getInputStream();
	                	CsvUtil test = new CsvUtil(is);
	                	List<List<String>> csvList = test.readCSVFile();
	                	if (!csvList.isEmpty()) {
//	                		int resNum=payFeeService.deleteData();
	                		payFeeService.deleteData();
//	                		int j=csvList.size();
	                		List<PayFeeEntity> feeEntitiesList=new ArrayList<PayFeeEntity>();
	                		for (List<String> list : csvList) {
	                			PayFeeEntity payFeeEntity =new PayFeeEntity();
	                			payFeeEntity.setYearMon(list.get(0));
	                			payFeeEntity.setIdno(list.get(1));
	                			payFeeEntity.setMonthPay(Integer.valueOf(list.get(2)));
	                			payFeeEntity.setTotlePayfee(Long.valueOf(list.get(3)));
	                			feeEntitiesList.add(payFeeEntity);
	                			if (feeEntitiesList.size()==1000) {
//	                				int resultNum=payFeeService.insertPayFee(payFeeEntity);
	                				int resultNum=payFeeService.addStudentPath(feeEntitiesList);
	                				feeEntitiesList.clear();
								}
	                		}
	                		if (feeEntitiesList.size()>0) {
//                				int resultNum=payFeeService.insertPayFee(payFeeEntity);
                				int resultNum=payFeeService.addStudentPath(feeEntitiesList);
                				feeEntitiesList.clear();
							}
	                		 int finaltime = (int) System.currentTimeMillis();  
	                         System.out.println(finaltime - pre);  
	                		map.put("code",Constant.getCode(Constant.SUCCESS));
	                		map.put("result","success");
	                		return map;
						}else {
							map.put("code",Constant.getCode(Constant.EMP_FILE));
							map.put("result","false");
							return map;
						}
        		} catch (IOException e) {
        			// TODO Auto-generated catch block
        			e.printStackTrace();
        			map.put("code",Constant.getCode(Constant.FILE_FAIL));
        			map.put("msg",e.getMessage());
        			map.put("result","fail");
        			return map;
        		} catch (Exception e) {
        			// TODO Auto-generated catch block
        			e.printStackTrace();
        			map.put("code",Constant.getCode(Constant.FILE_FAIL));
        			map.put("msg",e.getMessage());
        			map.put("result","fail");
        			return map;
        		}
            }
        }
        map.put("code",Constant.getCode(Constant.FILE_FAIL));
		map.put("result","fail");
        return map;
		
	}

 mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.thfund.dao.PayFeeEntityMapper">
	<resultMap id="BaseResultMap" type="com.thfund.model.PayFeeEntity">
		<id column="id" property="id" jdbcType="INTEGER" />
		<result column="year_mon" property="yearMon" jdbcType="VARCHAR" />
		<result column="idno" property="idno" jdbcType="VARCHAR" />
		<result column="month_pay" property="monthPay" jdbcType="INTEGER" />
		<result column="totle_payfee" property="totlePayfee" jdbcType="BIGINT" />
	</resultMap>
	<sql id="Base_Column_List">
		id, year_mon, idno, month_pay, totle_payfee
	</sql>
	
	<insert id="addStudentPath" parameterType="java.util.List">
		insert into pay_fee_info(year_mon, idno,
		month_pay, totle_payfee)
		values
		<foreach collection="list" item="item" index="index" separator="," >  
       		 (#{item.yearMon,jdbcType=VARCHAR},#{item.idno,jdbcType=VARCHAR},#{item.monthPay,jdbcType=INTEGER},#{item.totlePayfee,jdbcType=BIGINT})  
    	</foreach>  
	</insert>	
</mapper>

 mapper.java

int addStudentPath(List<PayFeeEntity> payFeeList);

 

 

分享到:
评论

相关推荐

    SSM+Layui实现数据导入.zip

    SSM+Layui 实现数据导入是一个常见的Java Web开发中的功能,主要涉及Spring、SpringMVC、MyBatis(SSM)这三大框架的整合以及Layui前端UI库的使用。本项目旨在演示如何在Java环境中通过SSM框架处理用户上传的Excel或...

    ssm的jdk1.8批量导入等相关功能

    在"ssm的jdk1.8批量导入等相关功能"这个主题中,我们将深入探讨如何利用SSM框架配合Java 1.8实现文件上传、批量数据导入、定时任务以及事务管理等功能。 1. **文件上传** 文件上传在Web应用中是非常常见的功能。在...

    SpringBatch:示例 Spring Batch 应用程序将从 CSV 读取数据并将其存储在数据库中

    **SpringBatch 深度解析:CSV 数据处理与数据库存储** SpringBatch 是一个全面的、企业级的批处理框架,由 Spring 社区开发,它为处理大量数据提供了灵活、可扩展的解决方案。本篇文章将深入探讨如何使用 Spring ...

    Java Web供电企业人力资源薪酬管理系统的设计与实现

    - **技术实现**:采用CSV或Excel格式的数据文件进行批量操作,利用Spring框架提供的事务控制功能确保数据的一致性和完整性。 **3. 个税申报管理** - **功能描述**:根据最新的税收政策自动计算个人所得税,支持...

    java数据批量处理

    4. Spring Batch:Spring框架下的批量处理组件,提供完整的批量处理解决方案,包括分割、读取、处理和写入。 总结,Java数据批量处理涉及到文件读写、数据结构、并行处理、数据库操作、性能优化等多个方面。开发者...

    java版高自由度后台_增加充值通道_在线人数显示_物品列表批量导入导出.rar

    使用Apache POI库可以方便地处理Excel文件,而文件上传则可能借助于Spring的MultipartFile接口来实现。 综上所述,这个Java后台系统涵盖了支付处理、实时用户监控和数据批量管理等多个重要模块,这些都是构建复杂、...

    SSM动力电池数据管理系统(源码+数据库)301559

    SSM动力电池数据管理系统是一款专为电动汽车电池状态设计的软件系统,它采用先进的技术栈,包括Spring、SpringMVC和MyBatis,同时结合Vue前端框架和Redis缓存技术,实现高效的数据处理和管理。该系统提供了在线操作...

    jsp+ssm+mysql在线考试系统

    本系统采用Java语言,结合Struts2(S)、Spring(S)和MyBatis(M)三大框架构建,数据库选用MySQL,具有管理员和学生两种角色,提供了丰富的功能,如在线答题、题目管理、用户管理以及批量导入试题和快速生成试卷等...

    SSM+bootstrap+手機考試系統

    题库导入通常涉及数据导入导出功能,可能需要处理CSV、Excel等格式的文件,通过SSM框架与数据库进行交互,将题库数据批量导入到Oracle中。试题生成可能基于一定的规则,例如随机抽取一定数量的题目,确保每次考试的...

    springboot旧物回收管理系统(源码+数据库)221713

    2. **本地数据导入**:此功能可能允许用户上传CSV或Excel文件,将旧物信息批量导入到系统中。这需要处理文件读取、数据解析和数据验证,然后将数据正确地存入数据库。 3. **管理页面与数据库交换**:管理端需要有...

    基于Springboot的学生成绩分析和弱项辅助系统(有报告) Javaee项目,springboot项目

    2. **成绩录入与管理**:教师可以方便地录入和管理学生的成绩,系统支持批量导入和导出功能,以CSV或Excel格式存储数据,便于数据交换。 3. **成绩分析**:系统通过统计和计算,生成学生成绩的各类报表,如平均分、...

    DataToMysql.zip

    SSM(Spring、SpringMVC、MyBatis)是Java开发中的常用框架组合,Eclipse则是一种广泛使用的Java集成开发环境。这个压缩包很可能是为了展示如何在SSM环境下,使用Java实现数据的批量处理和存入MySQL。 在这个案例中...

    基于springboot的商业辅助决策系统源码数据库.zip

    1. 数据导入导出:支持Excel、CSV格式的数据导入,方便用户批量导入数据进行分析。 2. 数据清洗与预处理:通过自定义规则,清洗原始数据,去除异常值,为后续分析做准备。 3. 数据分析:使用统计学方法和机器学习...

    基于ssm 报损项目导入用带sql脚本

    5. **数据导入功能**:项目描述中提到了“导入可用”,这可能意味着系统支持批量导入数据,例如从CSV或Excel文件导入库存信息或维修记录。这种功能通常涉及到文件解析、数据验证和数据库批处理操作。 6. **事务管理...

    SSM框架搭建的资产管理系统

    物品信息导入导出功能通常使用CSV或Excel格式,允许用户批量导入或导出物品数据。这可能通过使用Apache POI库来实现,该库支持读写Microsoft Office格式的文件。 入库、出库、借出和归还功能涉及到物品的流动状态...

    yanjiusheng.rar_yanjiusheng

    考虑到系统需要导入研究生信息,可能有数据迁移或批量导入的需求,这可能通过CSV文件、Excel表格或其他数据格式实现。系统可能包含一个数据导入模块,该模块读取这些文件并将其转换为数据库可理解的格式。 此外,...

    基于vue + springboot的学生成绩管理系统.zip

    2. 成绩录入:教师可以录入或导入学生的成绩,系统可能提供批量导入功能,如CSV或Excel文件。 3. 成绩查询:学生和教师可以查看个人或全班的成绩,可能支持按科目、学期等条件筛选。 4. 统计分析:系统提供成绩统计...

    教务管理系统.rar

    - 导入功能:系统应能接收Excel或CSV格式的文件,批量导入学生信息。这需要使用到文件上传和解析技术,例如Apache POI库处理Excel文件。 - 导出功能:允许用户将学生信息导出为文件,便于备份或共享。导出同样使用...

    JAVA语言 教务登记查询系统

    它可以支持批量导入、导出功能,使用Java的文件操作API如File、BufferedReader和BufferedWriter等处理Excel或CSV文件。同时,学籍信息的修改需确保数据的一致性,这可能需要用到事务管理,如JDBC的Connection对象的...

    java在线考试系统

    系统支持数据导入,这通常涉及到CSV或Excel文件的读取,将外部数据批量导入到数据库中。这一功能便于快速初始化系统,或者定期更新试题库。 4. **配置文件管理**: 配置文件用于管理系统的运行参数,如数据库连接...

Global site tag (gtag.js) - Google Analytics