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

使用SpringBoot+EasyExcel+Vue實現(xiàn)excel表格的導(dǎo)入和導(dǎo)出詳解

 更新時間:2022年08月23日 10:30:44   作者:Spring是Java的春天  
這篇文章主要介紹了使用SpringBoot+VUE+EasyExcel?整合導(dǎo)入導(dǎo)出數(shù)據(jù)的過程詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、導(dǎo)入和導(dǎo)出

導(dǎo)入:通過解析excel表格中的數(shù)據(jù),然后將數(shù)據(jù)放到一個集合中,接著通過對持久層操作,將數(shù)據(jù)插入到數(shù)據(jù)庫中,再加載一下頁面,從而實現(xiàn)了數(shù)據(jù)的導(dǎo)入

導(dǎo)出:導(dǎo)出也是直接對數(shù)據(jù)庫進行操作,獲取數(shù)據(jù)庫中所有的數(shù)據(jù),將其存儲在一個集中,接著使用查詢出來的的數(shù)據(jù)生成一個excel表格

其中導(dǎo)入和導(dǎo)出的功能實現(xiàn)都是基于EasyExcel實現(xiàn)的

EasyExcel是阿里巴巴開源的一個基于Java的簡單、省內(nèi)存的讀寫Excel的開源項目

EasyExcel官方文檔:https://www.yuque.com/easyexcel/doc/easyexcel

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.0-beta2</version>
        </dependency>

二、導(dǎo)出數(shù)據(jù)為excel實現(xiàn)過程

    @GetMapping("/down")
    public Result down(HttpServletResponse response) throws IOException {
        List<User> userList = userMapper.selectList(null);
        System.out.println(userList);
        //返回輸出流_excel格式
        response.setContentType("application/octet-stream");
        String fileName = URLEncoder.encode("用戶信息表", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), User.class).autoCloseStream(Boolean.FALSE).sheet("用戶信息表").doWrite(userList);
        // ExcelUtil.writerExcel(response, userList);
        return Result.success();
    }
  1. 查詢數(shù)據(jù)庫的所有數(shù)據(jù)到一個集合useList中
  2. 設(shè)置輸出流
  3. 調(diào)用EasyExcel中的write方法就會返回一個excel表格
  4. 給實體類使用注解標注實體類每一個成員變量所對應(yīng)的表頭(value為表頭名稱,index為表頭位置)
package com.kang.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@TableName("user")
@NoArgsConstructor
@EqualsAndHashCode
public class User {
    /**
     * id自增
     */
    @TableId(type = IdType.AUTO)
    @ExcelProperty(value = "ID", index = 0)
    private Integer id;
    @ExcelProperty(value = "用戶名", index = 1)
    private String username;
    @ExcelProperty(value = "密碼", index = 2)
    private String password;
    /**
     * 數(shù)據(jù)庫中的nick_name會自動轉(zhuǎn)換為駝峰
     */
    @ExcelProperty(value = "昵稱", index = 3)
    private String nickName;
    @ExcelProperty(value = "年齡", index = 4)
    private Integer age;
    @ExcelProperty(value = "性別", index = 5)
    private String sex;
    @ExcelProperty(value = "住址", index = 6)
    private String address;
}

當瀏覽器訪問這個前端控制器的映射地址的時候,就會自動下載這樣的一個excel文件

因此,在前端只需要給按鈕添加一個點擊事件,當點擊這個按鈕的時候,就訪問前端控制器,從而實現(xiàn)導(dǎo)出功能

download(){
      window.location.href='http://localhost:9090/excel/down';
      this.$message.success("導(dǎo)出成功");
    },

三、將excel中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中

導(dǎo)出功能需要用的一個文件上傳的組件,這里用的是vue3組件庫中element-plus提供的el-upload組件

      <el-upload
          class="upload-demo"
          multiple=""
          method="post"
          action="api/excel/updown"
          style="margin-left: 10px"
          accept=".xlsx,.xls"
          :show-file-list="false"
          :on-success="success"
          name="files"
      >
        <el-button type="primary">導(dǎo)入</el-button>
      </el-upload>

當前比較重要的一個屬性就是action,這里action所對應(yīng)的是前端控制器的映射地址,也就是說選擇文件會傳送到地址對應(yīng)的前端控制器,前端控制就可以獲取這個文件

    @PostMapping("/updown")
    public Result  upload(@RequestParam("files") MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), User.class, new DataListener(userMapper)).sheet().doRead();
        return Result.success();
    }

然后通過EasyExcel的read方法實現(xiàn)對excel的讀取功能

在read方法中需要提供一個監(jiān)視器

public class DataListener extends AnalysisEventListener<User> {
    /**
     * 每隔5條存儲數(shù)據(jù)庫,實際使用中可以100條,然后清理list ,方便內(nèi)存回收
     */
    private static final int BATCH_COUNT = 100;
    private UserMapper userMapper;
    public DataListener(UserMapper userMapper){
        this.userMapper = userMapper;
    }
    List<User> list = new ArrayList<User>();
    //讀取數(shù)據(jù)會執(zhí)行這方法
    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
        System.out.println(JSON.toJSONString(user));
        list.add(user);
        System.out.println(list);
        if (list.size() >= BATCH_COUNT){
            list.clear();
        }
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        saveData();
        System.out.println("所有數(shù)據(jù)解析完成");
    }
    private void saveData(){
        System.out.println(this.userMapper);
        System.out.println("{" + list.size() + "}條數(shù)據(jù),開始存儲數(shù)據(jù)庫" );
        for (User user : list) {
            userMapper.insert(user);
        }
        System.out.println("存儲數(shù)據(jù)庫成功");
    }
}

注意:這個數(shù)據(jù)監(jiān)聽器不可以被springboot所代理,需要人工new出來,因此里面寫了一個構(gòu)造方法,用dao層作為參數(shù)創(chuàng)建,在new的時候?qū)⑦@個dao層的相對于的類作為構(gòu)造參數(shù),從而使得監(jiān)聽器可以完成對持久層的操作

到此這篇關(guān)于使用SpringBoot+EasyExcel+Vue實現(xiàn)excel表格的導(dǎo)入和導(dǎo)出詳解的文章就介紹到這了,更多相關(guān)Springboot excel導(dǎo)入導(dǎo)出數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java開發(fā)實現(xiàn)飛機大戰(zhàn)

    Java開發(fā)實現(xiàn)飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了Java開發(fā)實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot將項目打成war包步驟解析

    SpringBoot將項目打成war包步驟解析

    這篇文章主要介紹了SpringBoot將項目打成war包步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • javaWeb項目部署到阿里云服務(wù)Linux系統(tǒng)的詳細步驟

    javaWeb項目部署到阿里云服務(wù)Linux系統(tǒng)的詳細步驟

    這篇文章主要介紹了javaWeb項目部署到阿里云服務(wù)Linux系統(tǒng),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Java設(shè)置Excel數(shù)據(jù)驗證的示例代碼

    Java設(shè)置Excel數(shù)據(jù)驗證的示例代碼

    數(shù)據(jù)驗證是Excel 2013版本中,數(shù)據(jù)功能組下面的一個功能。本文將通過Java程序代碼演示數(shù)據(jù)驗證的設(shè)置方法及結(jié)果,感興趣的可以了解一下
    2022-05-05
  • Java如何設(shè)置系統(tǒng)參數(shù)和運行參數(shù)

    Java如何設(shè)置系統(tǒng)參數(shù)和運行參數(shù)

    這篇文章主要介紹了Java如何設(shè)置系統(tǒng)參數(shù)和運行參數(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Java中Swing類實例講解

    Java中Swing類實例講解

    這篇文章主要介紹了Java中Swing類實例講解,文中用代碼實例講解的很清楚,有需要的同學(xué)可以研究下
    2021-02-02
  • jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫的示例詳解

    jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫的示例詳解

    這篇文章主要介紹了jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫的示例代碼,包括配置類、請求攔截器、線程上下文等相關(guān)知識,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 詳解SPI在Dubbo中的應(yīng)用

    詳解SPI在Dubbo中的應(yīng)用

    通過本文的學(xué)習(xí),可以了解 Dubbo SPI 的特性及實現(xiàn)原理,希望對大家的開發(fā)設(shè)計有一定的啟發(fā)性
    2021-06-06
  • Spring Boot 如何整合連接池

    Spring Boot 如何整合連接池

    這篇文章主要介紹了Spring Boot 如何整合連接池,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下
    2020-11-11
  • 一文徹底搞定Java中常用集合的排序方法

    一文徹底搞定Java中常用集合的排序方法

    在某些特殊的場景下我們需要在Java程序中對List集合進行排序操作,下面這篇文章主要給大家介紹了關(guān)于Java中常用集合的排序方法的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11

最新評論

安西县| 虹口区| 萨迦县| 忻州市| 苏尼特左旗| 海南省| 个旧市| 泸溪县| 株洲市| 太康县| 紫阳县| 辉县市| 乌拉特中旗| 寻甸| 义乌市| 唐海县| 新余市| 陈巴尔虎旗| 昆明市| 喀什市| 永春县| 枣阳市| 吴江市| 大安市| 东乡族自治县| 呼玛县| 常熟市| 泰顺县| 禄丰县| 白河县| 宜昌市| 万山特区| 读书| 海口市| 宝清县| 温宿县| 厦门市| 惠水县| 克山县| 偃师市| 汉寿县|