返回顶部
首页 > 资讯 > 精选 >SpringBoot怎么集成EasyExcel应用
  • 224
分享到

SpringBoot怎么集成EasyExcel应用

2023-06-08 07:06:10 224人浏览 薄情痞子
摘要

这篇文章主要讲解了“SpringBoot怎么集成Easyexcel应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot怎么集成EasyExcel应用”吧!1、介绍特点:Ja

这篇文章主要讲解了“SpringBoot怎么集成Easyexcel应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot怎么集成EasyExcel应用”吧!

1、介绍

特点:

Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是 非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或 者JVM频繁的full GC
2、EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减 少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一 行行读取数据,逐个解析。
3、EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理 (AnalysisEventListener)。

2、应用场景

数据导入:减轻录入工作量
2、数据导出:统计信息归档
3、数据传输:异构系统之间数据传输

3、要实现的效果

sql

CREATE TABLE `edu_subject` (  `id` char(19) NOT NULL COMMENT "课程类别ID",  `title` varchar(10) NOT NULL COMMENT "类别名称",  `parent_id` char(19) NOT NULL DEFAULT "0" COMMENT "父ID",  `sort` int unsigned NOT NULL DEFAULT "0" COMMENT "排序字段",  `gmt_create` datetime NOT NULL COMMENT "创建时间",  `gmt_modified` datetime NOT NULL COMMENT "更新时间",  PRIMARY KEY (`id`),  KEY `idx_parent_id` (`parent_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=COMPACT COMMENT="课程科目";

SpringBoot怎么集成EasyExcel应用

转成->

SpringBoot怎么集成EasyExcel应用

3、使用

3.1、pom依赖导入

温馨提示:以下版本不能更换,换了可能会不行

<dependency>            <groupId>com.alibaba</groupId>            <artifactId>easyexcel</artifactId>            <version>2.1.1</version>        </dependency><!--xls-->        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.17</version>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi-ooxml</artifactId>            <version>3.17</version>        </dependency>

3.2、controller

package com.zhz.serviceedu.controller;import com.zhz.common.utils.R;import com.zhz.serviceedu.service.EduSubjectService;import io.swagger.annotations.api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.WEB.bind.annotation.CrossOrigin;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;@RestController@RequestMapping("/eduservice/subject")@CrossOrigin@Api(tags = "课程科目")public class EduSubjectController {    @Autowired    private EduSubjectService eduSubjectService;        @PostMapping("/addSubject")    @ApiOperation(value = "添加课程分类,获取上传过来的文件,把文件内容读取出来")    public R addSubject(MultipartFile file){        //上传过来的excel文件        eduSubjectService.saveSubject(file,eduSubjectService);        return R.ok();    }}

3.3、interface

package com.zhz.serviceedu.service;import com.zhz.serviceedu.entity.EduSubject;import com.baomidou.mybatisplus.extension.service.IService;import org.springframework.web.multipart.MultipartFile;public interface EduSubjectService extends IService<EduSubject> {        void saveSubject(MultipartFile file, EduSubjectService eduSubjectService);}

3.4、impl

package com.zhz.serviceedu.service.impl;import com.alibaba.excel.EasyExcel;import com.zhz.serviceedu.entity.EduSubject;import com.zhz.serviceedu.entity.excel.SubjectData;import com.zhz.serviceedu.listener.SubjectExcelListener;import com.zhz.serviceedu.mapper.EduSubjectMapper;import com.zhz.serviceedu.service.EduSubjectService;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;@Servicepublic class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {        @Override    public void saveSubject(MultipartFile file, EduSubjectService eduSubjectService) {        try {            //文件输入流            InputStream in = file.getInputStream();            //调用方法进行读取            EasyExcel.read(in, SubjectData.class,new SubjectExcelListener(eduSubjectService)).sheet().doRead();        }catch (Exception e){            e.printStackTrace();        }    }}

3.5、listener

package com.zhz.serviceedu.listener;import com.alibaba.excel.context.AnalysisContext;import com.alibaba.excel.event.AnalysisEventListener;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.zhz.servicebase.execptionhandler.GuliException;import com.zhz.serviceedu.entity.EduSubject;import com.zhz.serviceedu.entity.excel.SubjectData;import com.zhz.serviceedu.service.EduSubjectService;import lombok.extern.slf4j.Slf4j;import org.springframework.util.StringUtils;@Slf4jpublic class SubjectExcelListener extends AnalysisEventListener<SubjectData> {        public EduSubjectService eduSubjectService;    public SubjectExcelListener() {    }    public SubjectExcelListener(EduSubjectService eduSubjectService) {        this.eduSubjectService = eduSubjectService;    }        @Override    public void invoke(SubjectData subjectData, AnalysisContext analysisContext) {        log.info("进入方法调用");        if (StringUtils.isEmpty(subjectData)){            throw new GuliException(20001,"文件数据为空");        }        //一行一行去读取excel内容,每次读取有两个值,第一个值为一级分类,第二个值为二级分类        //判断一级分类是否重复        EduSubject existOneSubject = this.existOneSubject(eduSubjectService, subjectData.getOneSubjectName());        if (StringUtils.isEmpty(existOneSubject)){            existOneSubject=new EduSubject();            existOneSubject.setParentId("0");            //一级分类名称            existOneSubject.setTitle(subjectData.getOneSubjectName());            eduSubjectService.save(existOneSubject);        }        //获取一级分类的pid值        String pid=existOneSubject.getId();        //添加二级分类        // 判断二级分类是否重复        EduSubject existTwoSubject = this.existTwoSubject(eduSubjectService, subjectData.getTwoSubjectName(), pid);        if (StringUtils.isEmpty(existTwoSubject)){            existTwoSubject=new EduSubject();            existTwoSubject.setParentId(pid);            //二级分类名称            existTwoSubject.setTitle(subjectData.getTwoSubjectName());            eduSubjectService.save(existTwoSubject);        }    }        @Override    public void doAfterAllAnalysed(AnalysisContext analysisContext) {    }        private EduSubject existOneSubject(EduSubjectService eduSubjectService,String name){        QueryWrapper<EduSubject> wrapper=new QueryWrapper<>();        wrapper.eq("title",name);        wrapper.eq("parent_id","0");        EduSubject subject = eduSubjectService.getOne(wrapper);        return subject;    }        private EduSubject existTwoSubject(EduSubjectService eduSubjectService,String name,String pid){        QueryWrapper<EduSubject> wrapper=new QueryWrapper<>();        wrapper.eq("title",name);        wrapper.eq("parent_id",pid);        EduSubject eduSubject = eduSubjectService.getOne(wrapper);        return eduSubject;    }}

3.6、小细节,实体类pojo

因为mybatisplus生成的实体类的主键生成策略是IdType.ID_WORKER,所以需要修改成IdType.ID_WORKER_STR,否则会有转换问题

package com.zhz.serviceedu.entity;import com.baomidou.mybatisplus.annotation.FieldFill;import com.baomidou.mybatisplus.annotation.IdType;import java.util.Date;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import java.io.Serializable;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.Data;import lombok.EqualsAndHashCode;import lombok.experimental.Accessors;@Data@EqualsAndHashCode(callSuper = false)@Accessors(chain = true)@ApiModel(value="EduSubject对象", description="课程科目")public class EduSubject implements Serializable {    private static final long serialVersionUID = 1L;    @ApiModelProperty(value = "课程类别ID")    @TableId(value = "id", type = IdType.ID_WORKER_STR)    private String id;    @ApiModelProperty(value = "类别名称")    private String title;    @ApiModelProperty(value = "父ID")    private String parentId;    @ApiModelProperty(value = "排序字段")    private Integer sort;    @ApiModelProperty(value = "创建时间")    @TableField(fill = FieldFill.INSERT)    private Date gmtCreate;    @ApiModelProperty(value = "更新时间")    @TableField(fill = FieldFill.INSERT_UPDATE)    private Date gmtModified;}

感谢各位的阅读,以上就是“SpringBoot怎么集成EasyExcel应用”的内容了,经过本文的学习后,相信大家对SpringBoot怎么集成EasyExcel应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: SpringBoot怎么集成EasyExcel应用

本文链接: https://lsjlt.com/news/252550.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot怎么集成EasyExcel应用
    这篇文章主要讲解了“SpringBoot怎么集成EasyExcel应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么集成EasyExcel应用”吧!1、介绍特点:Ja...
    99+
    2023-06-08
  • SpringBoot集成EasyExcel的应用场景分析
    1、介绍 官网地址:https://www.yuque.com/easyexcel 特点: 1、Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他...
    99+
    2024-04-02
  • SpringBoot集成EasyExcel的步骤
    目录一 、EasyExcel简介二、常用注解 三、依赖四、监听五、接口导入Excel六、接口 导出Excel (HttpServletResponse response, HttpS...
    99+
    2024-04-02
  • SpringBoot怎么整合EasyExcel
    这篇文章主要介绍“SpringBoot怎么整合EasyExcel”,在日常操作中,相信很多人在SpringBoot怎么整合EasyExcel问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoot怎...
    99+
    2023-06-21
  • 怎么使用springBoot集成redis
    这篇文章将为大家详细讲解有关怎么使用springBoot集成redis,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。REmote DIctionary Server(Re...
    99+
    2024-04-02
  • springboot集成postgresql使用怎么实现
    要在Spring Boot应用程序中集成PostgreSQL数据库,可以按照以下步骤进行: 1、添加PostgreSQL依赖在Spr...
    99+
    2024-04-18
    postgresql springboot
  • Springboot集成ClickHouse及应用场景分析
    ClickHouse应用场景: 1.绝大多数请求都是用于读访问的2.数据需要以大批次(大于1000行)进行更新,而不是单行更新;或者根本没有更新操作3.数据只是添加到数据库,没有必要...
    99+
    2024-04-02
  • SpringBoot怎样集成redis
    这篇文章给大家分享的是有关SpringBoot怎样集成redis的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。定义REmote DIctionary Server(Redis) ...
    99+
    2024-04-02
  • Nginx怎么与Redis集成应用
    Nginx和Redis可以通过一些插件和模块来实现集成应用。以下是一种常见的方式: 使用nginx-http-redis模块:这...
    99+
    2024-05-06
    Nginx Redis
  • SpringBoot怎么集成Druid连接MySQL8.0.11
    这篇“SpringBoot怎么集成Druid连接MySQL8.0.11”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spri...
    99+
    2023-06-08
  • SpringBoot项目里怎么集成Hibernate
    本篇内容介绍了“SpringBoot项目里怎么集成Hibernate”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Spring Boot项...
    99+
    2023-07-05
  • SpringBoot中怎么集成Swagger文档
    在SpringBoot中集成Swagger文档,可以通过以下步骤: 添加Swagger依赖: 在项目的pom.xml文件中添加Sw...
    99+
    2024-03-07
    SpringBoot
  • 怎么使用Spring integration在Springboot中集成Mqtt
    今天小编给大家分享一下怎么使用Spring integration在Springboot中集成Mqtt的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有...
    99+
    2023-07-05
  • 使用SpringBoot怎么对Spring AOP进行集成
    今天就跟大家聊聊有关使用SpringBoot怎么对Spring AOP进行集成,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。需要的jar包添加到工程里。新增Maven依赖如下:<...
    99+
    2023-05-31
    springboot spring aop
  • SpringBoot集成Redis使用Lettuce
            Redis是最常用的KV数据库,Spring 通过模板方式(RedisTemplate)提供了对Redis的数据查询和操作功能。本文主要介绍基于RedisTemplate + lettuce方式对Redis进行查询和操作...
    99+
    2023-09-05
    redis spring boot java
  • EasyExcel怎么引用
    今天小编给大家分享一下EasyExcel怎么引用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前提导出数据到Excel是非常...
    99+
    2023-06-27
  • 详解SpringBoot集成消息队列的案例应用
    目录背景方案规划统一设计集成Redis消息队列集成ActiveMQ消息队列使用示例背景 最近在对公司开发框架进行优化,框架内涉及到多处入库的日志记录,例如登录日志/操作日志/访问日志...
    99+
    2024-04-02
  • SpringBoot集成如何使用Redis
    小编给大家分享一下SpringBoot集成如何使用Redis,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SpringBoot集成使用redisJedis 是 Redis 官方推出的一款面向 Java 的客户端,提供了很多...
    99+
    2023-06-29
  • SpringBoot集成JWT怎么实现token验证
    本篇内容主要讲解“SpringBoot集成JWT怎么实现token验证”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot集成JWT怎么实现token验证”吧!JWT可以理解为一个...
    99+
    2023-06-22
  • SpringBoot怎么集成P6Spy实现SQL日志
    本篇内容介绍了“SpringBoot怎么集成P6Spy实现SQL日志”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!P6Spy简介P6Spy是...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作