最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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.業(yè)務層實現類

@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數據庫,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

相關文章

  • 淺談Spring注入模型

    淺談Spring注入模型

    如果不深入到Spring的源碼,是很少有機會了解到Spring的注入模型(AutowireMode)。但是為了掃清我們學習Spring源碼的障礙,我們有必要了解下Spring的注入模型,感興趣的同學可以閱讀一下
    2023-04-04
  • Java如何實現http接口參數和返回值加密

    Java如何實現http接口參數和返回值加密

    這篇文章主要介紹了Java如何實現http接口參數和返回值加密問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java設計模式之java觀察者模式詳解

    Java設計模式之java觀察者模式詳解

    這篇文章主要介紹了Java經典設計模式之觀察者模式,簡單分析了觀察者模式的概念、原理并結合實例形式給出了java觀察者模式的具體用法與相關注意事項,需要的朋友可以參考下
    2021-09-09
  • Java面向對象之final關鍵字詳細解讀

    Java面向對象之final關鍵字詳細解讀

    這篇文章主要介紹了Java面向對象之final關鍵字詳細解讀,final修飾的屬性又叫常量,一般用 XX_XX_XX來命名,final修飾的屬性在定義時必須賦初始值,并且以后不能再修改,需要的朋友可以參考下
    2024-01-01
  • Java分布式session存儲解決方案圖解

    Java分布式session存儲解決方案圖解

    這篇文章主要介紹了Java分布式session存儲解決方案圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • elasticsearch bucket 之rare terms聚合使用詳解

    elasticsearch bucket 之rare terms聚合使用詳解

    這篇文章主要為大家介紹了elasticsearch bucket 之rare terms聚合使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • spring cloud gateway中如何讀取請求參數

    spring cloud gateway中如何讀取請求參數

    這篇文章主要介紹了spring cloud gateway中如何讀取請求參數的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中ThreadLocal共享變量的使用

    Java中ThreadLocal共享變量的使用

    java.lang.ThreadLocal該類提供了線程局部變量,用于在當前線程中共享數據,本文主要介紹了Java中ThreadLocal共享變量的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot各種事務操作實戰(zhàn)(自動回滾、手動回滾、部分回滾)

    SpringBoot各種事務操作實戰(zhàn)(自動回滾、手動回滾、部分回滾)

    本文主要介紹了SpringBoot各種事務操作實戰(zhàn),包含自動回滾、手動回滾、部分回滾這三種,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • 解決RestTemplate反序列化嵌套對象的問題

    解決RestTemplate反序列化嵌套對象的問題

    這篇文章主要介紹了解決RestTemplate反序列化嵌套對象的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

察哈| 靖州| 鲁甸县| 平果县| 台江县| 思茅市| 偏关县| 昌图县| 喀什市| 德阳市| 随州市| 大庆市| 腾冲县| 淮南市| 马山县| 衡水市| 遂川县| 福海县| 宜昌市| 阿拉善左旗| 个旧市| 新蔡县| 丰台区| 收藏| 泰宁县| 澳门| 金秀| 广灵县| 马山县| 广饶县| 曲麻莱县| 荥阳市| 周至县| 武山县| 湖北省| 思茅市| 浏阳市| 永寿县| 平昌县| 西昌市| 乌苏市|