SpringBoot 통합 Easy Excel 의 응용 장면 분석

12654 단어 SpringBootEasyExcel
1.소개
홈 페이지 주소:https://www.yuque.com/easyexcel
특징:
1.자바 영역 해석,엑셀 생 성 으로 유명한 프레임 워 크 는 Apache poi,jxl 등 이 있다.그러나 그들 모두 심각 한 문 제 는 메모리 소모 다.만약 당신 의 시스템 병발 량 이 많 지 않다 면 괜 찮 을 수 있 지만,일단 병발 되면 반드시 OOM 또는 JVM 이 빈번 한 full gc 가 될 것 입 니 다.
2.Easy Excel 은 알 리 바 바 가 오픈 한 엑셀 처리 프레임 워 크 로 사용 이 간단 하고 메모리 절약 으로 유명 합 니 다.Easy Excel 이 메모리 사용량 을 크게 줄 일 수 있 는 주요 원인 은 Excel 을 분석 할 때 파일 데 이 터 를 한꺼번에 메모리 에 불 러 오지 않 고 디스크 의 한 줄 에서 데 이 터 를 읽 고 하나씩 분석 하기 때문이다.
3.Easy Excel 은 한 줄 한 줄 의 분석 모델 을 사용 하고 한 줄 의 분석 결 과 를 관찰자 의 모델 로 알려 처리 합 니 다(AnalysisEventListener).
2.응용 장면
1.데이터 가 져 오기:입력 작업량 감소
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='    ';
在这里插入图片描述
전환->
在这里插入图片描述
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;

/**
 * <p>
 *           
 * </p>
 *
 * @author zhz
 * @since 2021-07-03
 */
@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;

/**
 * <p>
 *         
 * </p>
 *
 * @author zhz
 * @since 2021-07-03
 */
public interface EduSubjectService extends IService<EduSubject> {

    /**
     *       
     *
     * @author zhz
     * @date 2021/07/02 02:18
     * @param file     ,    excel  
     * @param eduSubjectService          
     */
    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;

/**
 * <p>
 *           
 * </p>
 *
 * @author zhz
 * @since 2021-07-03
 */
@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {

    /**
     *       
     *
     * @param file     ,    excel  
     * @param eduSubjectService
     * @author zhz
     * @date 2021/07/02 02:18
     */
    @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;

/**
 * @author zhouhengzhe
 * @Description: excel   
 * @date 2021/7/3  2:28
 */
@Slf4j
public class SubjectExcelListener extends AnalysisEventListener<SubjectData> {

    /**
     *        ,  subjectService       
     *   SubjectExcelListener    spring   ,      new,      
     *       public,          
     */
    public EduSubjectService eduSubjectService;
    public SubjectExcelListener() {
    }
    public SubjectExcelListener(EduSubjectService eduSubjectService) {
        this.eduSubjectService = eduSubjectService;
    }

    /**
     *   excel  ,        ,        
     * @param subjectData
     * @param analysisContext
     */
    @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) {

    }

    /**
     *           
     *       parent_id 0 ,       ,           
     * @param eduSubjectService
     * @param name
     * @return
     */
    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;
    }
    /**
     *           
     *
     * @param eduSubjectService
     * @param name
     * @param pid
     * @return
     */
    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
my batisplus 에서 생 성 된 실체 클래스 의 메 인 키 생 성 전략 은 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;

/**
 * <p>
 *     
 * </p>
 *
 * @author zhz
 * @since 2021-07-03
 */
@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;

}
3.7,나머지,swagger 통합,R 클래스 통합 반환,통합 로그 등,다른 블 로 그 를 보십시오
통일 로그:https://blog.csdn.net/zhouhengzhe/article/details/118078080
일괄 반환 값:https://blog.csdn.net/zhouhengzhe/article/details/118065066
통일 이상:https://blog.csdn.net/zhouhengzhe/article/details/118064739
swagger 통합:https://blog.csdn.net/zhouhengzhe/article/details/118063779
여기 서 SpringBoot 통합 Easy Excel 의 응용 장면 에 관 한 글 을 소개 합 니 다.더 많은 SpringBoot 통합 Easy Excel 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기