シンプルアップロードExcelファイルやデータベースにデータを追加

1. POMファイルの導入(エラー防止が各ジャーパッケージの同じバージョンのまま)

    < 依存性>   
        < のgroupId > org.apache.poi </ のgroupId >   
        < たartifactId > POI-OOXML </ たartifactId >   
        < バージョン> 3.17 </ バージョン>   
    </ 依存>   
    < 依存性>   
        < のgroupId > org.apache.poi </ groupId >   
        < たartifactId > POI-OOXML-スキーマ</ たartifactId >   
        < バージョン>3.17 </バージョン>   
    </ 依存>   
    < 依存性>   
        < のgroupId > org.apache.poi </ のgroupId >   
        < たartifactId > POI </ たartifactId >   
        < バージョン> 3.17 </ バージョン>   
    </ 依存> 

2.ファイルのインポートツール

パッケージcom.yami.shop.admin.config。

輸入org.apache.poi.hssf.usermodel.HSSFWorkbook;
輸入 org.apache.poi.ss.usermodel *。;
輸入org.apache.poi.xssf.usermodel.XSSFWorkbook;
輸入java.io.InputStreamを。
輸入はjava.util.ArrayList;
輸入java.util.HashMapを;
輸入はjava.util.List;
輸入java.util.Map;
パブリック クラスImportExcel {
     // abc.xls 
    パブリック 静的 ブールisXls(文字列fileNameに){
         // (?I)忽略大小写
        場合(fileName.matches( "^。+ \\。(?I)(XLS)$")){
             戻り trueに; 
        } 他の IF(fileName.matches(。 "^ \\ +(I。?)(XLSX)$" )){
             リターン falseに; 
        } {
             スロー 新しい新しいのAのRuntimeException( "間違ったフォーマット" ); 
        } 
    } 
    パブリック 静的リスト<地図<文字列オブジェクト>> readExcel(文字列のファイル名、InputStream InputStreamは)がスロー例外{
         ブール RET = isXls(ファイル名); 
        ブックブック = NULL ;
         // サフィックスに応じて異なるオブジェクトを作成する
        場合(RET){ 
            ブック = 新しいHSSFWorkbook(のinputStream)。
        } { 
            ブック = 新しいXSSFWorkbook(のinputStream)。
        } 
        シートシート = workbook.getSheetAt(0 )。
        // 得到标题行 
        行titleRow = sheet.getRow(0 )。
        INT lastRowNum = sheet.getLastRowNum()。
        INT lastCellNum = titleRow.getLastCellNum()。
        一覧 <地図<文字列、オブジェクト>>一覧= 新しい ArrayListを<> ();
        以下のためのint型私は1を=。I <= lastRowNum。I ++ ){ 
            マップの<string、オブジェクト>マップ= 新しい HashMapの<> (); 
            行の行は = sheet.getRow(i)を、
            INT J = 0; J <lastCellNum; J ++ ){
                 // 得到列名 
                文字列キー= titleRow.getCell(J).getStringCellValue(); 
                電池セルは = row.getCell(j)を、
                cell.setCellType(CellType.STRING)。

                map.put(キー、cell.getStringCellValue()); 
            } 
            list.add(マップ)
        }
        )(workbook.close。
        戻り値のリスト。
    } 
}

3.controller制御層

パッケージcom.yami.shop.admin.controller。

輸入com.fasterxml.jackson.core.type.TypeReference。
輸入com.fasterxml.jackson.databind.ObjectMapper;
輸入com.yami.shop.admin.config.ImportExcel;
輸入com.yami.shop.bean.model.TzJobSet;
輸入com.yami.shop.common.bean.Result;
輸入com.yami.shop.service.ITzJobSetService。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.transaction.annotation.Transactional;
輸入org.springframework.web.bind.annotation.PostMapping。
輸入org.springframework.web.bind.annotation.RequestMapping。
輸入org.springframework.web.bind.annotation.RequestParam;
輸入org.springframework.web.bind.annotation.RestController。
輸入org.springframework.web.multipart.MultipartFile; 

輸入java.io.InputStreamを。
輸入はjava.util.List;
輸入java.util.Map; 

@RestController 
@RequestMapping( "/管理者/スタッフ" のパブリック クラスTestExcel { 

    @Autowired 
    プライベートITzJobSetService tzJobSetService。

    (@PostMapping "/インポート" 
    @Transactional 
    公共{ブールimportExcel(@RequestParam MultipartFile MFILE) 
        結果結果 = 新しいです結果は、();
         試み{ 
            文字列fileNameに = mFile.getOriginalFilenameは();
             // 入力ストリームファイルがアップロード取得 
            InputStream InputStreamは= mFile.getInputStreamは();
             // ツールメソッド呼び出しを、Excelファイルからデータを読み込みます 
            リスト<地図<文字列、オブジェクト>> sourceListの= ImportExcel.readExcel(ファイル名を値、INPUTSTREAM); 

            // オブジェクトのJSON形式の文字列最初に、次にリスト<TzJobSet>オブジェクトTzJobSetに変換:表対応するエンティティクラス 
            ObjectMapper objMapper = 新しい新しいObjectMapper(); 
            文字列に関する情報 = objMapper.writeValueAsString(sourceListの); 

            //JSON文字列の転送は、オブジェクト 
            リスト<TzJobSet>一覧= objMapper.readValue(に関する情報、新しい新しい typereference <リスト<TzJobSet >> (){}); 

            // saveBatchアドインバルクでバッチ添加方法MyBatisの-ピオフレームプロジェクトmybatis-ありますピウスが来る
            ブール B = tzJobSetService.saveBatch(一覧);
             リターンB; 
        } キャッチ(例外E){
             // TODO自動生成されたブロックキャッチ
            e.printStackTrace(); 
        } 
        リターン falseに; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/livedian/p/11803381.html