当前位置: 代码网 > it编程>编程语言>Java > springboot接收excel数据文件去重方式

springboot接收excel数据文件去重方式

2024年12月13日 Java 我要评论
springboot接收excel数据文件去重1.创建测试表set names utf8mb4;set foreign_key_checks = 0;-- ----------------------

springboot接收excel数据文件去重

1.创建测试表

set names utf8mb4;
set foreign_key_checks = 0;

-- ----------------------------
-- table structure for student
-- ----------------------------
drop table if exists `student`;
create table `student`  (
  `id` int(11) not null comment '学号',
  `name` varchar(64) character set utf8 collate utf8_general_ci not null comment '姓名',
  `year` int(11) not null comment '年份',
  `level` tinytext character set utf8 collate utf8_general_ci not null comment '等级',
  primary key (`id`, `name`, `year`) using btree
) engine = innodb character set = utf8 collate = utf8_general_ci row_format = dynamic;

set foreign_key_checks = 1;

2.生产测试文档

3.springboot接收文件并入库

接收到上传的模板文件后,首先读取首行进行字段名称判断,然后一行行的读取excel表格中的数据,生成entity对象。

如果入库的数组大小超过1000,那就入库一次,然后入库使用的类似oracle的merge into语句的on duplicate key update

注意事项:

  1. 因为测试样例数据量小,上传文件大小限制在springboot中没有设置
  2. 生成的excel字段学号和年份单元格格式应该设置为数值
    @autowired
    private operatedao operatedao;

    @postmapping(value = "/add/tax")
    public string inserttaxdata(@requestparam("file") multipartfile file) {
        try {
            string filename = file.getoriginalfilename();
            system.out.println(filename);
            inputstream tps = (file.getinputstream());
            final xssfworkbook tpworkbook = new xssfworkbook(tps);

            sheet sheet = tpworkbook.getsheetat(0);
            row headerrow = sheet.getrow(0);
            if (headerrow.getcell(0).getstringcellvalue().equals("学号")
                    && headerrow.getcell(1).getstringcellvalue().equals("姓名")
                    && headerrow.getcell(2).getstringcellvalue().equals("年份")
                    && headerrow.getcell(3).getstringcellvalue().equals("等级")
            ) {
                int i = 1;
                boolean flag = true;
                list<studententity> entitylist = new arraylist<>();
                studententity studententity;
                while (flag) {
                    row row = sheet.getrow(i++);
                    if (row != null) {
                        studententity = new studententity();
                        cell id = row.getcell(0);
                        cell name = row.getcell(1);
                        cell year = row.getcell(2);
                        cell level = row.getcell(3);
                        studententity.setid((int) id.getnumericcellvalue());
                        studententity.setname(name.getstringcellvalue());
                        studententity.setyear((int) year.getnumericcellvalue());
                        studententity.setlevel( level.getstringcellvalue());
                        entitylist.add(studententity);
                    } else {
                        flag = false;
                    }
                    if (entitylist.size() > 1000) {
                        int rs = operatedao.addorupdatebatchtax(entitylist);
                        system.out.println(rs);
                        entitylist.clear();
                    }
                }
                if (entitylist.size() > 0) {
                    operatedao.addorupdatebatchtax(entitylist);
                }
                tps.close();
            } else {
                return "检查模板是否正确";
            }
        } catch (ioexception e) {
            e.printstacktrace();
            return e.getmessage();
        }
        return "success";
    }
@mapper
public interface operatedao {
    integer addorupdatebatchtax(list<studententity> list);
}
<?xml version="1.0" encoding="utf-8"?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.test.springboot.dao.operatedao">
    <insert id="addorupdatebatchtax" parametertype="java.util.list">
        insert into `student`(`id`, `name`, `year`, `level`)
        values
        <foreach collection="list" item="tax" index="index" separator=",">
            (#{tax.id},#{tax.name},#{tax.year},#{tax.level})
        </foreach>
        on duplicate key update
        level =values ( `level` )
    </insert>

</mapper>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

  • 基于Maven pom文件使用分析

    基于Maven pom文件使用分析

    projectmaven 是一个强大的构建和依赖管理工具,pom.xml 文件是 maven 项目的核心配置文件,用于定义项目的构建、依赖关系、插件、目标等。它... [阅读全文]
  • Java8 CompletableFuture异步编程解读

    Java8 CompletableFuture异步编程解读

    completablefuturede介绍java 8 引入了 completablefuture 类,这是 java 异步编程的一个重要进展。completa... [阅读全文]
  • java集合超详细(最新推荐)

    1 - 概述所有的集合类和集合接口都在java.util包下。在内存中申请一块空间用来存储数据,在java中集合就是替换掉定长的数组的一种引用数据类型。2 - 集合与数组的区别长度…

    2024年12月14日 编程语言
  • Mybatis中SQL的执行过程详解

    Mybatis中SQL的执行过程详解

    mybatis 框架sql执行过程数据库操作映射方式mybatis支持两种方式进行数据库操作映射:映射文件:通过xml文件来定义sql语句和映射关系注解方式:通... [阅读全文]
  • IDEA性能优化方法解决卡顿问题

    IDEA性能优化方法解决卡顿问题

    前言我们在使用 intellij idea的时候有时候会觉得卡顿,那么如何在不升级电脑配置的情况下让 intellij idea的性能更好呢?我们可以通过去修改... [阅读全文]
  • java 抽象类示例详解

    一、抽象类概述:我们知道,类用来模拟现实事物。一个类可以模拟一类事物,而某个类的一个实例化对象可以模拟某个属于该类的具体的事物。类中描绘了该类所有对象共同的特性,当一个类中给出的信…

    2024年12月14日 编程语言

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com