做easyexcel遇到的问题数据库采用的mybatis-plus
导入坐标
<!-- 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的更多相关文章
- 接口开发-集成数据库操作(mybatis)
关于数据存储,最常用的方式就是存到数据库,此篇以MySQL数据库为例,以mybatis框架完成数据库的操作. 一.添加对应依赖 <!-- 数据库:MySQL --> <depende ...
- 数据库采用多表连接查询,对应javaBean文件连接方式
在一个Web项目中,只要是存在数据库就一定会有JavaBean文件.一个JavaBean文件会对应一张数据库中的表,供dao中的代码来调用用来存取数据.我们都知道,在数据库设计的时候,如果A.B两张表 ...
- spring webservice 开发demo (实现基本的CRUD 数据库采用H2)
在实现过程中,遇到两个问题: 1: schema 写错: 错误: http://myschool.com/schemas/st 正确: http://myschool.com/st/schemas ...
- 通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)
在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create tab ...
- Oracle数据库采用数据泵方式导入导出数据
特别说明:Oralce的数据泵导入导出技术只能用在数据库服务器上,在只有客户端的机器上是无法使用数据泵技术的. 1.创建备份文件目录 mkdir d:\dmp 2.在Oralce中注册该目录,将目录 ...
- oracle 隔离级别、事务怎么开始的以及如何查看数据库采用字符集
把一下语句全部粘贴至控制台运行后可以查看oracle 隔离级别 declare trans_id ); begin trans_id := dbms_transaction.local_transac ...
- golang web实战之三(基于iris框架的 web小应用,数据库采用 sqlite3 )
一.效果:一个图片应用 1.可上传图片到uploads目录. 2.可浏览和评论图片(用富文本编辑器输入) 二.梳理一下相关知识: 1.iris框架(模板输出,session) 2.富文本编辑器.sql ...
- SpringBoot入门 (六) 数据库访问之Mybatis
本文记录学习在SpringBoot中使用Mybatis. 一 什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 ...
- springBoot数据库jpa+对接mybatis
1 spring Data jpa hibernate引领数据访问技术,使用orm对象关系映射来进行数据库访问,通过模型和数据库进行映射,通过操作对象实现对数据库操作,把数据库相关操作从代码中独立出 ...
- 物流管理系统(数据库+后台+springMVC+Mybatis+layui)
数据库:mysql create database WBG_logistics; use WBG_logistics; #1管理员表 create table admin( a_id int prim ...
随机推荐
- 【Unity3D】顶点和片元着色器
1 前言 上文介绍了渲染管线.固定管线着色器和表面着色器,如下: 渲染管线 固定管线着色器一 固定管线着色器二 表面着色器 固定管线着色器通过命令方式实现光照和贴图等效果,表面着色器通过给 S ...
- Swoole从入门到入土(14)——HTTP服务器[协程风格]
在这之间,我们讨论了异步风格HTTP服务器,它继承自异步风格的TCP服务器,有着异步风格的所有优点,同时如果碰到了大量的IO等待也会存在阻塞的缺点. 而协程风格的HTTP则很好处理了IO等待的问题.这 ...
- Nginx开启gzip提升访问效率
说明 最近网站考虑开启gzip压缩试试效果,gzip是nginx服务器的ngx_http_gzip_module模块提供的在线实时数据压缩功能. 通过开启gzip功能,可对服务器响应的数据进行压缩处理 ...
- OCP试题解析之053-16 MEMORY_TARGET
16.Setting which of the following initialization parameters enables Automatic Memory Management? A. ...
- win32 - wsprintfW的使用
文档:将格式化的数据写入指定的缓冲区.根据格式字符串中相应的格式说明,将转换任何参数并将其复制到输出缓冲区.该函数在其写入的字符后附加一个终止空字符,但返回值的字符计数中不包含终止空字符. 例子: # ...
- Redis服务端事件处理流程分析
一.事件处理 1.1 什么是事件 Redis 为什么运行得比较快? 原因之一就是它的服务端处理程序用了事件驱动的处理方式. 那什么叫事件处理?就是把处理程序当成一个一个的事件处理.比如我前面文章:服务 ...
- 格式化占位符%r和!r
# 作用 都是格式化原形输出,!r用于format格式化,%r用于%格式化 # 示例 a = '123' b = 'hello, {!r}'.format(a) b = 'hello, %r' % ( ...
- 【Azure Key Vault】使用Azure CLI获取Key Vault 机密遇见问题后使用curl命令来获取机密内容
问题描述 在使用Azure Key Vault的过程中,遇见无法获取机密信息,在不方便直接写代码的情况下,快速使用Azure CLI指令来验证当前使用的认证是否可以获取到正确的机密值. 使用CLI的指 ...
- 【Azure Developer】使用 Microsoft Graph API查看用户状态和登录记录
问题描述 通过Microsoft Graph的API如何来查看用户信息和登录记录呢? 问题解答 第一步:需要一个授权Token 比如一个拥有查看用户权限的Azure账号,通过Azure CLI 命令获 ...
- 答应我,在vue中不要滥用watch好吗?
前言 上周五晚上8点,开开心心的等着产品验收完毕后就可以顺利上线.结果产品突然找到我说要加需求,并且维护这一块业务的同事已经下班走了,所以只有我来做.虽然内心一万头草泥马在狂奔,但是嘴里还是一口答应没 ...