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

SpringBootMybatisplus整合easyExcel导入Excel到数据库导出

  一、前言
  今天小编带大家一起整合一下 easyExcel  ,之所以用这个,是因为easyExcel  性能比较好,不会报OOM  !
  市面上常见的导入导出Excel分为三种: hutool easyExcel poi
  hutool  和easyExcel  都是对poi  的封装,使用起来更加方便!
  如果想使用poi  和hutool  导出的可以看一下小编的之前写的文章:
  使用POI+hutool导入Excel并把内容添加到数据库中,直接可以用!!!_掉发的小王的博客-CSDN博客_hutool导入excel
  使用POI把查询到的数据表数据导出到Excel中,一个表一个sheet.最详细!!!_掉发的小王的博客-CSDN博客
  导出的话看一下这篇,下面主要以导入来展开介绍!
  EasyExcel导出Excel表格到浏览器,并通过Postman测试导出Excel【入门案例】
  二、导入依赖
  小编这里是 3.0.X  版本的,版本不同可能导致部分有出入,如果大家版本是3.1.X  ,可以去官方文档看看有不一样的!
  官方文档      com.alibaba     easyexcel     3.0.5  三、实体类
  这里可以自带的转换器: @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒") LocalDateTimeStringConverter
  或者自定义转化器:
  实现: implements Converter
  具体文档:官方文档
  @ExcelProperty  参数注意:
  这里不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配
  用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据 /**  * @author wangzhenjun  * @date 2022/12/2 15:52  */ @Data public class Test {      @TableId     private Integer id;     @ExcelProperty(index = 0)     private String name;     @ExcelProperty(index = 1)     private Integer age;     @ExcelProperty(index = 2,converter = LocalDateTimeStringConverter.class)     private LocalDateTime time; } 四、编写监听器
  注意点:
  这个监听器一定不要是单例的,被spring管理默认为单例,如果要使用 @Component  ,一定要加上:
  @Scope("prototype")  ,这样在创建完后spring不会进行管理,每次都会是新bean!
  不加@Component  在导入时要进行new ImportDataListener  !
  小编这里不想new了直接这样写!!如果不想这样,可以使用构造器set进行使用!
  BATCH_COUNT  :数据阈值,超过了就会清理list,在之前可以进行保存到数据库中,方便内存回收,防治OOM  !
  这里保存到数据库中一般使用批量保存  ,不要解析到一行就去保存数据库中,这样数据量大会给数据库增加IO,导致挂掉!这里小编使用ServiceImpl  的saveBatch()  方法,也可以自己写一下,像小编这样写,会出现循环依赖,加上@Lazy  就行!/**  * @author wangzhenjun  * @date 2022/12/2 15:38  */ @Slf4j @Component // 每次bean都是新的,不要单例 @Scope("prototype") public class ImportDataListener implements ReadListener {      @Autowired     @Lazy     private TestService testService;      /**      * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收      */     private static final int BATCH_COUNT = 100;     /**      * 缓存的数据      */     private List importExcelDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);       /**      * 这个每一条数据解析都会来调用      *      * @param data    one row value. Is is same as {@link AnalysisContext#readRowHolder()}      * @param context      */     @Override     public void invoke(Test data, AnalysisContext context) {         log.info("解析到一条数据:{}", JSON.toJSONString(data));         importExcelDataList.add(data);         // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM         if (importExcelDataList.size() >= BATCH_COUNT) {             saveData();             // 存储完成清理 list             importExcelDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);         }     }      /**      * 所有数据解析完成了 都会来调用      *      * @param context      */     @Override     public void doAfterAllAnalysed(AnalysisContext context) {         // 这里也要保存数据,确保最后遗留的数据也存储到数据库         saveData();         log.info("所有数据解析完成!");     }      /**      * 加上存储数据库      */     private void saveData() {         log.info("{}条数据,开始存储数据库!", importExcelDataList.size());         testService.saveBatch(importExcelDataList);         log.info("存储数据库成功!");     } } 五、Controller/**  * @author wangzhenjun  * @date 2022/10/26 16:51  */ @Slf4j @RestController @RequestMapping("/test") public class TestController {      @Autowired     private TestService testService;      @PostMapping("/import")     public Result importExcel(@RequestBody MultipartFile multipartFile){         testService.importExcel(multipartFile);         return Result.success("ok");     } } 六、Service/**  * @author wangzhenjun  * @date 2022/10/26 16:55  */ public interface TestService extends IService {     void importExcel(MultipartFile multipartFile); } 七、ServiceImpl/**  * @author wangzhenjun  * @date 2022/10/26 16:56  */ @Service public class TestServiceImpl extends ServiceImpl implements TestService{      @Autowired     private ImportDataListener importDataListener;      @SneakyThrows     @Override     public void importExcel(MultipartFile multipartFile) {         InputStream inputStream = multipartFile.getInputStream();         // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭         EasyExcel.read(inputStream, Test.class, importDataListener).sheet().doRead();     } } 八、Mapper/**  * @author wangzhenjun  * @date 2022/10/26 17:07  */ public interface TestDbMapper extends BaseMapper { } 九、测试
  准备Excel数据:
  在这里插入图片描述
  postman上传:
  在这里插入图片描述
  控制台打印:
  在这里插入图片描述
  数据库查看:
  在这里插入图片描述
  完美搞定!! 十、总结
  这样就完成了easyExcel批量导入Excel到数据库,还是有很多要注意的点: 自定义转换器 监听器不要单例 保存数据库采用批量 版本差距
  如果对你有帮助,还请不要吝啬您的发财小手,你的一键三连是我写作的动力,谢谢大家哈!!
  可以看下小编的微信公众号首发看,欢迎关注,一起交流哈!!

我的家乡有近期,不少旅游地火出圈淄博有烧烤云南有泼水节贵州有村BA不少网友也盘点起自己家乡的特色还想了解更多?这些宝藏旅游地推荐给你1hr山东潍坊近日,山东潍坊国际风筝会开幕现场上演硬核风筝五都荟洛探寻全媒体直播活动在洛阳启动河南日报客户端记者田宜龙王雪娜吉小平4月17日,由河南日报社与洛阳市委宣传部联合推出的行走河南读懂中国之五都荟洛探寻全媒体直播活动在二里头夏都遗址博物馆启动。作为华夏文明的重要发源金海湖150万平方米露营地开放了!上周六,平谷区环金海湖的十余块露营地再次开放。每周六,营地都将举办不同形式的文旅活动,打造小而美的微度假综合体。金海湖如一块翡翠,镶嵌在连绵群山中。山湖为背景帐篷为营,是不少年轻家不出国门,在一脚踏四国的小县城就可以尽享异国风情你向往童话世界吗?你想看满大街的欧式建筑,还有那自带阿尔卑斯山画风的异域风情吗?如果你的答案是肯定的,那么欢迎你来新疆的布尔津,因为它是一个能满足你所有幻想的边陲小城,同时也是我国李楠犯大错!G2中场曾大吼队员没有职业道德,自己同流合污该罚江苏男篮与上海男篮之间由于消极比赛被篮协重罚,参与其中的江苏男篮主教练李楠被处罚停赛3年,这对于他而言绝对是一个毁灭性的打击!曾经中国男篮的小李飞刀,曾经国家队的主教练,戎马一生战假期遛娃,这条攻略值得收藏!读万卷书,行万里路丰富的自然地质景观深厚的历史文化积淀独特的民族风情让新疆成为研学游的热门地点图片来源一部手机游赛湖万物随春醒美好皆可期在这充满希望的季节里让我们带着萌娃一起来新疆菏泽凉皮事件,最应该追究的不是这个女人,是站她身后的两个男人一碗凉皮,一个女人,毁了一个景点,一座城市的形象。但是大多数人只看到了这个女人的嚣张跋扈,却忽略站在她背后的那两个男人。首先,作为景区工作人员,商户的食品安全问题本就是工作的重点,无锡的菜场,都这么卷了?要说一座城市最接地气的地方在哪里当然是菜市场逛菜市场的治愈性只有去过的人才能体会热闹有生活气息人间烟火扑面而来让人感到生之乐趣听说现在的菜市场很卷不仅要有颜值还要有智慧有很多菜市场安顺经开区十里荷廊的樱桃熟了人间四月芳菲尽,又到樱桃成熟时。4月是摘樱桃的好时节。经开区十里荷廊樱桃园内,一颗颗又红又大的玛瑙红樱桃已经挂满了枝头,全面进入采摘期。今年是十里荷廊种植樱桃的第7个年头,园区种植又偷了,韩国盯上满汉全席近日,韩国旅游发展官方微博称来到韩国,怎么能不尝下,韩国宫廷满汉全席一事,引发网友群嘲。网友调侃称你猜为什么叫满汉全席?韩国有满汉吗?最终,韩国旅游发展官方删除了该博并对评论区开启四川东北游绵阳之梓潼县平武县1七曲山大庙在梓潼县城东北10公里,绵阳北50公里,道教全真派圣地,国家文物保护单位。由文昌宫和关帝庙组成,占地1。2万平方米,建筑面积6000平方米。门票60元,观光车20元,1
你知道全国哪个地市的名字最好听吗?全国哪里的地名最好听?开头先提俩高铁站,1定西北来自甘肃的定西,2镇江南还有出身江苏的镇江,两个高铁站在气势这一块拿捏的死死,威武霸气又好听。好听的地名还有很多,首先说一下安徽,大追忆革命先烈体验传统文化北京市属公园清明文化活动来啦人间四月,气清景明。清明节是追思忆先的日子,也是亲近自然踏青赏春的时节。清明假期即将到来,北京市属公园及中国园林博物馆将以忆满京城情思华夏为主题,推出红色清明云赏清明多样清明19项清明奥林匹克森林公园花卉展,踏青人山人海,赏花正当时我们相约出去踏青吧,清明时节,春光明媚,正赶上奥林匹克公园花卉观赏季春华展览,润物细无声,人山人海,好不热闹。打牌,打羽毛球,放风筝,捕鱼,游湖,划船,野餐,拍照,赏花,踢毽子,玩四环附近也能看花海,三个公园门对门,一天轻松完成2万步北京四环到六环之间的郊野公园,景美人少离家近,瓜哥给您打前站。走得多了,瓜哥发现这些郊野公园都有一个特点,就是很多是连片挨着的,所以咱们就一片一片地说。今天咱们说的这个郊野公园叫旺一杯咖啡的惬意生活,马克西姆马赛半自动咖啡机入手分享咖啡机进入我家,进入我们的生活已经有些年头了。从最早不记得型号的小德龙泵压式,到18年初海淘入手一直用到现在的德龙ESAM4200。S,不知不觉间,早餐的一杯咖啡已经成了全家的习惯临翔时光FM第92期五老山瀑布导读听众朋友,大家好!很高兴我们又相聚在这里,听一个临翔故事,分享一份快乐心情,共渡一段美好时光这里是由临翔区融媒体中心推出的临翔时光FM,感谢您继续收听我们的节目,我是杨斌,今天大美中国候鸟北归丨黑嘴鸥的亲子时光辽宁盘锦的辽河口自然保护区是全球最大的黑嘴鸥繁殖地,目前这里黑嘴鸥繁殖种群数量达到了一万多只。一只黑嘴鸥的孵化期大概是24至26天,雌雄黑嘴鸥轮流负责孵化,每隔半小时换岗一次,小黑马甸公园喧嚣城市中的世外桃源公园四周高楼耸立,园内有碧波荡漾的水面,绿荫下有运动设施。老人在林中散步青年在球场内运动儿童在游乐设施旁玩耍这就是马甸公园的日常。在北三环马甸桥西北角,作为一处以运动为主题的休闲公为你写诗徐云骑行西藏色林湖夜帐狼影之孤胆英雄其实狼不可怕清晨领着狗子在小区里溜达,低头看见一根树枝,马上用脚掂量一下,心下一个念头升起,够做一顿饭了!自从追看阿云行走西藏以来,斧头,打火镁棒,柴火炉,还有帐篷,都让我心心念念清明踏青文案ampampquot人间四月芳菲始,又是一年清明时ampampquot这是清明,这是春天,这是踏青的好时节!清明不一定要谈死亡,清新明丽,郊游踏青,也是旋律。清明时,风雨多,一口美味,一口春,出门踏春前,先吃顿饱饭。我在春天等你,思念随风化作雨。清风俄罗斯娜娜被查出AI换脸!200万粉账号遭抖音封锁一名自称是俄罗斯娜娜的抖音帐号迅速走红,短短时间内吸引了200万名粉丝关注,不过1日晚间,这个帐号却突然遭到抖音官方封锁,原因是滥用平台道具仿冒虚假人物不当获取流量及粉丝的违规现象