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

 更新时间:2018年04月26日 12:00:24   作者:Hello小扬子  
这篇文章主要介绍了Springboot上传excel并将表格数据导入或更新mySql数据库的过程 ,本文以Controller开始,从导入过程开始讲述,其中包括字典表的转换,需要的朋友可以参考下

本文主要描述,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数据库,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java Spring整合Freemarker的详细步骤

    java Spring整合Freemarker的详细步骤

    本文对Spring整合Freemarker步骤做了详细的说明,按步骤操作一定可以整合通过,这里提供给大家做参考
    2013-11-11
  • Java使用Freemarker页面静态化生成的实现

    Java使用Freemarker页面静态化生成的实现

    这篇文章主要介绍了Java使用Freemarker页面静态化生成的实现,页面静态化是将原来的动态网页改为通过静态化技术生成的静态网页,FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输,更多相关内容需要的小伙伴可以参考一下
    2022-06-06
  • SpringBoot集成echarts实现k线图功能

    SpringBoot集成echarts实现k线图功能

    ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表,本文给大家介绍了SpringBoot集成echarts实现k线图功能,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-07-07
  • java虚拟机

    java虚拟机

    2008-01-01
  • 如何使用MyBatis框架实现增删改查(CRUD)操作

    如何使用MyBatis框架实现增删改查(CRUD)操作

    本文主要介绍了如何使用MyBatis框架实现增删改查(CRUD)操作。首先介绍了MyBatis框架的基本概念和使用方法,然后分别介绍了如何使用MyBatis实现增删改查操作。最后,通过一个简单的示例演示了如何使用MyBatis框架实现CRUD操作。
    2023-05-05
  • Java 中导入excel时使用 trim() 无法去除空格的问题解决方案

    Java 中导入excel时使用 trim() 无法去除空格的问题解决方案

    这篇文章主要介绍了Java中导入excel时使用trim()无法去除空格的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Activiti开发环境的搭建过程详解

    Activiti开发环境的搭建过程详解

    这篇文章主要介绍了Activiti开发环境的搭建过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • WMTS中TileMatrix与ScaleDenominator浅析

    WMTS中TileMatrix与ScaleDenominator浅析

    这篇文章主要为大家介绍了WMTS中TileMatrix与ScaleDenominator浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Spring Boot实现文件上传下载

    Spring Boot实现文件上传下载

    这篇文章主要为大家详细介绍了Spring Boot实现文件上传下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java中自定义LRU缓存详解

    Java中自定义LRU缓存详解

    这篇文章主要介绍了Java中自定义LRU缓存详解,基于LRU算法的缓存系统,可以在达到缓存容量上限时,清理最近最少使用的数据,为新的数据的插入腾出空间,需要的朋友可以参考下
    2023-09-09

最新评论