范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

阿里巴巴Excel读写组件EasyExcel入门实践

  前言
  最近在开发一个运营端的系统,而运营端系统,经常有数据通过Excel文件上传、导出的功能,也就是涉及到Excel文件的读写操作。
  我们都知道,在Java开发中,Excel相关的操作,我们都使用POI进行开发。但是Excel文件的读写,经常有这么一个场景,就是涉及到大量数据的读写,使用POI经常会遇到机器内存使用率过高的问题,而EasyExcel就很好地解决了这个问题。Excel导出
  我们先进行简单的Excel数据导出实践。
  1.Maven依赖
  可以到mvnrepository上搜索EasyExcel,选择一个最新的版本即可。     com.alibaba     easyexcel     3.1.3 
  笔者采用的,是目前最新的3.1.3版本,生产环境还是建议使用稳定版。
  2.MySQL数据
  生产环境Excel数据导出,一般都是从MySQL数据库中获取。为了贴近正常场景,我们事先在MySQL上存储部分数据,然后试着将这些数据通过Excel格式导出。
  3.Excel对象映射
  EasyExcel有一个很不错的设计,就是Excel文件的列,是和Java对象的字段,一一对应的。这点和操作MySQL、JPA一样,毕竟Excel也可以理解为一个关系数据库文件。package com.example.springbooteasyexcel.domain;  import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data;  import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import java.math.BigDecimal; import java.util.Date;  /**  * 商品信息  *  * @author hongcunlin  */ @Entity @Data @Table public class ProductInfo {     /**      * 自增ID      */     @Id     @GeneratedValue     @ExcelProperty("商品id")     private Long id;      /**      * 商品名      */     @ExcelProperty("商品名称")     private String name;      /**      * 商品价格      */     @ExcelProperty("商品价格")     private BigDecimal price;      /**      * 创建时间      */     @ExcelProperty("商品创建时间")     private Date createTime = new Date(); }
  通过@ExcelProperty注解,是Excel列和Java对象中的字段对应起来。
  4.Excel导出HTTP接口
  通过JPA将数据从MySQL中读取出来,通过EasyExcel将数据通过Excel文件导出。package com.example.springbooteasyexcel.controller;  import com.alibaba.excel.EasyExcel; import com.example.springbooteasyexcel.domain.ProductInfo; import com.example.springbooteasyexcel.repository.ProductInfoRepository; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List;  /**  * Excel读写HTTP接口  *  * @author hongcunlin  */ @RestController @RequestMapping("/productInfoController") public class ProductInfoController {     /**      * 商品信息repository      */     @Resource     private ProductInfoRepository productInfoRepository;      /**      * Excel数据导出      *      * @param response excel文件      * @throws IOException e      */     @GetMapping("/exportProductInfo")     public void exportProductInfo(HttpServletResponse response) throws IOException {         List productInfoList = productInfoRepository.findAll();         response.setContentType("application/vnd.ms-excel");         response.setCharacterEncoding("utf-8");         response.setHeader("Content-disposition", "attachment;filename=test.xlsx");         EasyExcel.write(response.getOutputStream(), ProductInfo.class).sheet().doWrite(productInfoList);     } }
  Excel导出的API使用起来还是很简单,它导出完Excel数据,还会帮你关闭文件流,这点很关键。
  5.Excel导出测试
  我们访问我上面编写的接口,即可得到我们想要的Excel文件了,内容如下:
  符合我们的预期。Excel上传
  Excel上传写起来,稍微复杂一点点,主要是多了一个Excel读取的监听器
  1.Excel监听器package com.example.springbooteasyexcel.listener;  import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.CellExtra; import com.example.springbooteasyexcel.domain.ProductInfo; import lombok.Getter;  import java.util.ArrayList; import java.util.List;  /**  * 商品列表导出监听器  *  * @author hongcunlin  */ @Getter public class ProductInfoListener extends AnalysisEventListener {     /**      * 商品列表      */     private final List productInfoList = new ArrayList<>();      @Override     public void onException(Exception exception, AnalysisContext context) throws Exception {         super.onException(exception, context);     }      @Override     public void invoke(ProductInfo productInfo, AnalysisContext analysisContext) {         productInfoList.add(productInfo);     }      @Override     public void extra(CellExtra extra, AnalysisContext context) {         super.extra(extra, context);     }      @Override     public void doAfterAllAnalysed(AnalysisContext analysisContext) {      }      @Override     public boolean hasNext(AnalysisContext context) {         return super.hasNext(context);     } }
  主要继承AnalysisEventListener父类,并实现了相关方法。主要是invoke方法,里边是Excel数据读取之后的处理逻辑。
  2.Excel文件上传HTTP接口package com.example.springbooteasyexcel.controller;  import com.alibaba.excel.EasyExcel; import com.example.springbooteasyexcel.domain.ProductInfo; import com.example.springbooteasyexcel.listener.ProductInfoListener; import com.example.springbooteasyexcel.repository.ProductInfoRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;  import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List;  /**  * Excel读写HTTP接口  *  * @author hongcunlin  */ @Slf4j @RestController @RequestMapping("/productInfoController") public class ProductInfoController {     /**      * 商品信息repository      */     @Resource     private ProductInfoRepository productInfoRepository;      /**      * Excel数据上传      *      * @param file excel文件      * @throws IOException e      */     @PostMapping(value = "/uploadProductInfo", headers = "content-type=multipart/form-data")     public void uploadProductInfo(MultipartFile file) throws IOException {         ProductInfoListener productInfoListener = new ProductInfoListener();         EasyExcel.read(file.getInputStream(), ProductInfo.class, productInfoListener).sheet().doRead();         productInfoRepository.saveAll(productInfoListener.getProductInfoList());     } }
  和Excel文件读取差不多,也是很简洁的API,不再赘述。
  3.准备Excel数据
  我们编写2条Excel数据,后面用于文件的上传
  4.上传测试
  我们通过Swagger2提供的界面,进行Excel文件的上传测试。
  可以看到,我们上传的Excel文件中的数据,已经导入数据库中了,符合我们的预期。其他
  本文通过EasyExcel,轻松的进行了Excel文件的读取。本文是入门实践篇,后面关于Excel更多的细节,笔者有空再另起文章。

2022好声音总决赛落下帷幕,梁玉莹果然夺冠了今年好声音总决赛取消直播改为录播,录播时间为10月14日,播出时间为10月28日。据知情网友爆料,10月14日总决赛录播的结果出来了,冠亚军有了结果,跟大多数网友预料的一致,梁玉莹2022好声音总决赛录完了,梁玉莹夺冠,李楚楚拿了季军2022好声音在无声无息中落下帷幕了,跟我们预想中基本一致,最后的总冠军是梁玉莹,亚军是蔡子伊,但季军不是潘韵淇或王泽鹏,而是李楚楚,潘韵淇是全国第五名,王泽鹏是殿军。说实话,对于说走就走的旅行舟山花鸟岛花鸟岛位于浙江舟山市境内,在嵊泗的最北面,因整个小岛上的房子以蓝白色为主调,充满了浓浓的文艺气息,所以小岛也被称为中国的圣托里尼。虽然它不像东极岛枸杞岛那般有名,却有自己独特的味道京东超市大数据咖啡预制菜等33个品类成最高增速品类新京报贝壳财经讯(记者程子姣)10月14日,京东超市发布2022年前8个月快消生鲜行业消费趋势洞察,数据显示,快消生鲜行业品质化精细化高性价比便携化及悦己属性提升等消费趋势并未改变躺在沙发上就能轻松享受更多精彩,还不是因为我有雷鸟电视机周末时光对于年轻人来说是难得的放松时间,这个时候躺在沙发上,静静的看着电视机上绽放的各种精彩内容,顿时觉得身心舒缓了很多,因为这也是一种非常享受的解压方式呀!周末时对我来说更能够让降价很快的几款机型,大内存,有高刷,性能强,系统体验好的手机2022电竞季当下在手机体验,性能,一部手机到底是应该追求极致的性能,还是追求更佳的系统体验,所以今天就给大家推荐几款同时兼顾性能,系统体验的性价比手机,不仅价格便宜,配置优异,流有些人是怎么了,生病为什么不第一时间去医院?怎么想的?今天早上刚睡醒就在微博里看到了这样一条热搜妈妈信偏方致宝宝毳毛硬如猪毛,原来是宝妈听信家里老人说的偏方用蛋清给孩子搓背,没想到真矬出来满背的硬黑毛,整得孩子更疼了,都不敢翻身,不得请在正确的时间服药药品在正确的时间服用才能达到更好的治疗效果,你知道各种药品应该什么时间服用吗?首先,我们老百姓拿到药品,第一件事肯定是看药品说明书,但是许多药品说明书都非常复杂,各种专业术语,让很怪不得都不买iPhone14!iPhone13降千元跌破5千,提前备战双11iPhone14系列于9月16日正式上市,如今已经上市了近一个月了。苹果为了让消费者都选择Pro系列,没有对iPhone14标准版进行什么升级,用的还是上代A15芯片,新款4800软件项目找软件外包公司客户找外包公司进行软件开发,一般无外乎这几个原因,灵活度高降低成本提升效率和自身能力缺失。从我们遇到的案例上看,选择外包而不是自己组建团队开发,大致可以分为如下几种情况。北京木奇移刚刚抖音集团新logo一睹为快近日字节跳动改名为抖音集团,具体来说是字节跳动(香港)有限公司更名为抖音集团(香港)有限公司,北京字节跳动科技有限公司,更名为北京抖音信息服务有限公司。伴随着改名,也发布了新的标志
柿子红了5首原创(一)秋风一袭色正浓,玉树千枝挂灯笼。道尽天南霜风染,尽在柿意不言中。(二)依稀朦胧望村庄,屋瓦鳞次泛油光。树高妆成一幅画,红柿如意万民祥。(三)秋风秋雨过山岗,玉树临风裹红装。久孕晚期如何度过?关键词2840周4个时间节点2项重要监测不适及应对孕晚期重要的4个时间节点孕28周孕32周孕34周孕36周。孕28周开始进入孕晚期,需要隔两周产检一次。可能会开始出现假性宫缩,腹部23岁全职宝妈的日常我是子秋,点击右上角关注,每天为你分享个人成长干货我的宝贝糖糖文子秋图原创我和我老公是经朋友介绍认识的,初次见面他像极了霸道总裁,高冷的气质,成熟稳重的打扮,给人一种不敢靠近的感觉10。3现货黄金午间分析大概率延续反弹包括美联储在内的全球主要央行不太可能在短期内改变路径,大幅激进加息政策料将延续,全球经济增长势头正在减弱,表明美元将继续保持强势,很难找到持续看涨黄金的理由。上周,随着美元指数自逾当乳腺癌内分泌治疗遇上潮热,4个妙招应对它在乳腺癌患者群体中,约75的患者为雌激素受体阳性乳腺癌。这部分患者需接受至少5年的辅助内分泌治疗1。内分泌治疗的主要作用机制,是通过药物降低患者体内的雌激素水平,或者影响其发挥作用等了三年的AirPodsPro2,依然是TWS耳机天花板作为一款时隔三年才换代的数码产品,第二代AirPodsPro可以说是让很多人一阵好等,这里面也包括托尼本人。就算第一代AirPodsPro很能打,但是隔了这么多年才更新换代,苹果也预计下降42!国际原材料价格猛跌等等党表示明年更便宜?虽然涨价已经是今年汽车行业常见的现象,尤其在新能源的风口下,电动车价格免不了水涨船高。但是!说到赚钱,厂家却站出来喊很冤枉,压根自己就没赚。从表面数据来看,大部分原材料涨价利润进到不锈钢管龙头,久立特材战略参股永兴材料,受益锂盐价格大涨(报告出品方分析师国盛证券张津铭)1。公司为工业不锈钢管行业龙头1。1。发展历程浙江久立特材科技股份有限公司前身为创建于1987年的湖州金属型材厂,于2009年12月11日上市公司甲状腺癌有什么注意的?甲状腺癌是一种常见的甲状腺恶性肿瘤,要想治疗好,在饮食上必须特别注意,不能吃的尽量不要吃,以免影响身体健康。因此,甲状腺癌患者不能吃些什么呢?这里有三大类食物,一定要避免。详细介绍iPhone15Flip概念机无比豪横的苹果回归,这才是折叠机天花板折叠屏手机当前的发展速度还是十分迅猛的,在华为和三星分别发布了折叠屏手机之后,各大手机厂商为了展示自己强大的研发能力,也都纷纷发布了折叠屏手机,并且在价格上折叠屏手机也一路走低,逐体检出乳腺结节,都说要忌口,中医帮调理,不忌口也能治乳腺结节很多乳腺结节患者都知道乳腺结节的发生发展与体内雌性激素水平过高有一定关系。所以从饮食上就会格外注意,有哪些能吃哪些不能吃,很多患者认为豆制品蜂蜜葡萄柚牛奶燕窝等含有雌性激素不适合乳