当前位置: 首页 > 编程笔记 >

Springboot上传excel并将表格数据导入或更新mySql数据库的过程

冯亮
2023-03-14
本文向大家介绍Springboot上传excel并将表格数据导入或更新mySql数据库的过程,包括了Springboot上传excel并将表格数据导入或更新mySql数据库的过程的使用技巧和注意事项,需要的朋友参考一下

本文主要描述,Springboot-mybatis框架下上传excel,并将之导入mysql数据库的过程,如果用户id已存在,则进行更新修改数据库中该项信息,由于用到的是前后端分离技术,这里记录的主要是后端java部分,通过与前端接口进行对接实现功能,使用layui等前端框架与之对接,也可以自己写前端代码,本文以Controller开始,从导入过程开始讲述,其中包括字典表的转换

1.在pom.xml文件中导入注解,主要利用POI

<dependency> 
  <groupId>org.apache.poi</groupId> 
  <artifactId>poi-ooxml</artifactId> 
  <version>3.9</version> 
</dependency> 
<dependency> 
  <groupId>commons-fileupload</groupId> 
  <artifactId>commons-fileupload</artifactId> 
  <version>1.3.1</version> 
</dependency> 
<dependency> 
  <groupId>commons-io</groupId> 
  <artifactId>commons-io</artifactId> 
  <version>2.4</version> 
</dependency> 

2.Controller接口

@PostMapping("/save") 
public String addUser(@RequestParam("file") MultipartFile file) { 
 String fileName = file.getOriginalFilename(); 
 try { 
  return sysService.batchImport(fileName, file); 
 } catch (MyException e) { 
  e.printStackTrace(); 
  return e.getMessage(); 
 }catch(Exception e){ 
  e.printStackTrace(); 
  return "文件异常,导入失败"; 
   
 } 
} 

3.服务层接口

boolean import(String fileName, MultipartFile file) throws Exception; 

4.业务层实现类

@Transactional(readOnly = false,rollbackFor = Exception.class) 
@Override 
public boolean import(String fileName, MultipartFile file) throws Exception { 
 Map<String, Integer> departmentMap = findDepartment(); 
 Map<String, Integer> roleMap = findRole(); 
 boolean notNull = false; 
  List<User> userList = new ArrayList<User>(); 
 if (!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) { 
   throw new MyException("上传文件格式不正确"); 
 } 
 boolean isExcel2003 = true; 
 if (fileName.matches("^.+\\.(?i)(xlsx)$")) { 
  isExcel2003 = false; 
 } 
 InputStream is = file.getInputStream(); 
  Workbook wb = null; 
  if (isExcel2003) { 
   wb = new HSSFWorkbook(is); 
  } else { 
   wb = new XSSFWorkbook(is); 
  } 
  Sheet sheet = wb.getSheetAt(0); 
  if(sheet!=null){ 
   notNull = true; 
  } 
 User user; 
 for (int r = 1; r <= sheet.getLastRowNum(); r++) { 
  Row row = sheet.getRow(r); 
  if (row == null){ 
   continue; 
  } 
  user = new User(); 
  if( row.getCell(0).getCellType() !=1){ 
   throw new MyException("导入失败(第"+(r+1)+"行,ID单元格格式请设为文本格式)"); 
  } 
  String id = row.getCell(0).getStringCellValue(); 
  if(id==null || id.isEmpty()){ 
    throw new MyException("导入失败(第"+(r+1)+"行,ID未填写)"); 
  } 
  String name = row.getCell(1).getStringCellValue(); 
  if(name==null || name.isEmpty()){ 
    throw new MyException("导入失败(第"+(r+1)+"行,姓名未填写)"); 
  } 
  String department = row.getCell(2).getStringCellValue(); 
  if(departmentMap.get(department)==null){ 
    throw new MyException("导入失败(第"+(r+1)+"行,不存在此单位或单位未填写)"); 
  } 
  String role = row.getCell(3).getStringCellValue(); 
  if(roleMap.get(role)==null){ 
   throw new MyException("导入失败(第"+(r+1)+"行,不存在此角色或角色未填写)"); 
  } 
  Date date; 
  if(row.getCell(4).getCellType() !=0){ 
   throw new MyException("导入失败(第"+(r+1)+"行,入职日期格式不正确或未填写)"); 
   }else{ 
     date = row.getCell(4).getDateCellValue(); 
   } 
   user.setId(id); 
   user.setName(name); 
   user.setDepartmentId((int) departmentMap.get(department)); 
   user.setRoleId((int) roleMap.get(role)); 
   user.setDate(date); 
   userList.add(user); 
  } 
 for (User user : userList) { 
  String id = user.getId(); 
  int cnt = userMapper.selectById(id); 
  if (cnt == 0) { 
   userMapper.addUser(user); 
  } else { 
   userMapper.updateUserById(user); 
  } 
 } 
 return notNull; 
} 

总结

以上所述是小编给大家介绍的Springboot上传excel并将表格数据导入或更新mySql数据库,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 问题内容: 我有一个xlsx格式的下表,我想将其导入到我的sql数据库中: 该表非常复杂,我只需要‘1)HEADING’之后的记录 我一直在寻找要导入sql的php库,但它们似乎仅用于简单的excel文件。 问题答案: 您有两种方法可以实现: 第一种方法: 1)将其导出为某种文本格式。最简单的可能是制表符分隔的版本,但是CSV也可以使用。 2)使用负载数据功能。参见http://dev.mysql

  • 问题内容: 我有一个电子表格,实际上只有一个复杂的表格。我基本上将电子表格转换为cvs,并使用常规脚本生成INSERT脚本。 但是,我无法使用包含28个字段的表来执行此操作,该表包含电子表格中某些字段中的数据,这使得导入CVS更加复杂。因此,新CVS中的字段无法正确区分,或者我的脚本没有对此进行说明。 有人对更好的方法有任何建议吗?谢谢。 问题答案: 看一下LOAD DATA INFILE语句。这

  • 我正在尝试将mysql数据库导入新版本的xampp(v7.1.8)。按下导入按钮后,我收到数百条此错误消息: 请注意.\vendor\phpmyadmin\sql parser\src\UtfString.php#128未初始化字符串偏移量:516 回溯 .\vendor\phpmyadmin\sql parser\src\Lexer.php\823:phpmyadmin\SqlParser\Ut

  • 本文向大家介绍php上传excel表格并获取数据,包括了php上传excel表格并获取数据的使用技巧和注意事项,需要的朋友参考一下 这个是最近需要做的一个功能,在网上也查看了很多相关的文章,基本上大同小异,在这里整理一下。 一:首先是html部分 二:就是去接收和处理上传的文件了。php部分 下面开始获取你上传的excel数据了 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定

  • 问题内容: 谁能解释一下如何将Microsoft Excel文件导入到MySQL数据库中? 例如,我的Excel表如下所示: 问题答案: 将其导出为某种文本格式。最简单的可能是制表符分隔的版本,但是CSV也可以使用。 使用加载数据功能。见http://dev.mysql.com/doc/refman/5.1/en/load-data.html 查看页面的一半,因为它将为制表符分隔的数据提供一个很好

  • 尝试将数据库备份(.sql)从docker容器MySQL:5.6导入到我的本地MySQL(MariaDB)中。 下面是我使用的命令: 也想试试mysqlimport,但我总是遇到同样的错误。 第1行错误1064(42000):您的SQL语法中有错误;查看与您的MariaDB服务器版本相对应的手册,以了解在第1行“MySQL Ver 14.14 Distrib 5.6.33,for Linux(x8