欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot接收excel數(shù)據(jù)文件去重方式

 更新時(shí)間:2024年12月12日 14:55:59   作者:jzx-sdjz  
文章主要介紹了如何在Spring?Boot中實(shí)現(xiàn)文件上傳并入庫(kù)的功能,包括讀取Excel文件、生成Entity對(duì)象、使用MergeInto語(yǔ)句進(jìn)行數(shù)據(jù)庫(kù)操作以及注意事項(xiàng)

springboot接收excel數(shù)據(jù)文件去重

1.創(chuàng)建測(cè)試表

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 '學(xué)號(hào)',
  `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 '等級(jí)',
  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.生產(chǎn)測(cè)試文檔

3.springboot接收文件并入庫(kù)

接收到上傳的模板文件后,首先讀取首行進(jìn)行字段名稱(chēng)判斷,然后一行行的讀取excel表格中的數(shù)據(jù),生成entity對(duì)象。

如果入庫(kù)的數(shù)組大小超過(guò)1000,那就入庫(kù)一次,然后入庫(kù)使用的類(lèi)似oracle的merge into語(yǔ)句的ON DUPLICATE KEY UPDATE

注意事項(xiàng):

  1. 因?yàn)闇y(cè)試樣例數(shù)據(jù)量小,上傳文件大小限制在springboot中沒(méi)有設(shè)置
  2. 生成的excel字段學(xué)號(hào)和年份單元格格式應(yīng)該設(shè)置為數(shù)值
    @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("學(xué)號(hào)")
                    && headerRow.getCell(1).getStringCellValue().equals("姓名")
                    && headerRow.getCell(2).getStringCellValue().equals("年份")
                    && headerRow.getCell(3).getStringCellValue().equals("等級(jí)")
            ) {
                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>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Spring AOP之PointCut案例詳解

    Java Spring AOP之PointCut案例詳解

    這篇文章主要介紹了Java Spring AOP之PointCut案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java打包Jar包后使用腳本執(zhí)行

    Java打包Jar包后使用腳本執(zhí)行

    本文詳細(xì)講解了Java打包Jar包后使用腳本執(zhí)行的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Java實(shí)現(xiàn)添加條形碼到PDF表格的方法詳解

    Java實(shí)現(xiàn)添加條形碼到PDF表格的方法詳解

    條碼的應(yīng)用已深入生活和工作的方方面面。本文以操作PDF文件為例,介紹如何利用Java語(yǔ)言在編輯表格時(shí),向單元格中添加條形碼,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • 2020最新IDEA SpringBoot整合Dubbo的實(shí)現(xiàn)(zookeeper版)

    2020最新IDEA SpringBoot整合Dubbo的實(shí)現(xiàn)(zookeeper版)

    這篇文章主要介紹了2020最新IDEA SpringBoot整合Dubbo(zookeeper版),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 關(guān)于Spring中的三級(jí)緩存解析

    關(guān)于Spring中的三級(jí)緩存解析

    這篇文章主要介紹了關(guān)于Spring中的三級(jí)緩存,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring Data JPA自動(dòng)生成表時(shí)列順序混亂的最新解決辦法

    Spring Data JPA自動(dòng)生成表時(shí)列順序混亂的最新解決辦法

    文章主要介紹了Spring Boot 3.3.5版本中SpringDataJPA自動(dòng)生成表時(shí)列順序混亂的問(wèn)題,以及如何通過(guò)替換Hibernate實(shí)現(xiàn)來(lái)解決這個(gè)問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Java實(shí)現(xiàn)二維碼功能的實(shí)例代碼

    Java實(shí)現(xiàn)二維碼功能的實(shí)例代碼

    今天這篇文章,主要是利用Java實(shí)現(xiàn)二維碼功能,本文思路清晰,需要的朋友參考下
    2017-02-02
  • springboot如何讀取配置文件到靜態(tài)工具類(lèi)

    springboot如何讀取配置文件到靜態(tài)工具類(lèi)

    這篇文章主要介紹了springboot實(shí)現(xiàn)讀取配置文件到靜態(tài)工具類(lèi)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的示例代碼

    Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的示例代碼

    當(dāng)編寫(xiě) MyBatis 中復(fù)雜動(dòng)態(tài) SQL 語(yǔ)句時(shí),使用 XML 格式是一種非常靈活的方式,本文主要為大家詳細(xì)介紹了Mybatis使用XML實(shí)現(xiàn)動(dòng)態(tài)sql的具體方法,需要的可以參考下
    2023-12-12
  • Java中MapStruct使用方法解析

    Java中MapStruct使用方法解析

    這篇文章主要介紹了Java中MapStruct使用方法解析,接受請(qǐng)求參數(shù)都會(huì)使用一個(gè)vo類(lèi),這個(gè)vo類(lèi)里封裝了所有需要接受的參數(shù),然后對(duì)參數(shù)進(jìn)行業(yè)務(wù)邏輯處理,處理完后會(huì)持久化處理,?使用MapStruct可以快速幫你解決轉(zhuǎn)換工作,需要的朋友可以參考下
    2023-10-10

最新評(píng)論