springboot接收excel數(shù)據(jù)文件去重方式
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):
- 因?yàn)闇y(cè)試樣例數(shù)據(jù)量小,上傳文件大小限制在springboot中沒(méi)有設(shè)置
- 生成的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è)參考,也希望大家多多支持腳本之家。
- SpringBoot種如何使用?EasyExcel?實(shí)現(xiàn)自定義表頭導(dǎo)出并實(shí)現(xiàn)數(shù)據(jù)格式化轉(zhuǎn)換
- SpringBoot整合EasyExcel實(shí)現(xiàn)大規(guī)模數(shù)據(jù)的并行導(dǎo)出與壓縮下載
- springboot導(dǎo)出excel多個(gè)sheet導(dǎo)出的實(shí)現(xiàn)
- SpringBoot中使用EasyExcel并行導(dǎo)出多個(gè)excel文件并壓縮zip后下載的代碼詳解
- Springboot使用POI進(jìn)行excel文件的導(dǎo)出與下載方式
相關(guān)文章
Java實(shí)現(xiàn)添加條形碼到PDF表格的方法詳解
條碼的應(yīng)用已深入生活和工作的方方面面。本文以操作PDF文件為例,介紹如何利用Java語(yǔ)言在編輯表格時(shí),向單元格中添加條形碼,感興趣的可以學(xué)習(xí)一下2022-06-062020最新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-09Spring 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-11Java實(shí)現(xiàn)二維碼功能的實(shí)例代碼
今天這篇文章,主要是利用Java實(shí)現(xiàn)二維碼功能,本文思路清晰,需要的朋友參考下2017-02-02springboot如何讀取配置文件到靜態(tài)工具類(lèi)
這篇文章主要介紹了springboot實(shí)現(xiàn)讀取配置文件到靜態(tài)工具類(lèi)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12Mybatis使用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