easyExcel实现导入数据库

目录标题

  • 需求
  • easyExcel Maven 依赖
  • 过程
  • 效果

需求

我们需要将excel的数据导入至数据库中。

easyExcel Maven 依赖

	<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>

过程

在这里插入图片描述

对应entity

package com.zlf.edu.entity.excel;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;/*** Created with IntelliJ IDEA.** @Auther: zlf* @Date: 2021/03/25/17:12* @Description:*/
@Data
public class SubjectData {@ExcelProperty(index = 0) //第一列private String oneSubjectName;@ExcelProperty(index = 1) // 第二列private String twoSubjectName;
}

由于读取excel需要实现监听器,并且该监听器不能被spring容器管理,所以我们spring的注解不能在里面用,所以我们需要将service层的接口传入该监听器,实现将excel的内容存储至数据库中。

package com.zlf.edu.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zlf.edu.entity.Subject;
import com.zlf.edu.entity.excel.SubjectData;
import com.zlf.edu.service.SubjectService;
import com.zlf.servicebase.exceptionHandler.GlobalException;import java.util.ArrayList;
import java.util.List;/*** Created with IntelliJ IDEA.** @Auther: zlf* @Date: 2021/03/25/17:19* @Description:*/
public class SubjectExcelListener extends AnalysisEventListener<SubjectData> {// 由于 SubjectExcelListener 不能交给Spring管理 所以我们只能手动传入 subjectServicepublic SubjectService subjectService;public SubjectExcelListener(){}public SubjectExcelListener(SubjectService subjectService) {this.subjectService = subjectService;}// 读取excel数据,一行一行读取的数据@Overridepublic void invoke(SubjectData subjectData, AnalysisContext analysisContext) {if(subjectData == null){throw  new GlobalException(20001,"文件数据为空");}// 一行一行读取,每次读取有两个值,第一个是一级分类,第二个是二级分类Subject existOneSubject = this.existOneSubject(subjectService, subjectData.getOneSubjectName());if(existOneSubject == null){//表示没有相同的一级分类existOneSubject  = new Subject();existOneSubject.setParentId("0");existOneSubject.setTitle(subjectData.getOneSubjectName()); //设置一级分类名称subjectService.save(existOneSubject);}String parentId = existOneSubject.getId();Subject existTwoSubject = this.existTwoSubject(subjectService, subjectData.getTwoSubjectName(), parentId);if(existTwoSubject == null){//表示没有相同的二级分类existTwoSubject  = new Subject();existTwoSubject.setParentId(parentId);existTwoSubject.setTitle(subjectData.getTwoSubjectName()); //设置二级分类名称subjectService.save(existTwoSubject);}}// 判断一级分类不能重复添加private Subject existOneSubject(SubjectService subjectService,String name){QueryWrapper<Subject> queryWrapper = new QueryWrapper<>();queryWrapper.eq("title",name);queryWrapper.eq("parent_id","0");Subject oneSubject = subjectService.getOne(queryWrapper);return oneSubject;}// 判断二级分类不能重复添加private Subject existTwoSubject(SubjectService subjectService,String name,String pid){QueryWrapper<Subject> queryWrapper = new QueryWrapper<>();queryWrapper.eq("title",name);queryWrapper.eq("parent_id",pid);Subject twoSubject = subjectService.getOne(queryWrapper);return twoSubject;}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}

controller 层接口

/*** <p>* 课程科目 前端控制器* </p>** @author zlf* @since 2021-03-25*/
@RestController
@RequestMapping("/edu/subject")
@CrossOrigin
@Api(description = "课程管理")
public class SubjectController {@AutowiredSubjectService subjectService;/*** @Description: 通过上传excel,添加课程分类* @Param: [file]* @return: com.zlf.commonutils.Response.R* @Author: zlf* @Date: 2021/3/25*/@PostMapping("addSubject")public R addSubject(@ApiParam(name = "file",value = "上传excel") MultipartFile file){subjectService.saveSubject(file,subjectService);return R.ok();}}

课程分类实体类

/*** <p>* 课程科目* </p>** @author zlf* @since 2021-03-25*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("edu_subject")
@ApiModel(value="Subject对象", description="课程科目")
public class Subject 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;}

service 层

package com.zlf.edu.service.impl;import com.alibaba.excel.EasyExcel;
import com.zlf.edu.entity.Subject;
import com.zlf.edu.entity.excel.SubjectData;
import com.zlf.edu.listener.SubjectExcelListener;
import com.zlf.edu.mapper.SubjectMapper;
import com.zlf.edu.service.SubjectService;
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 zlf* @since 2021-03-25*/
@Service
public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> implements SubjectService {@Overridepublic void saveSubject(MultipartFile file ,SubjectService subjectService) {try{// 文件输入流InputStream inputStream = file.getInputStream();EasyExcel.read(inputStream, SubjectData.class,new SubjectExcelListener(subjectService)).sheet().doRead();}catch (Exception e){e.printStackTrace();}}
}

效果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7 shell脚本安装jdk

1&#xff0c;系统环境 操作系统 CentOS Linux release 7.6.1810 (Core) 64位 下载 Java SE Development Kit 8u152&#xff0c;文件名&#xff1a;jdk-8u152-linux-x64.rpm&#xff0c;下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/ja…

如何解决在使用ElementUI时发现有些控件是英文的

如下图 解决 我们需要在入口文件 main.js 中将 ElementUI 的默认语言改为中文。 import locale from element-ui/lib/locale/lang/en // lang i18n 英文 import zhLocale from element-ui/lib/locale/lang/zh-CN // 中文// 选择elementUi 默认语言为中文 Vue.use(ElementUI, …

CentOS7 源码编译安装Python3 shell脚本

1&#xff0c;系统环境 操作系统 CentOS Linux release 7.6.1810 (Core) 64位 2&#xff0c;Linux的Python3安装后即集成了pip&#xff0c;无需重新独立安装pip&#xff0c;执行以下命令完成python3和pip3的安装 yum groupinstall -y "Development tools" # 安…

ElementUI+Java实现搜索提示列表

效果 实现流程 首先我们需要在后端获取数据&#xff0c;我们可以根据name属性去模糊查询&#xff0c;返回Map类型的列表 然后将它返回给前端。 controller ApiOperation("根据关键字查询讲师名列表")GetMapping("list/name/{key}")public ResultVo sele…

CentOS7 搭建Pulsar 消息队列环境,CentOS(Linux)部署Pulsar,亲测成功,以及Python操作Pulsar实例驱动

在 最佳开源数据库与数据分析平台奖 中&#xff0c;之前曾连续两年入选的 Kafka 意外滑铁卢落选&#xff0c;取而代之的是新兴项目 Pulsar&#xff0c;Bossie Awards中对 Pulsar 点评如下&#xff1a;“Pulsar 旨在取代 Apache Kafka 多年的主宰地位。Pulsar在很多情况下提供了…

SpringSecurity +Jwt 实现权限管理

目录标题原理架构图demo的项目结构JwtTokenUtilRestAuthenticationEntryPoint 和 RestfulAccessDeniedHandlerMyUserDetailsServiceJwtAuthenticationTokenFilterSecurityConfigControllerPostman 测试为了方便&#xff0c;未采用是从数据库读取的方式。工具类都是别人那偷的&a…

FreeMarker_模板引擎_代码自动生成器_源码下载

首先我们先来认识一下Freemarker 1.what is the FreeMarker? 你可以到freemarker的官网上去&#xff0c;那里有很详细的介绍&#xff1a;http://freemarker.org/ 这里大概说一下&#xff1a;FreeMarker是一个用Java语言编写的模板引擎&#xff0c;它基于模板来生成文本输出。 …

CentOS7 搭建Kafka消息队列环境,以及Python3操作Kafka Demo

Kafka适合什么样的场景? 它可以用于两大类别的应用: 构造实时流数据管道&#xff0c;它可以在系统或应用之间可靠地获取数据。 (相当于message queue)构建实时流式应用程序&#xff0c;对这些流数据进行转换或者影响。 (就是流处理&#xff0c;通过kafka stream topic和topi…

hive序列生成_常见的序列化框架及Protobuf原理

享学课堂作者&#xff1a;逐梦々少年转载请声明出处&#xff01;上次我们详细的学习了Java中的序列化机制&#xff0c;但是我们日常开发过程中&#xff0c;因为java的序列化机制的压缩效率问题&#xff0c;以及序列化大小带来的传输的效率问题&#xff0c;一般很少会使用原生的…

decode语句不能再嵌套_自学C++基础教程【流程控制语句】(for、while 、do while 语句 )...

for语句for语句是C语言所提供的一种功能广泛的循环语句。下图为for语句的标准形式&#xff1a;表达式1&#xff1a;通常用于给循环变量赋初值&#xff0c;一般是赋值表达式。表达式2&#xff1a;通常用于设立循环条件&#xff0c;一般为关系表达式或逻辑表达式。表达式3&#x…

CentOS 7 利用Docker搭建禅道系统

1&#xff0c;系统环境 a&#xff0c;操作系统 CentOS Linux release 7.6.1810 (Core) 64位 b&#xff0c;确保Docker环境已经安装&#xff0c;具体教程请看 CentOS 安装docker 禅道系统一键安装说明文档&#xff1a;http://www.zentao.net/book/zentaopmshelp/90.html …

centos7 docker删除端口映射_centos7安装docker,结合docker安装mysql,学习简单使用

需要快速安装centos7的可以结合上一遍文章vagrant结合virtualbox让你直接在cmd窗口操作linux系统centos7地址&#xff1a;https://www.toutiao.com/i6858180977164812811/?group_id6858180977164812811Docker先说一下个人理解&#xff1a;docker其实就是一个工具&#xff0c;镜…

MongoDB中关于64位整型存储解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 社区内一哥们smcboy 提出关于php中操作MongoDB存储整数问题&#xff0c;找到点资料花点时间翻译过来&#xff0c;是个很好的学习方式。红薯 那篇讨论我的修改回复&#xff0c;仍然没有更新可恶啊~&#xff01;&#…

切割图形_泉州泡沫景观字切割机厂家

泉州泡沫景观字切割机厂家 jz4rw0qv泉州泡沫景观字切割机厂家 巨源线条切割机同步带型结构合理、性能、精密度高、、操作简便、价格合理&#xff0c;比同行业同款机床更高&#xff0c;是原有同步带型泡沫切割机的替代产品。自动编程使用计算机利用配合切割机应用&#xff0c;只…

你的搜索其实很糟糕?

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2013-3-27 来源&#xff1a;GBin1.com 尽管你非常擅长搜索&#xff0c;但是很多时候搜索内容和你想要的并不吻合。事实上&#xff0c;用户体验专家Jakob Nielsen认为大多数人都非常的不擅长搜索。…

Element Tree型控件

效果 前端 <template><div class"app-container"><el-inputplaceholder"输入关键字进行过滤"、<! -- 双向绑定-- >v-model"filterText"></el-input><el-tree ref"tree":data"subjectList"…

快速根据注释生成接口文档网页工具——Apidoc的使用教程

环境&#xff1a; 操作系统 CentOS Linux release 7.6.1810 (Core) 64位 服务器环境 “腾讯云”服务器 1&#xff0c;安装Node.js的npm工具环境&#xff1a; 如有不懂&#xff0c;请看我的博客&#xff1a;CentOS7 源码编译安装NodeJS 最新版本 2&#xff0c;npm环境搭…

频段表_5G频段范围之:频段3.3GHz-4.2GHz (n77,n78)

本文版权归“5G通信(tongxin5g)”和5G哥所有&#xff0c;未经授权&#xff0c;请勿转载比起以前的移动通信网络&#xff0c;5G探索的新频谱范围包括&#xff1a;3.3GHz-4.2GHz&#xff0c;4.4GHz-5.0GHz&#xff0c;24.25-29.5 GHz今天主要看频段3.3GHz-4.2GHz在3GPP中&#xf…

公开说说别人看不到_当听到别人在说自己坏话时,心里是什么感受?

人有优点也有缺点这世界上&#xff0c;没有人的性格可以做到十全十美。没有任何一个人从头到尾都是完美无缺的。一个人自从慢慢的长大后&#xff0c;在不断的社交活动中&#xff0c;就会慢慢的观察别人身上的优点或者缺点了。很奇怪&#xff0c;人的这种能力和本领好像是不需要…

CentOS 7 利用Docker搭建Showdoc文档管理系统

1&#xff0c;系统环境 a&#xff0c;操作系统 CentOS Linux release 7.6.1810 (Core) 64位 b&#xff0c;确保Docker环境已经安装&#xff0c;具体教程请看 CentOS 安装docker Docker部署Showdoc官方教程&#xff1a;https://www.showdoc.cc/help?page_id65610 2&…