使用easyexcel导入62个字段,十万加行数的excel

1️⃣ 准备工作

1. 版本对应
easyexcel官网的常见问题栏中往下滑找到

2. 下载jar包
maven项目不想多说,在pom.xml文件下,dependcy标签下引入就可以;
在web_inf项目下需要手动引入jar包,在mvn中心仓库,下载对应jar包以及所依赖的其他jar包

2️⃣ 编写代码

代码结构为很简单的control、dao、impl、entity
1.编写实体类,即你数据库表的对应字段

2.编写dao层

3.编写impl层

4.编写control层

5.xml

3️⃣ 前端html

4️⃣ 代码

1.entity
package com.tiancom.pas.phmxdr.entity;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter; /**
* @Author : YuanXin
* @create 2023/8/17 10:42
* @Description : Jxdx_Phdkmx实体类
*/
@Getter
@Setter
@EqualsAndHashCode
public class JxdxPhdkmx {
private Integer TJRQ;
private String JG;
private String SSJG;
private String EJJG;
private String JGHZ;
private String SSQY;
private String SFYCS;
private String JRJGBM;
private String JJH;
private String HTBH;
private String KHBH;
private String KHMC;
private String KHLX;
private String KHDL;
private String SSHY;
private String SYZXZ;
private String ZJLX;
private String ZJHM;
private String LXDZ;
private String LXDH;
private Integer SXZE;
private String SXEDQJ;
private Integer CZJE;
private Integer TCDYSYYE;
private String FFRQ;
private String YSDQR;
private String SJDQR;
private String ZQDQR;
private String DKQX;
private String KM;
private String YWPZ;
private Integer YLL;
private Integer NLL;
private Integer LXSR;
private String WJFL;
private String DKTXDL;
private String DKTXXL;
private String DKYT;
private String BHHYFL;
private String FSLX;
private String ZYDBFSDL;
private String ZYDBFSXL;
private String ZHDB;
private String DZYWZL;
private String BZ;
private String GHRBH;
private String CSBZ;
private String SFXYDK;
private String SFYJKJPH_BHPJRZ;
private String SFYJKJPH_HPURZ;
private String SFRHKJPH;
private String SFZXZ;
private String SFLSXD;
private String SFCYDK;
private String SFKJXD;
private String SFSNDK;
private String SFNH;
private String SFSCSD;
private String QD;
private String SFHTX;
private String SFZTX;
private String SFMY; }
2.dao
package com.tiancom.pas.phmxdr.dao;

import com.tiancom.pas.common.framework.ibatis.IBaseDAO;
import com.tiancom.pas.pagewidget.service.exception.PasCloudException;
import com.tiancom.pas.phmxdr.entity.JxdxPhdkmx;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import java.util.List; /**
* @Author : YuanXin
* @create 2023/8/11 15:50
* @Description : easyExcel的dao层
*/
@Repository
public class PhmxdrDao { @Autowired
private IBaseDAO ibaseDAO; public void save(List<JxdxPhdkmx> list) { try{
String sqlKey = "insert_jxdx_phdkmx";
ibaseDAO.batchInsert(sqlKey, (List)list);
}catch(Exception e){
e.printStackTrace();
throw new PasCloudException("查询系统状态异常!");
} } }
3.impl层
package com.tiancom.pas.phmxdr.dao;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import com.tiancom.pas.phmxdr.dao.PhmxdrDao;
import com.tiancom.pas.phmxdr.entity.JxdxPhdkmx;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.ArrayList;
import java.util.List; /**
* @Author : YuanXin
* @create 2023/8/11 15:34
* @Description : easyExcel的实现类,用于监听excel,是读取excel的监听器
*/
@Slf4j
public class PhmxdrImpl extends AnalysisEventListener<JxdxPhdkmx> { private static final Logger LOGGER = LoggerFactory.getLogger(JxdxPhdkmx.class); private static final int BATCH_COUNT = 100; List<JxdxPhdkmx> list = new ArrayList<JxdxPhdkmx>(); private PhmxdrDao phmxdrDao; public PhmxdrImpl(PhmxdrDao phmxdrDao) {
this.phmxdrDao = phmxdrDao;
}
private void saveData() {
LOGGER.info("{}条数据,开始存储数据库!", list.size());
phmxdrDao.save(list);
LOGGER.info("存储数据库成功!"); } @Override
public void invoke(JxdxPhdkmx jxdxPhdkmx, AnalysisContext analysisContext) {
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(jxdxPhdkmx));
list.add(jxdxPhdkmx);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (list.size() >= BATCH_COUNT) {
saveData();
// 存储完成清理 list
list.clear();
}
} @Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
saveData();
LOGGER.info("所有数据解析完成!");
}
}
4.control层
package com.tiancom.pas.phmxdr.controller;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.cache.MapCache;
import com.tiancom.pas.easyexcel.entity.easyexcelData;
import com.tiancom.pas.phmxdr.dao.PhmxdrDao;
import com.tiancom.pas.phmxdr.entity.JxdxPhdkmx;
import com.tiancom.pas.phmxdr.dao.PhmxdrImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* @Author : YuanXin
* @create 2023/8/11 15:44
* @Description : easyExcel的业务层
*/
@Controller
@RequestMapping("/phmxdr")
public class PhdrmxImportController { @Autowired
private PhmxdrDao phmxdrDao; /**
* 普惠导入明细-导入excel
*/
@RequestMapping(value = "/readExcel", method = {RequestMethod.POST, RequestMethod.GET})
@ResponseBody
public String readExcel(MultipartFile file, HttpServletRequest request) throws IOException { CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
commonsMultipartResolver.setDefaultEncoding("utf-8");
MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> map = mulReq.getFileMap();
EasyExcel.read(map.get("files").getInputStream(), JxdxPhdkmx.class, new PhmxdrImpl(phmxdrDao)).readCache(new MapCache()).sheet().doRead(); return "success"; } }
5.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="JXDX_PHDKMX">
<!-- 导入数据至临时表 -->
<insert id="insert_jxdx_phdkmx" parameterClass="com.tiancom.pas.phmxdr.entity.JxdxPhdkmx">
insert into jxdx_phdkmx(TJRQ, JG, SSJG, EJJG, JGHZ, SSQY, SFYCS, JRJGBM, JJH, HTBH, KHBH, KHMC, KHLX, KHDL,
SSHY, SYZXZ, ZJLX, ZJHM, LXDZ, LXDH, SXZE, SXEDQJ, CZJE, TCDYSYYE, FFRQ, YSDQR, SJDQR,
ZQDQR, DKQX, KM, YWPZ, YLL, NLL, LXSR, WJFL, DKTXDL, DKTXXL, DKYT, BHHYFL, FSLX,
ZYDBFSDL, ZYDBFSXL, ZHDB, DZYWZL, BZ, GHRBH, CSBZ, SFXYDK, SFYJKJPH_BHPJRZ,
SFYJKJPH_HPURZ, SFRHKJPH, SFZXZ, SFLSXD, SFCYDK, SFKJXD, SFSNDK, SFNH, SFSCSD, QD,
SFHTX, SFZTX, SFMY)
values (#TJRQ:INTEGER#,#JG:VARCHAR#, #SSJG:VARCHAR#, #EJJG:VARCHAR#, #JGHZ:VARCHAR#, #SSQY:VARCHAR#, #SFYCS:VARCHAR#, #JRJGBM:VARCHAR#, #JJH:VARCHAR#, #HTBH:VARCHAR#, #KHBH:VARCHAR#, #KHMC:VARCHAR#, #KHLX:VARCHAR#, #KHDL:VARCHAR#, #SSHY:VARCHAR#, #SYZXZ:VARCHAR#, #ZJLX:VARCHAR#, #ZJHM:VARCHAR#, #LXDZ:VARCHAR#, #LXDH:VARCHAR#, #SXZE:NUMBER#, #SXEDQJ:VARCHAR#, #CZJE:NUMBER#, #TCDYSYYE:NUMBER#, #FFRQ:VARCHAR#, #YSDQR:VARCHAR#, #SJDQR:VARCHAR#, #ZQDQR:VARCHAR#, #DKQX:VARCHAR#, #KM:VARCHAR#, #YWPZ:VARCHAR#, #YLL:NUMBER#, #NLL:NUMBER#, #LXSR:NUMBER#, #WJFL:VARCHAR#, #DKTXDL:VARCHAR#, #DKTXXL:VARCHAR#, #DKYT:VARCHAR#, #BHHYFL:VARCHAR#, #FSLX:VARCHAR#, #ZYDBFSDL:VARCHAR#, #ZYDBFSXL:VARCHAR#, #ZHDB:VARCHAR#, #DZYWZL:VARCHAR#, #BZ:VARCHAR#, #GHRBH:VARCHAR#, #CSBZ:VARCHAR#, #SFXYDK:VARCHAR#, #SFYJKJPH_BHPJRZ:VARCHAR#, #SFYJKJPH_HPURZ:VARCHAR#, #SFRHKJPH:VARCHAR#, #SFZXZ:VARCHAR#, #SFLSXD:VARCHAR#, #SFCYDK:VARCHAR#, #SFKJXD:VARCHAR#, #SFSNDK:VARCHAR#, #SFNH:VARCHAR#, #SFSCSD:VARCHAR#, #QD:VARCHAR#, #SFHTX:VARCHAR#, #SFZTX:VARCHAR#, #SFMY:VARCHAR#)
</insert> </sqlMap>
6 html
<!DOCTYPE html>
<html lang="en" xmlns:pastag="http://www.w3.org/2001/XMLSchema">
<head>
<meta charset="UTF-8">
<title>普惠导入明细</title>
<link href="../lib/easyui/2.3/css/default/easyui.css" rel="stylesheet" type="text/css"/>
<link href="../lib/easyui/2.3/css/icon.css" rel="stylesheet" type="text/css"/>
<link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css"/>
<link rel="stylesheet" type="text/css" href="../pasplus/runing/css/public.css"/>
<link rel="stylesheet" type="text/css" href="../lib/layui/common.css"/>
<link id="themesUI" rel="Stylesheet"
href="../smart/themes/smartone/blue/css/jquery-ui/jquery-ui-1.9.2.custom.min.css" type="text/css"/>
</head>
<body>
<div id="query_conn_panel">
<form name="myForm" method="post" id="myForm">
<table border="0" cellpadding="2" cellspacing="2" id="query_table">
<tr>
<td align="right">统计日期:</td>
<td align="left">
<input type="text" name="nd" maxlength="8" value="20230821" style="width:150px;"
class="{required:true} Wdate"
onfocus="WdatePicker({skin:'default',dateFmt:'yyyyMMdd'})"/>
</td>
<td>
<input type="button" name="search"
class="layui-btn layui-btn-normal layui-icon operation cbutton cbutton_bg_70 layui-btn-common"
style="letter-spacing:4px" value="查询" onclick="doSubmit()">
</td>
<td>
<div style="position: relative;">
<input type="button" name="import" value=" 导 入"
class="layui-btn layui-btn-warm iconfont operation cbutton cbutton_bg_90 layui-btn-common layui-icon">
<input class="scwd" type="file" onchange="toImportPage()">
</div> </td>
<td>
<input type="button" class="layui-btn layui-btn-warm imgButton iconfont layui-icon" name="export"
value=" 导 出 模 板"
id="exportBtn" onclick="exportResults()"/>
</td>
</tr>
</table>
</form>
</div>
</body>
<script src="../smart/common/util.js"></script>
<script type="text/javascript"> var datacolumns = [{
"title": "统计日期",
"field": "TJRQ",
"width": 150,
"align": "center",
"hidden": false
}, {
"title": "导入条数",
"field": "CO",
"width": 150,
"align": "left",
"hidden": false,
}]; $(document).ready(function () {
$(document.body).append("<table id='maintable'></table>");
mtable = $("#maintable");
mtable.attr("ltop", $(window).height() - mtable.offset().top);
mtable.datagrid({
rownumbers: true,
pagination: true,
singleSelect: true,
collapsible: true,
width: '100%',
nowrap: true,
height: $(window).height() - mtable.offset().top,
onLoadSuccess: function (data) {
setTimeout(function () {
tableAutoResize(); //需要比datagrid的计算更后面
var rows = data.rows;
for (var i = 0, l = rows.length; i < l; i++) { //设置表格左边的数字列与右边一样的高度
var item_arr = $('tr[datagrid-row-index=' + i + ']');
item_arr.eq(0).height(item_arr.eq(1).height())
}
}, 0) },
columns: [datacolumns]
});
}) var mtable = "";
function doSubmit() { //主表查询
$('.icon-add-self').css('visibility', 'hidden');
mtable.datagrid({
url: '/phmxdrOther/findCount.html',
queryParams: {
db: db,
nd: $('input[name=nd]').val()
}
});
} function toImportPage() {
var files = $('.scwd').prop('files');
var data = new FormData();
data.append('files', files[0]);
data.append('filename', files[0].name);
$('.scwd').val('');
newAjax.ajax({
url: '/phmxdr/readExcel.html',
type: 'POST',
data: data,
cache: false,
processData: false,
contentType: false
}).done(function (data) {
console.log("data",data);
if(data === "success"){
custom_alert("导入成功");
} else {
custom_alert("导入数据有误,请检查");
}
doSubmit();
});
} function exportResults() {
newAjax.get('/phmxdrOther/writeExcel.html', {
nd: $('input[name=nd]').val(),
contentType: 'application/vnd.ms-excel',
responseType: "blob"
}).done(function (res) {
window.open("/phmxdrOther/writeExcel.html");
// const link = document.createElement('a')
// const blob = new Blob([res], { type: 'application/vnd.ms-excel' })
// console.log("blob",blob);
// link.style.display = 'none'
// link.href = URL.createObjectURL(blob)
// link.setAttribute('download','普惠导入明细.xlsx')
// document.body.appendChild(link)
// link.click()
// document.body.removeChild(link)
})
} </script>
</html>

使用easyexcel导入62个字段,十万加行数的excel的更多相关文章

  1. EasyExcel导入导出

    maven依赖 <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --> <dependency> & ...

  2. EasyExcel导入工具(SpringMVC下使用)

    easyExcel:由阿里巴巴公司开发,由github托管 github上有详细使用文档 github地址:https://github.com/alibaba/easyexcel/blob/mast ...

  3. java使用户EasyExcel导入导出excel

    使用alibab的EasyExce完成导入导出excel 一.准备工作 1.导包 <!-- poi 相关--> <dependency> <groupId>org. ...

  4. MongoDB mongoimport 从csv导入数据指定字段类型

    mongoimport:指定字段的类型,防止将数字型的字符串导入成数值类型 1.正常模式导入 mongoimport -d idpad_zl -c trs_action_dzwl_zm --type ...

  5. MySQL导入含有中文字段(内容)CSV文件乱码解决方法

    特别的注意:一般的CSV文件并不是UTF-8编码,而是10008(MAC-Simplified Chinese GB 2312),所以再通过Navicat导入数据的时候需要指定的编码格式是10008( ...

  6. logstash用jdbc插件将数据库内容导入elasticsearch时间字段相差5小时

    logstash将mysql的数据导入elasticsearch之后发现时间字段的相差5个小时 解决办法: 在数据库连接配置后面加上?serverTimezone=UCT这个就OK了 logstash ...

  7. EasyExcel导入

    记录摸鱼的一天 技术栈:spring boot2.x+mybatis plus+easyExcel 2.2.6 生成简单的实体类等等等等 导入easyExcel的依赖 实体类 编写服务层 import ...

  8. C# 几十万级数据导出Excel,及Excel各种操作

    先上导出代码 /// <summary> /// 导出速度最快 /// </summary> /// <param name="list">&l ...

  9. excel导入 导出 兼容各个版本服务器不装EXCEL也可以

    给出 demo源码: http://pan.baidu.com/s/1hqGMudY 提取码:pw4n首先要引用 NPOI.dll (可在网上下载!) //导入 public void OnSubmi ...

  10. ERP中通过EDI导入资料的时候出现【Microsoft Office Excel不能访问文件‘C:\Windows\TEMP\433....’

    问题描述: ERP中导入单据的时候报错,Microsoft Office Excel不能访问文件'C:\Windows\TEMP\433....可能的原因有:·文件名称或路径不存在,文件正被其他程序使 ...

随机推荐

  1. AtCoder Beginner Contest 168 (A~E,E题很有意思)

    比赛链接:Here AB水题, C - : (Colon) 时针转过得角度为:\(2π \times \frac{h + \frac m{12}}{12}\) 分针转过得角度为:\(2π \times ...

  2. modint 板子

    自动对 int 取模 // modint template<int MOD> struct Fp { ll val; constexpr Fp(ll v = 0) noexcept : v ...

  3. 推荐收藏!年度Top20开源许可证风险等级

    开源许可现状 开发人员经常在软件中引入开源的代码片段.函数.方法和操作代码.因此,软件代码中经常会包含各种声明不同许可证的子组件.这些子组件的许可证条款和条件与项目整体主许可证的条款和条件冲突时,就会 ...

  4. SAE 2.0,让容器化应用开发更简单

    云原生容器化应用托管模式的演变 云原生这个概念从提出,到壮大,再到今天的极大普及,始终处于一个不断演进和革新的过程中.云原生体系下应用的托管形态是随着企业应用架构在不断演进的.最早的应用大多是集中式. ...

  5. Redis 也支持全文搜索 了?这也太强了

    在 2021 年我就了解到 RediSearch 这个项目,并已经把它用于我的开源项目 newbee-mall-pro 中. 就我的使用体验来说,简单场景下,用来平替 Elasticsearch 的使 ...

  6. Skywalking 的使用

    本文为博主原创,未经允许不得转载: 官网:http://skywalking.apache.org/下载:http://skywalking.apache.org/downloads/Github:h ...

  7. 关于编写C时的调试--VS,VSCODE,DEV-C++

    1.问题 VS最大的问题是不支持scanf函数,后面的调试部分我就没试了,主要用VS来写C++ VSCODE是服了他的C/C++插件,我死活卡在debug中scanf的输入部分,集成终端根本无法输入, ...

  8. [转帖]实用小技能:一键获取Harbor中镜像信息,快捷查询镜像

    [摘要]一键获取Harbor中的镜像列表,无需登录harbor UI,也可批量下载镜像到本地并保存为tar包.本文已参与「开源摘星计划」,欢迎正在阅读的你加入.活动链接:https://github. ...

  9. [转帖]009 Linux 文件大小统计与排序 (du 于 df 和 sort)

    https://my.oschina.net/u/3113381/blog/5463932 01 du 与 df 作用与区别? Linux 最有用最常用的统计文件大小命令是什么?无疑就是 du 和 d ...

  10. 使用 inotifywait的方式监控文件夹发生变化后自动执行脚本的方法

    0. 先安装inotify 最简单的方法为: yum install epel-release 安装扩展包源 yum install inotify-tools 1. 从网上抄了一下脚本 简单记录一下 ...