精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

太強了!Spring Boot 3.3 一個接口就能搞定 Excel 導入導出所有表!

開發 前端
如果你正在開發一個后臺系統、BI平臺或需要支持可配置表單數據導入導出功能的系統,這種通用設計無疑能大大提升系統的靈活性和擴展性。

在日常的企業系統或后臺管理系統中,數據的 Excel 導入導出是非常常見的需求。傳統方式通常是:

  • 每張表都寫一個專門的導入導出方法;
  • 每張表都建立一個 Java Bean 類,硬編碼字段;
  • 新增或修改表結構時需要修改大量代碼。

這些方式帶來的問題有:代碼重復多、維護成本高、靈活性差

因此,本文基于 Spring Boot 3.3 + EasyExcel 實現一個 "支持任意表結構、無需綁定實體類、異步處理大文件導入" 的通用 Excel 導入導出功能。

技術選型與優勢

技術

用途

Spring Boot 3.3

構建 RESTful Web 項目

EasyExcel

快速讀取/寫入 Excel 文件

JdbcTemplate

動態操作任意表結構

ThreadPool

支持異步導入,釋放主線程

數據庫準備(支持任意表結構)

-- 用戶表
CREATETABLEuser(
  id BIGINTPRIMARYKEYAUTO_INCREMENT,
  name VARCHAR(100),
  phone VARCHAR(50),
  id_card VARCHAR(50),
  created_at DATETIMEDEFAULTCURRENT_TIMESTAMP
);

-- 商品表
CREATETABLE product (
  id BIGINTPRIMARYKEYAUTO_INCREMENT,
  name VARCHAR(100),
  price DECIMAL(10,2),
  stock INT,
  created_at DATETIMEDEFAULTCURRENT_TIMESTAMP
);

通用導入導出接口設計

@RestController
@RequestMapping("/excel")
@RequiredArgsConstructor
public class ExcelController {


    private final JdbcTemplate jdbcTemplate;
    private final ThreadPoolTaskExecutor taskExecutor;


    /**
     * Excel 導入任意表(異步)
     */
    @PostMapping("/import")
    public ResponseEntity<String> importExcel(@RequestParam("file") MultipartFile file,
                                              @RequestParam("tableName") String tableName) throws IOException {


        List<Map<Integer, String>> rowData = new ArrayList<>();


        EasyExcel.read(file.getInputStream(), new AnalysisEventListener<Map<Integer, String>>() {
            @Override
            public void invoke(Map<Integer, String> data, AnalysisContext context) {
                rowData.add(data);
            }


            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {}
        }).sheet().doRead();


        // 獲取目標表字段名(排除主鍵)
        List<String> columns = jdbcTemplate.queryForList(
                "SHOW COLUMNS FROM " + tableName + " WHERE Field != 'id'", String.class);


        if (columns.size() != rowData.get(0).size()) {
            return ResponseEntity.badRequest().body("Excel列數與表字段不匹配");
        }


        // 異步處理
        taskExecutor.execute(() -> {
            for (Map<Integer, String> row : rowData) {
                String sql = "INSERT INTO " + tableName + " (" + String.join(",", columns) + ") VALUES (" +
                        String.join(",", Collections.nCopies(columns.size(), "?")) + ")";
                Object[] values = columns.stream().map(col -> row.get(columns.indexOf(col))).toArray();
                jdbcTemplate.update(sql, values);
            }
        });


        return ResponseEntity.ok("文件上傳成功,已異步導入中");
    }


    /**
     * Excel 導出任意表
     */
    @GetMapping("/export")
    public void exportExcel(@RequestParam("tableName") String tableName, HttpServletResponse response) throws IOException {
        List<String> columnNames = jdbcTemplate.queryForList("SHOW COLUMNS FROM " + tableName, String.class);
        List<Map<String, Object>> rows = jdbcTemplate.queryForList("SELECT * FROM " + tableName);


        List<List<String>> excelData = new ArrayList<>();
        excelData.add(columnNames);


        for (Map<String, Object> row : rows) {
            List<String> rowList = columnNames.stream().map(col -> {
                Object value = row.get(col);
                return value == null ? "" : value.toString();
            }).collect(Collectors.toList());
            excelData.add(rowList);
        }


        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode(tableName + "_export.xlsx", "UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);


        EasyExcel.write(response.getOutputStream())
                .sheet("數據")
                .doWrite(excelData);
    }
}

線程池配置支持異步導入

@Configuration
public class ThreadConfig {
    @Bean
    public ThreadPoolTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
        pool.setCorePoolSize(4);
        pool.setMaxPoolSize(8);
        pool.setQueueCapacity(100);
        pool.setKeepAliveSeconds(30);
        pool.setThreadNamePrefix("excel-import-");
        pool.initialize();
        return pool;
    }
}
spring:
  task:
    execution:
      pool:
        core-size: 4
        max-size: 8
        queue-capacity: 100

前端 Thymeleaf 示例

<form method="post" enctype="multipart/form-data" action="/excel/import">
    <input type="file" name="file">
    <input type="text" name="tableName" placeholder="輸入表名">
    <button type="submit">導入 Excel</button>
</form>

<a href="/excel/export?tableName=user">導出用戶表</a>

總結:如何提升系統通用能力

通過本文的設計與實戰,我們實現了一個通用 Excel 導入導出框架,具備如下優勢:

  • 高通用性:支持任意數據庫表結構導入導出
  • 低維護成本:無需重復寫實體類和 mapper
  • 異步處理能力:導入可處理大文件不阻塞主線程
  • 適配前后端分離/低代碼平臺使用場景

如果你正在開發一個后臺系統、BI平臺或需要支持可配置表單數據導入導出功能的系統,這種通用設計無疑能大大提升系統的靈活性和擴展性。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2025-07-02 08:00:00

防抖SpringBoot開發

2025-03-26 00:35:00

Javaweb開發

2025-01-13 13:47:13

2022-06-06 08:42:04

spring-boo開發接口防盜刷

2025-02-17 07:48:45

2025-08-07 09:30:57

2025-04-10 00:25:00

Spring@JsonView注解

2021-10-19 18:22:50

Map 注冊表源碼

2020-06-22 07:55:28

接口爬蟲

2025-05-14 01:00:00

Spring工具工廠類

2025-03-26 08:28:36

2022-06-23 08:42:08

配置加密解密

2025-01-22 14:02:35

2025-10-31 07:42:31

SpringExcel工具

2025-09-01 02:00:00

2025-11-03 06:25:26

SpringJSONJackson

2025-06-09 01:22:00

2025-02-08 08:00:00

JavaDeepSeekIDEA

2022-05-30 16:31:08

CSS

2024-02-19 00:21:45

開源圖片
點贊
收藏

51CTO技術棧公眾號

黄色av网址在线免费观看| 免费无遮挡无码永久在线观看视频| 欧美aa视频| 日本一区二区不卡视频| 亚洲一区二区少妇| 永久免费看片在线播放| 精品免费视频| 日韩精品最新网址| 无码精品国产一区二区三区免费| h视频在线免费| 国产成人av资源| 国产不卡av在线| 手机在线免费看毛片| 欧美高清一级片| 色88888久久久久久影院野外| 国产91av视频在线观看| 免费观看的毛片| 奇米影视7777精品一区二区| 欧美激情手机在线视频 | 亚洲日本va| 欧美在线播放高清精品| 少妇久久久久久被弄到高潮| 国产精品免费观看| 不卡的av在线| 91超碰rencao97精品| 国产精品免费精品一区| 午夜久久黄色| 日韩中文字幕视频| 国产精品偷伦视频免费观看了| 天堂av中文在线观看| 亚洲品质自拍视频| 日韩欧美激情一区二区| 国内精品国产成人国产三级| 六月丁香婷婷久久| 日本成人免费在线| 国产第100页| 亚洲先锋影音| 少妇久久久久久| 久久精品老司机| 亚洲网站三级| 欧美中文字幕久久| 国模吧无码一区二区三区| 在线免费观看污| 中文字幕一区二区在线观看| 日韩免费av电影| 手机亚洲第一页| 成人动漫一区二区| 国产91精品入口17c| 国产乱码久久久| 九一久久久久久| 国产精品入口尤物| 天天天天天天天干| 日韩电影免费在线看| 国产精品成人v| 日韩精品一区不卡| 久久黄色影院| 欧美一性一乱一交一视频| 日本一本高清视频| 激情欧美国产欧美| 欧美激情网站在线观看| 精品少妇theporn| 国内在线观看一区二区三区| 久久99久久亚洲国产| 久久久久无码国产精品| 黄页网站一区| 91国内免费在线视频| 制服.丝袜.亚洲.中文.综合懂色| 99视频精品| 热草久综合在线| 亚洲不卡视频在线观看| 欧美亚洲一级| 国产精品久久久久久av下载红粉 | 成人爽a毛片免费啪啪动漫 | 欧美日韩在线视频播放| 三级一区在线视频先锋| 国产免费一区二区三区在线能观看| 中文字幕+乱码+中文| 久久精品国产一区二区三| 国产精品羞羞答答| 国产有码在线观看| 国产盗摄精品一区二区三区在线| 国产高清精品一区二区| 无码国产精品高潮久久99| 91丨porny丨在线| 日韩在线导航| 超碰在线caoporn| 亚洲mv在线观看| 欧美三级午夜理伦三级| 成人黄色在线| 欧美r级电影在线观看| 亚洲精品女人久久久| 红桃视频在线观看一区二区| 日韩中文娱乐网| 中文字幕第28页| 日韩精品亚洲专区| 91最新在线免费观看| 天天操天天干天天爱| 国产日韩欧美a| 黄色片免费在线观看视频| 人在线成免费视频| 欧美理论电影在线| 午夜av免费看| 天天精品视频| 欧美亚洲另类视频| 国产精品污视频| 久久综合九色综合97婷婷女人| 亚洲欧美日韩不卡一区二区三区| 青春草视频在线观看| 欧美视频在线观看免费| 无套内谢丰满少妇中文字幕 | 亚洲风情亚aⅴ在线发布| 最新中文字幕av| 亚洲激情二区| 成人性生交大片免费观看嘿嘿视频| 天天操天天射天天| 一区在线观看免费| 无码aⅴ精品一区二区三区浪潮| 亚洲网站免费| 在线观看日韩欧美| 九九热国产视频| 国产麻豆视频一区二区| 婷婷亚洲婷婷综合色香五月| mm视频在线视频| 欧美一区二区三区视频在线观看| 少妇无套高潮一二三区| 亚洲伦伦在线| 91视频免费在线观看| 啊v视频在线| 日韩欧美成人精品| 中文字幕在线观看91| 婷婷综合视频| 国产色视频一区| 国产毛片av在线| 欧美视频精品一区| 日本护士做爰视频| 午夜日韩av| 亚洲一区二区日本| 免费黄色网址在线观看| 日本国产一区二区| chinese麻豆新拍video| 国产综合亚洲精品一区二| 91视频国产高清| 日本三级在线播放完整版| 欧洲另类一二三四区| 给我看免费高清在线观看| 国精品一区二区三区| 91老司机在线| 黄色精品在线观看| 在线播放91灌醉迷j高跟美女| 蜜桃av乱码一区二区三区| 噜噜噜91成人网| 日本高清一区| 国产成人免费| 精品国产一区二区在线| 97caocao| 亚洲精品乱码久久久久久黑人| 午夜激情影院在线观看| 爽成人777777婷婷| 91久久久久久久一区二区| 日本中文在线观看| 欧美精品乱码久久久久久| 欧美性x x x| 国产精品一区二区果冻传媒| 久久久久久久香蕉| 丁香综合av| 欧美精品激情视频| 五月婷婷六月丁香| 欧美性猛交xxxxx免费看| 91成年人网站| 久久精品国产99| 亚洲精品少妇一区二区| 成人福利一区| 日本精品视频在线观看| 电影在线一区| 91精品国产综合久久精品app| 成年人av电影| 国产成人精品免费网站| 免费成人午夜视频| 欧美一级淫片| 亚洲精品日韩av| 久草在线资源站手机版| 亚洲欧美综合图区| 国产孕妇孕交大片孕| 一区二区三区不卡视频 | 国产又黄又粗又硬| 亚洲综合偷拍欧美一区色| 亚洲欧美视频在线播放| 蜜桃av一区二区三区| 强开小嫩苞一区二区三区网站| 国产一区调教| 成人精品视频久久久久| 17videosex性欧美| 国产婷婷成人久久av免费高清 | 狠狠色丁香久久婷婷综合丁香| 成年丰满熟妇午夜免费视频 | jizz国产在线| 亚洲一区二三区| 18禁裸乳无遮挡啪啪无码免费| 国产综合色精品一区二区三区| 国产素人在线观看| 青青草国产成人a∨下载安卓| 波多野结衣久草一区| 自拍网站在线观看| 欧美大肥婆大肥bbbbb| 神马久久久久久久久久| 欧美裸体一区二区三区| 国内精品福利视频| 国产精品久久久久久久第一福利| 黄色激情在线观看| 蜜芽一区二区三区| 男人日女人视频网站| 国产精品久久久久久影院8一贰佰| 国产精品手机在线| 96视频在线观看欧美| 欧美一区亚洲一区| 黄网av在线| 久久精品99久久香蕉国产色戒| 日韩av资源站| 亚洲国产精品高清久久久| 亚洲一区二区色| 红桃av永久久久| 久久久久久久久久久网| 亚洲欧美在线观看| 真实乱视频国产免费观看| 成人综合婷婷国产精品久久蜜臀| 国产免费中文字幕| 美女视频第一区二区三区免费观看网站 | 欧亚精品在线观看| 色黄网站在线观看| 久久精品国产免费观看| 国产系列电影在线播放网址| 日韩av网站导航| 六月婷婷综合网| 欧美成人乱码一区二区三区| 国产美女裸体无遮挡免费视频| 欧美三级一区二区| 国产视频1区2区| 一本色道久久综合狠狠躁的推荐 | 亚洲成人资源| 女人色极品影院| 欧美ab在线视频| 400部精品国偷自产在线观看| 婷婷久久一区| 超碰成人在线免费观看| 欧美国产美女| 伊人久久99| 国产精品videosex性欧美| 亚洲一区二区不卡视频| 久久在线免费| 经典三级在线视频| 亚洲成人国产| 台湾无码一区二区| 精久久久久久| 美女福利视频在线| 首页欧美精品中文字幕| 情侣黄网站免费看| 日韩av成人高清| 一区二区三区免费播放| 美女诱惑一区二区| 午夜一级免费视频| 国产成人午夜视频| 日本道中文字幕| 26uuu久久综合| www.99热| 一区二区三区在线免费播放 | 在线亚洲高清视频| 成人黄色片在线观看| 欧美精品九九99久久| 99热这里只有精品66| 欧美大片一区二区三区| 性一交一乱一伧老太| 亚洲国内精品视频| 欧美日韩在线中文字幕| 中文字幕精品久久久久| 日本黄色片在线观看| 欧美插天视频在线播放| 韩国成人免费视频| 国产成人一区二区| 四虎永久精品在线| 国产精品美女诱惑| 国产欧美日韩在线一区二区| 手机看片日韩国产| 激情亚洲网站| 在线黄色免费观看| 国产高清在线精品| 醉酒壮男gay强迫野外xx| 国产精品美女视频| 精品深夜av无码一区二区老年| 日韩欧美福利视频| 国产手机av在线| 日韩精品在线观看一区二区| √天堂资源地址在线官网| 欧美激情一区二区三区在线视频观看| 在线免费看h| 成人性生交大片免费看视频直播 | 亚洲性xxxx| 日韩激情av| 国产精品久久久久久久午夜| 亚洲国产中文在线二区三区免| 欧美激情一区二区三区在线视频| 婷婷六月综合| 国模杨依粉嫩蝴蝶150p| 国产成人免费视频一区| avhd101老司机| 欧美日韩国产激情| 国产精品久久影视| 亚洲久久久久久久久久久| 宅男网站在线免费观看| 国产精品7m视频| 欧美a级大片在线| 亚洲国产婷婷香蕉久久久久久99| 亚洲美女色禁图| 日本网站在线看| 国产婷婷色一区二区三区| 伊人国产在线观看| 91精品国产免费| a天堂中文在线| 秋霞av国产精品一区| 国产精品中文字幕制服诱惑| 97超碰人人爱| 麻豆一区二区三| 天天躁日日躁aaaxxⅹ| 午夜视频在线观看一区二区三区| 国产欧美综合视频| 中文字幕亚洲欧美一区二区三区| 欧美freesex黑人又粗又大| 96成人在线视频| 亚洲精品国产偷自在线观看| 亚洲福利精品视频| 久久亚洲二区三区| 丰满少妇乱子伦精品看片| 日韩女优av电影在线观看| 麻豆传媒视频在线| 国产男女猛烈无遮挡91| 精品国产一区二区三区小蝌蚪| 国产精品亚洲a| 久久理论电影网| 久久久久久久久黄色| 日韩av在线一区二区| av免费不卡国产观看| 国产激情美女久久久久久吹潮| 中文字幕一区二区三区久久网站| 国产女同无遮挡互慰高潮91| 亚洲欧美在线高清| 91成人国产综合久久精品| 最近2019中文字幕第三页视频 | 欧美精品tushy高清| 97在线观看免费观看高清| 国产精品天天狠天天看| 成人av动漫在线观看| 91日韩视频在线观看| 中文字幕av一区二区三区免费看| 亚洲熟妇无码久久精品| 色噜噜狠狠狠综合曰曰曰88av| 国产亚洲欧美日韩精品一区二区三区 | 精品国产91久久久久久老师| 手机看片1024国产| 欧美中文在线免费| 欧美日韩国产高清电影| 午夜宅男在线视频| 中文字幕制服丝袜一区二区三区| 91亚洲国产成人久久精品麻豆| 久久影院资源网| 动漫3d精品一区二区三区乱码| 九色在线视频观看| 久久久久久久久久久电影| 特级西西444www高清大视频| 日韩小视频在线观看| 精品一区91| 国产原创中文在线观看| 久久久久免费观看| 亚洲天堂狠狠干| 欧美激情精品久久久久久久变态| 日韩丝袜视频| a在线观看免费视频| 成人免费小视频| 日韩在线视频免费| 国产不卡视频在线| 91精品综合| 国产黄色三级网站| 欧美性猛片aaaaaaa做受| 在线播放蜜桃麻豆| 免费日韩av电影| 激情图片小说一区| 日韩精品久久久久久久| 亚洲天堂影视av| 日韩区一区二| 不卡影院一区二区| 亚洲色图19p| 三区在线观看| 亚洲一区二区在线播放| 午夜综合激情| 国内偷拍精品视频| 亚洲人成网站777色婷婷| 91精品在线免费视频| 欧美精品自拍视频| 亚洲欧洲日产国码二区| 神马午夜电影一区二区三区在线观看 | 在线观看亚洲精品福利片| 日本精品久久久久久久久久|