导入坐标

<!-- easyexcel依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>

service层

//添加课程分类
@Override
public void saveSubject(MultipartFile file, EduSubjectService subjectService) { try {
InputStream in = file.getInputStream();
EasyExcel.read(in, SubjectData.class, new SubjectListener(subjectService)).sheet().doRead();
} catch (Exception e) {
e.printStackTrace();
}
}

监听器里面要注意:

//因为SubjectListener不能交给Spring管理,需要自己new,不能注入其他对象
//不能实现数据库的操作,利用有参构造传过来

public class SubjectListener extends AnalysisEventListener<SubjectData> {

    //因为SubjectListener不能交给Spring管理,需要自己new,不能注入其他对象
//不能实现数据库的操作,利用有参构造传过来 public EduSubjectService subjectService; public SubjectListener() {
} public SubjectListener(EduSubjectService subjectService) {
this.subjectService = subjectService;
} //读取excel内容,一行一行的读取
@Override
public void invoke(SubjectData subjectData, AnalysisContext analysisContext) { if (subjectData == null){
throw new GuliException(20001,"文件数据为空");
}
EduSubject existOneSubject = this.existOneSubject(subjectData.getOneSubjectName(), subjectService); if (existOneSubject==null){//表里没有相同的一级分类,进行添加
EduSubject subject = new EduSubject();
subject.setParentId("0");
subject.setTitle(subjectData.getOneSubjectName());//一级分类名称
subjectService.save(subject);
} //获取一级分类的id值
String pid=existOneSubject.getId();
//添加二级分类
//判断二级分类是否重复 EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(), subjectService, pid); if (existTwoSubject == null) {
EduSubject subject = new EduSubject();
subject.setParentId(pid);
subject.setTitle(subjectData.getTwoSubjectName());//二级分类名称
subjectService.save(subject);
}
} //判断一级分类不能重复添加
private EduSubject existOneSubject(String name,EduSubjectService subjectService){
QueryWrapper<EduSubject> wrapper=new QueryWrapper<>();
wrapper.eq("title",name);
wrapper.eq("parent_id","0");
EduSubject oneSubject = subjectService.getOne(wrapper);
return oneSubject; } //判断二级分类不能重复添加
private EduSubject existTwoSubject(String name,EduSubjectService subjectService,String pid){
QueryWrapper<EduSubject> wrapper=new QueryWrapper<>();
wrapper.eq("title",name);
wrapper.eq("parent_id",pid);
EduSubject twoSubject = subjectService.getOne(wrapper);
return twoSubject; }
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) { }
}

SubjectListener

控制层的

subjectService是注入进来的,若用mybatis也需将dao层注入
   public R addSubject(MultipartFile file){
//上传过来的excel文件
subjectService.saveSubject(file,subjectService);
return R.ok();
}

做easyexcel遇到的问题数据库采用的mybatis-plus的更多相关文章

  1. 接口开发-集成数据库操作(mybatis)

    关于数据存储,最常用的方式就是存到数据库,此篇以MySQL数据库为例,以mybatis框架完成数据库的操作. 一.添加对应依赖 <!-- 数据库:MySQL --> <depende ...

  2. 数据库采用多表连接查询,对应javaBean文件连接方式

    在一个Web项目中,只要是存在数据库就一定会有JavaBean文件.一个JavaBean文件会对应一张数据库中的表,供dao中的代码来调用用来存取数据.我们都知道,在数据库设计的时候,如果A.B两张表 ...

  3. spring webservice 开发demo (实现基本的CRUD 数据库采用H2)

    在实现过程中,遇到两个问题: 1: schema 写错: 错误: http://myschool.com/schemas/st 正确: http://myschool.com/st/schemas   ...

  4. 通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)

    在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create tab ...

  5. Oracle数据库采用数据泵方式导入导出数据

    特别说明:Oralce的数据泵导入导出技术只能用在数据库服务器上,在只有客户端的机器上是无法使用数据泵技术的. 1.创建备份文件目录  mkdir d:\dmp 2.在Oralce中注册该目录,将目录 ...

  6. oracle 隔离级别、事务怎么开始的以及如何查看数据库采用字符集

    把一下语句全部粘贴至控制台运行后可以查看oracle 隔离级别 declare trans_id ); begin trans_id := dbms_transaction.local_transac ...

  7. golang web实战之三(基于iris框架的 web小应用,数据库采用 sqlite3 )

    一.效果:一个图片应用 1.可上传图片到uploads目录. 2.可浏览和评论图片(用富文本编辑器输入) 二.梳理一下相关知识: 1.iris框架(模板输出,session) 2.富文本编辑器.sql ...

  8. SpringBoot入门 (六) 数据库访问之Mybatis

    本文记录学习在SpringBoot中使用Mybatis. 一 什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 ...

  9. springBoot数据库jpa+对接mybatis

    1  spring Data jpa hibernate引领数据访问技术,使用orm对象关系映射来进行数据库访问,通过模型和数据库进行映射,通过操作对象实现对数据库操作,把数据库相关操作从代码中独立出 ...

  10. 物流管理系统(数据库+后台+springMVC+Mybatis+layui)

    数据库:mysql create database WBG_logistics; use WBG_logistics; #1管理员表 create table admin( a_id int prim ...

随机推荐

  1. SATA学习笔记——Link Layer 加扰/解扰/CRC

    一.故事前传 我们之前说到Link layer的结构,link layer的作用大致可以包括以下几点: Frame flow control CRC的生成与检测 对数据与控制字符的Scrmable/D ...

  2. 【分布式】load balance 02-consistent hash algorithm 一致性哈希算法原理详解

    负载均衡系列专题 01-负载均衡基础知识 02-一致性 hash 原理 03-一致性哈希算法 java 实现 04-负载均衡算法 java 实现 概念 一致哈希是一种特殊的哈希算法. 在使用一致哈希算 ...

  3. USB至串口TTL转接设备及Console线

    USB转串口常见芯片方案 FT232, FTDI(英国) 公认稳定可靠, 传输速率3Mbps, 功能最强, 单芯片内置SPI,TWI,JTAG,GPIO等功能. FT232BM为较早型号, FT232 ...

  4. 使用CNN实现MNIST数据集分类

    1 MNIST数据集和CNN网络配置 关于MNIST数据集的说明及配置见使用TensorFlow实现MNIST数据集分类 CNN网络参数配置如下: 原始数据:输入为[28,28],输出为[1,10] ...

  5. ElasticSearch入门安装与SpringBoot集成实战

    介绍 Elasticsearch 是一个实时分布式搜索和分析引擎,一般用于全文搜索.结构化搜索,分析或者三者混用. 它的底层是基于Apache Lucene(TM)的开源搜索引擎,但是lucene只是 ...

  6. 易语言连接Mysql

    最近在写游戏的辅助工具研究了下易语言,下面就说下如何连接Mysql. .版本 2 .支持库 mysql .支持库 spec Mysql句柄 = 连接MySql ("127.0.0.1&quo ...

  7. python 创建动态类

    一般情况下多数是预先定义类 而少数特殊情况就需要去动态创建类了,直接贴代码. class BaseModel(Model): class Meta: database = _tb class_new ...

  8. mybatis处理集合、数组参数使用in查询

    对于mybatis的参数类型是集合数组的时候进行查询. 第一种:参数list ,使用mybatis的标签 1 SELECT * FROM TABLE_NAME AS a WHERE 2 3 a.id ...

  9. 【LeetCode回溯算法#03】电话号码的字母组合(数字映射字母)

    电话号码的字母组合 力扣题目链接(opens new window) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任 ...

  10. Centos系统下,各种服务重启

    1.sudo systemctl start firewalld 2../redis-server  /usr/local/bin/redis.conf 3.mongod -f /etc/mongod ...