SpringBoot 통합 Easy Excel 의 응용 장면 분석
12654 단어 SpringBootEasyExcel
홈 페이지 주소: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 작은 디 테 일,실체 류 pojomy 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 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.