springmvc使用easypoi导出导入Excel表(2):导入Excel表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39220472/article/details/81952921

编译工具:eclipse

项目:maven+ssm

springmvc使用easypoi导出导入Excel表(1):导出Excel表

在pom.xml引入easypoi的依赖包:

<!--easypoi -->
		<dependency>
			<groupId>cn.afterturn</groupId>
			<artifactId>easypoi-base</artifactId>
			<version>3.0.3</version>
		</dependency>
		<dependency>
			<groupId>cn.afterturn</groupId>
			<artifactId>easypoi-web</artifactId>
			<version>3.0.3</version>
		</dependency>
		<dependency>
			<groupId>cn.afterturn</groupId>
			<artifactId>easypoi-annotation</artifactId>
			<version>3.0.3</version>
		</dependency>

导入Excel表:

前端页面:

<form method="post" enctype="multipart/form-data" action="insertExcel" class="pageForm required-validate" onsubmit="return iframeCallback(this, dialogAjaxDone);">
		<div class="pageFormContent" layoutH="56">

			<p>
				<label>上传模版:</label> <input name="file" type="file" class="valid">
			</p>
		</div>
		<div class="formBar">
			<ul>
				<li><div class="buttonActive">
						<div class="buttonContent">
							<button type="submit">保存</button>
						</div>
					</div></li>
				<li>
					<div class="button">
						<div class="buttonContent">
							<button type="button" class="close">取消</button>
						</div>
					</div>
				</li>
			</ul>
		</div>
	</form>

controller层:

// 上传excel文件
	@RequestMapping("/insertExcel")
	public Object insertExcel(HttpServletRequest req, MultipartFile file) {

		System.out.println("导入开始-->");
		System.out.println("file-->" + file);
		// 构建解析excel的easypoi参数
		ImportParams params = new ImportParams();
		params.setTitleRows(1); // 标题行
		params.setHeadRows(1); // 别名行
		try {
			// 读取数据
			List<SysWorker> list = ExcelImportUtil.importExcel(file.getInputStream(), SysWorker.class, params);
			// 设置对象的默认值
			for (SysWorker car : list) {
				System.out.println(car.toString());
			}
			// 批量导入
			int result = sysWorkerService.batchInsert(list);
			if (result > 0) {
				System.out.println("成功");
			} else {
				System.out.println("失败");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list(req, new Page<SysWorker>());
	}

service层:

int batchInsert(List<SysWorker> list);

serviceImpl层:


	@Override
	public int batchInsert(List<SysWorker> list) {
		int result = 0;
		//mysql不要一次性插入超过999条数据
		if(list.size() > 999) {
			//分批次插入
			int count = list.size() / 999;
			
			//分批次插入的集合
			List<List> subList = new ArrayList();
			
			for(int i=1; i<= count ; i++) {
				//截取list集合   0 - 999
				subList.add(list.subList( (i-1)*999 , i*999));
				
				if(i == count && list.size() % 999 != 0) {
					//有999的余数
					subList.add(list.subList(i*999, list.size() - 1));
				}
			}
			
			//分批次插入
			for (List list2 : subList) {
				result  += sysWorkerMapper.batchInsert(list2);
			}
			
			
		}else {
			result = sysWorkerMapper.batchInsert(list);
		}
		return result;
	}

mapper.xml:

 
  <insert id="batchInsert" parameterType="com.st.eleventh.model.SysWorker" >
    insert into s_worker( w_account,w_pwd )
    values 
    <foreach collection="list" item = "car" index="index" separator=",">
    	(#{car.w_account} , #{car.w_pwd})
    </foreach>
  </insert>
  

model层:(实体类的属性要加注解,注解名要跟导入Excel数据的列名一样,进行对应封装数据)

package com.st.eleventh.model;

import java.io.Serializable;

import cn.afterturn.easypoi.excel.annotation.Excel;

public class SysWorker implements Serializable {
    private Integer w_id;

    @Excel(name = "创建人")
    private String w_name;

    private String w_sex;

    private String w_phone;

    @Excel(name = "部门名称")
    private String w_account;


    
    //自己加setter,getter方法

}

要导入的Excel表数据:

 注:如果你要导入的Excel表数据有多列,那你用来封装的类的属性上要对应加上注解@Excel(name = "对应Excel表列名")

好了,导入就这么简单。

我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。

猜你喜欢

转载自blog.csdn.net/weixin_39220472/article/details/81952921
今日推荐