在线教育平台,easyexcel使用案例

控制器

因为如何想要在读数据的时候操作数据库,就必须使用构造方法传dao 或者service,因为这个不归spring管理,不能自动注入,所以参数里需要传递service 或者 dao

java 复制代码
    @Autowired
    IEduSubjectService subjectService;
    添加课程分类的方法 (文件本身不用保存到服务器,只是要将文件中的内容解析出来保存到数据库)
    @RequestMapping("/addSubject")
    public R addSubject(@RequestPart MultipartFile file)  {
        subjectService.saveSubject(file,subjectService);
        return R.ok();
    }

service层

java 复制代码
public interface IEduSubjectService extends IService<EduSubject> {
    //添加课程分类的方法 (文件本身不用保存到服务器,只是要将文件中的内容解析出来保存到数据库)
    void saveSubject(MultipartFile file, IEduSubjectService subjectService);
    //查询所有课程分类信息
    List<OneSubject> findAllSubject();
}

impl

核心代码在监听器,控制器传递的service或者dao 就在这里传递给监听器,让监听器在里面通过构造方法进行调用

java 复制代码
    public void saveSubject(MultipartFile file, IEduSubjectService subjectService){
        try {
            //取得文件的输入流对象
            InputStream inputStream = file.getInputStream();
            //解析文件中的内容,解析之后要将内容赋值给Customer类对对象
            // 第一个参数:输入流对象
            // 第二个参数:文件中的内容要解析指定的实体类对象
            // 第三个参数:是一个监听器ImportCustomerListener
            EasyExcel.read(inputStream, SubjectData.class, new SubjectExcelListener(subjectService)).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

监听器

核心逻辑就在监听器中,继承 的监听器的泛型是 读取的Excel文件对应的实体类,每读一行都会触发invoke

java 复制代码
public class SubjectExcelListener extends AnalysisEventListener<SubjectData> {
    private IEduSubjectService subjectService;
    //使用构造方法初始化 subjectService
    public SubjectExcelListener() {
    }
    public SubjectExcelListener(IEduSubjectService subjectService) {
        this.subjectService = subjectService;
    }

    //将文件中的内容一行一行的读取--->将读取到的数据每次都存入SubjectData对象中
    @Override
    public void invoke(SubjectData subjectData, AnalysisContext analysisContext) {
        //将解析出来的数据添加到数据库
        if (subjectData == null){
            throw new GlobalErrorException(20001,"文件数据为空");
        }
        //判断一级分类在数据库中是否存在
        EduSubject OneSubject = this.existOneSubject(subjectData.getOneSubjectName());
        if (OneSubject == null){
            //没有则添加一级分类
            OneSubject = new EduSubject();
            OneSubject.setTitle(subjectData.getOneSubjectName());
            OneSubject.setParentId("0");
            subjectService.save(OneSubject);
//            //获取添加一级分类后的id
//            String pid = eduSubject.getId();
//            //判断二级分类在数据库中是否存在
//            EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(), pid);
        }
        // 处理二级标题
        //获取添加一级分类后的id
            String pid = OneSubject.getId();
        //添加二级分类
        //判断二级分类是否已经存在了
        EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(), pid);
        if (existTwoSubject == null){
            EduSubject twoSubject = new EduSubject();
            twoSubject.setTitle(subjectData.getTwoSubjectName());
            twoSubject.setParentId(pid);
            subjectService.save(twoSubject);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }
    /**
     * 判断二级分类是否存在
     * @param twoSubjectName
     * @return
     */
    private EduSubject existTwoSubject(String twoSubjectName, String oneSubjectId) {
        QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
        wrapper.eq("title",twoSubjectName);
        wrapper.eq("parent_id",oneSubjectId);
        return  subjectService.getOne(wrapper);
    }
    /**
     * 判断一级分类是否存在
     * @param oneSubjectName
     * @return
     */
    private EduSubject existOneSubject(String oneSubjectName) {
        QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
        wrapper.eq("title",oneSubjectName);
        wrapper.eq("parent_id",0);
        return  subjectService.getOne(wrapper);
    }
}
相关推荐
_阿伟_3 分钟前
SpringMVC
java·spring
代码在改了10 分钟前
springboot厨房达人美食分享平台(源码+文档+调试+答疑)
java·spring boot
冷静 包容22 分钟前
C语言学习之 没有重复项数字的全排列
c语言·开发语言·学习
碳苯28 分钟前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
wclass-zhengge39 分钟前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌40 分钟前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.40 分钟前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
学习使我变快乐42 分钟前
C++:静态成员
开发语言·c++
TJKFYY43 分钟前
Java.数据结构.HashSet
java·开发语言·数据结构
kylinxjd44 分钟前
spring boot发送邮件
java·spring boot·后端·发送email邮件