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

Spring Boot 3.4 一鍵搞定!接口實現任意表的 Excel 導入導出

開發 前端
本文展示了一種高效且內存友好的 Excel 文件處理方案。無論是單一表格的導入導出,還是動態適配不同數據表的需求,我們都可以通過泛型和反射機制靈活實現。

在 Java Web 開發中,處理 Excel 文件的導入導出是常見且重要的需求,尤其是在大數據量的場景下,如何高效、安全地進行 Excel 文件的讀寫,直接影響到系統的性能與穩定性。傳統的工具如 EasyPoi 或 Hutool 提供了強大的功能,但在大規模數據處理時,這些工具常常面臨內存溢出(OOM)等性能瓶頸。為了解決這些問題,我們可以轉而使用 EasyExcel,它采用了低內存消耗的設計,能夠高效地處理海量數據的導入導出。

本文將介紹如何通過結合 Spring Boot 3.4 與 EasyExcel,實現一鍵搞定任意表的 Excel 導入導出。我們將通過使用 Java 8 的函數式編程特性、反射機制、以及多線程優化技術,進一步提升開發效率并確保系統的穩定性。特別地,在處理大數據量時,我們會通過批量存儲和線程池的方式,避免內存溢出問題,并進一步優化導入導出的性能。

優化策略

  1. 使用 Java 8 的函數式編程簡化數據導入
  2. 利用反射實現通用接口導入任意 Excel
  3. 通過線程池優化大數據量 Excel 導入性能
  4. 通過泛型支持多種數據導出格式

Maven 依賴

首先,需要在 pom.xml 文件中添加 EasyExcel 的依賴:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

使用泛型實現對象的單個 Sheet 導入

首先,我們創建一個用于表示導入數據的類,假設是一個學生信息類:

package com.icoderoad.entity;


import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("stu_info")
@ApiModel("學生信息")
public class StuInfo {


    private static final long serialVersionUID = 1L;


    @ApiModelProperty("姓名")
    @ExcelProperty(value = "姓名", order = 0)
    private String name;


    @ApiModelProperty("年齡")
    @ExcelProperty(value = "年齡", order = 1)
    private Integer age;


    @ApiModelProperty("身高")
    @ExcelProperty(value = "身高", order = 2)
    private Double tall;


    @ApiModelProperty("自我介紹")
    @ExcelProperty(value = "自我介紹", order = 3)
    private String selfIntroduce;


    @ApiModelProperty("性別")
    @ExcelProperty(value = "性別", order = 4)
    private Integer gender;


    @ApiModelProperty("入學時間")
    @ExcelProperty(value = "入學時間", order = 5)
    private String intake;


    @ApiModelProperty("出生日期")
    @ExcelProperty(value = "出生日期", order = 6)
    private String birthday;
}

重寫 ReadListener 接口

為了處理數據導入過程中可能出現的內存溢出問題,我們重寫 ReadListener 接口,并將數據按批次進行存儲:

package com.icoderoad.listener;


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.read.listener.ReadListener;
import com.icoderoad.exception.BizException;
import lombok.extern.slf4j.Slf4j;


import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;


@Slf4j
public class UploadDataListener<T> implements ReadListener<T> {


    private static final int BATCH_COUNT = 100;
    private List<T> cachedDataList = new ArrayList<>(BATCH_COUNT);
    private Predicate<T> predicate;
    private Consumer<Collection<T>> consumer;


    public UploadDataListener(Predicate<T> predicate, Consumer<Collection<T>> consumer) {
        this.predicate = predicate;
        this.consumer = consumer;
    }


    public UploadDataListener(Consumer<Collection<T>> consumer) {
        this.consumer = consumer;
    }


    @Override
    public void invoke(T data, AnalysisContext context) {
        if (predicate != null && !predicate.test(data)) {
            return;
        }
        cachedDataList.add(data);


        // When the batch size reaches BATCH_COUNT, trigger data storage
        if (cachedDataList.size() >= BATCH_COUNT) {
            try {
                consumer.accept(cachedDataList);
            } catch (Exception e) {
                log.error("Data upload failed! Data={}", cachedDataList);
                throw new BizException("Import failed");
            }
            cachedDataList.clear();
        }
    }


    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        if (!cachedDataList.isEmpty()) {
            try {
                consumer.accept(cachedDataList);
                log.info("All data parsing completed!");
            } catch (Exception e) {
                log.error("Data upload failed! Data={}", cachedDataList);
                if (e instanceof BizException) {
                    throw e;
                }
                throw new BizException("Import failed");
            }
        }
    }
}

Controller 層實現

在 Controller 層,我們使用 EasyExcel.read() 方法讀取上傳的文件,并通過 UploadDataListener 實現數據批量存儲:

package com.icoderoad.controller;


import com.alibaba.excel.EasyExcel;
import com.icoderoad.entity.StuInfo;
import com.icoderoad.listener.UploadDataListener;
import com.icoderoad.service.StuInfoService;
import com.icoderoad.util.ValidationUtils;
import com.icoderoad.exception.BizException;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


import java.io.IOException;


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


    @Autowired
    private StuInfoService service;


    @ApiOperation("一鍵導入數據到 Excel")
    @PostMapping("/update")
    @ResponseBody
    public R<String> importExcel(MultipartFile file) throws IOException {
        try {
            EasyExcel.read(file.getInputStream(), StuInfo.class, new UploadDataListener<StuInfo>(
                list -> {
                    // 驗證數據
                    ValidationUtils.validate(list);
                    // 批量保存數據
                    service.saveBatch(list);
                    log.info("Imported {} rows of data from Excel", list.size());
                }
            )).sheet().doRead();
        } catch (IOException e) {
            log.error("Import failed", e);
            throw new BizException("Import failed");
        }
        return R.success("Success");
    }
}

處理任意數據表的導入

對于需要導入不同數據表的情況,我們可以通過傳遞表編碼以及文件來動態讀取數據,并進行適配:

@ApiOperation("通用數據表導入")
@PostMapping("/listenMapData")
@ResponseBody
public R<String> listenMapData(@RequestParam("tableCode") String tableCode, MultipartFile file) throws IOException {
    try {
        EasyExcel.read(file.getInputStream(), new NonClazzOrientedListener(
            list -> {
                log.info("Imported {} rows of data", list.size());
            }
        )).sheet().doRead();
    } catch (IOException e) {
        log.error("Import failed", e);
        throw new BizException("Import failed");
    }
    return R.success("Success");
}

重寫 ReadListener 接口處理非類型化數據

當我們需要處理不同類型的表時,可以通過 Map 來處理數據,具體實現如下:

package com.icoderoad.listener;


import com.alibaba.excel.context.AnalysisContext;
import com.icoderoad.exception.BizException;
import lombok.extern.slf4j.Slf4j;


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Predicate;


@Slf4j
public class NonClazzOrientedListener implements ReadListener<Map<Integer, String>> {


    // 定義批次處理的大小
    private static final int BATCH_COUNT = 100;


    // 用于緩存行數據
    private List<List<Object>> rowsList = new ArrayList<>(BATCH_COUNT);


    // 臨時存儲每一行數據
    private List<Object> rowList = new ArrayList<>();


    // 條件判斷的 Predicate,決定是否處理當前行
    private Predicate<Map<Integer, String>> predicate;


    // 數據處理的消費者
    private Consumer<List> consumer;


    // 構造函數,傳入條件判斷和數據處理邏輯
    public NonClazzOrientedListener(Predicate<Map<Integer, String>> predicate, Consumer<List> consumer) {
        this.predicate = predicate;
        this.consumer = consumer;
    }


    // 構造函數,只傳入數據處理邏輯
    public NonClazzOrientedListener(Consumer<List> consumer) {
        this.consumer = consumer;
    }


    @Override
    public void invoke(Map<Integer, String> row, AnalysisContext analysisContext) {
        // 判斷是否符合處理條件,如果有定義 Predicate,進行過濾
        if (predicate != null && !predicate.test(row)) {
            return;
        }


        // 清理 rowList,為下一行做準備
        rowList.clear();


        // 處理每一行的數據,將行數據添加到 rowList
        row.forEach((k, v) -> {
            log.debug("處理數據行,鍵:{},值:{}", k, v);  // 中文日志輸出
            rowList.add(v == null ? "" : v);
        });


        // 將處理過的 rowList 添加到 rowsList
        rowsList.add(rowList);


        // 當達到批次大小時,執行存儲操作
        if (rowsList.size() >= BATCH_COUNT) {
            processBatch();
        }
    }


    // 批量處理數據,并清理緩存
    private void processBatch() {
        try {
            log.debug("執行存儲邏輯,當前批次包含 {} 行數據", rowsList.size());  // 中文日志輸出
            log.info("當前數據:{}", rowsList);
            consumer.accept(rowsList);
        } catch (Exception e) {
            log.error("數據上傳失敗!數據:{}", rowsList, e);  // 中文日志輸出
            if (e instanceof BizException) {
                throw e;
            }
            throw new BizException("導入失敗");
        } finally {
            // 批次處理后清空緩存
            rowsList.clear();
        }
    }


    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 如果還有剩余數據沒有處理,執行最后一次存儲操作
        if (!rowsList.isEmpty()) {
            processBatch();
        }
        log.debug("所有數據處理并上傳完成。");  // 中文日志輸出
    }
}

結論

通過 EasyExcel 和 Spring Boot 3.4 的完美結合,本文展示了一種高效且內存友好的 Excel 文件處理方案。無論是單一表格的導入導出,還是動態適配不同數據表的需求,我們都可以通過泛型和反射機制靈活實現。同時,利用線程池的方式優化大數據量處理,顯著提高了性能,避免了內存溢出(OOM)問題。通過本文的方法,你可以輕松實現任意表的數據導入導出,滿足各種業務需求,并為未來的大規模數據處理奠定堅實的基礎。

優化后的這兩部分旨在加強對文章主題的深入闡述,同時突出技術的實際應用價值和解決方案的優勢,增強文章的專業性和實踐性。如果你覺得還有其他可以進一步擴展或調整的地方,隨時告訴我!

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

2025-03-26 00:35:00

Javaweb開發

2025-04-08 01:00:00

Spring開發系統

2025-10-31 07:42:31

SpringExcel工具

2021-04-23 10:38:52

Spring BootSpringMVC源碼

2025-09-11 08:07:24

2025-03-28 07:56:39

Spring服務配置

2020-03-31 15:03:56

Spring Boot代碼Java

2025-02-17 00:00:45

接口支付寶沙箱

2025-04-17 04:00:00

2025-09-26 02:00:00

Spring接口開發

2024-10-17 11:09:46

2025-04-08 08:01:31

2022-06-06 08:42:04

spring-boo開發接口防盜刷

2025-07-07 07:33:31

2025-04-27 03:00:00

Spring集成測試

2025-03-03 08:00:00

SpringBootEasyExcel數據導出

2021-05-14 06:15:48

SpringAware接口

2025-11-04 07:58:20

SpringBoot多語言18n

2022-08-01 07:02:06

SpringEasyExcel場景

2024-08-05 09:51:00

點贊
收藏

51CTO技術棧公眾號

国产自偷自偷免费一区| 国产啪精品视频网站| 亚洲国产精品第一页| 波多野结衣精品| youjizz国产精品| 欧美一性一乱一交一视频| 男人操女人动态图| 激情综合五月| 一本到三区不卡视频| 亚洲精品国产精品乱码不99按摩| 亚洲欧洲日产国码无码久久99| 九色蝌蚪在线| 国产精品香蕉一区二区三区| 欧美大片大片在线播放| 色婷婷av777| 高清一区二区三区av| 天天综合天天做天天综合| 亚洲欧洲在线一区| 性高潮久久久久久久久久| 秋霞国产午夜精品免费视频| 欧美极品少妇与黑人| 伊人影院综合网| 不卡专区在线| 国产精品美女久久久久久2018| av在线亚洲男人的天堂| 少妇无套内谢久久久久| 国户精品久久久久久久久久久不卡| 日韩毛片在线观看| 欧美一级大片免费看| 国产一区二区三区四区五区3d| 亚洲不卡在线观看| 欧美 另类 交| 国产经典自拍视频在线观看| 国产99久久久国产精品免费看| 国产精品入口日韩视频大尺度| 六月丁香在线视频| 66精品视频在线观看| 亚洲欧美日韩人成在线播放| 欧美高清视频一区| 成人毛片在线精品国产| 韩日av一区二区| 国产精品精品久久久| 欧美不卡视频在线观看| 欧美1区3d| 丝袜亚洲另类欧美重口| 一区二区精品免费| 校花撩起jk露出白色内裤国产精品| 日韩亚洲国产中文字幕欧美| 性生活免费在线观看| 成人黄色免费短视频| 亚洲va在线va天堂| 97免费视频观看| 色www永久免费视频首页在线 | 丰满岳妇乱一区二区三区| 国产精品视频一二三四区| 国产在线高清理伦片a| 国产精品色在线观看| 色99中文字幕| a天堂在线资源| 免费成人在线观看视频| 国产成人福利视频| www五月天com| 老牛嫩草一区二区三区日本| www国产精品av| 亚洲欧美一区二区三区情侣bbw| 亚洲美女高潮久久久| 看亚洲a级一级毛片| 亚洲精品国产熟女久久久| 97一区二区国产好的精华液| 日韩精品自拍偷拍| 中文字幕人妻熟女在线| 白嫩白嫩国产精品| 亚洲风情亚aⅴ在线发布| 扒开伸进免费视频| 97最新国自产拍视频在线完整在线看| 成人免费视频播放| 成人黄色片视频网站| www香蕉视频| 国产91精品久久久久久久网曝门| 91av一区二区三区| 少妇人妻丰满做爰xxx| 日韩免费视频| 日韩在线视频免费观看高清中文| 欧美巨胸大乳hitomi| 日本一二区不卡| 久久不射电影网| 草视频在线观看| 国产精品任我爽爆在线播放| 欧美午夜精品伦理| 国产美女无遮挡网站| 中文字幕不卡三区视频| 91九色02白丝porn| 青少年xxxxx性开放hg| 日本www在线观看视频| 中文字幕一区二区三区乱码在线 | 日韩一区av在线| 男女男精品视频网站| 国产精品久久久久久麻豆一区软件| 波霸ol色综合久久| 九九精品在线观看视频| 亚洲人成久久| 国产成人一区二区三区| 一区二区国产欧美| 国产激情偷乱视频一区二区三区| 精品亚洲欧美日韩| 在线毛片网站| 亚洲一二三区在线观看| 蜜桃视频在线观看91| 国产视频在线一区| 国产69精品久久久久毛片| 久久精品欧美| 天天在线视频色| 亚洲影院久久精品| 动漫av免费观看| 精品国产乱码久久久久久樱花| 亚洲国产成人av在线| 国产精品三级在线观看无码| 一区二区三区四区在线观看国产日韩| 欧美激情高清视频| 国产一区免费看| 国内外成人在线| 国产日韩精品一区| 欧美日韩第一视频| 成年人免费看毛片| 蜜臀av国产精品久久久久| 97久草视频| 激情福利在线| 亚洲成av人片在www色猫咪| 国产成人无码av在线播放dvd| h片在线免费观看| 精品日韩视频在线观看| 搡的我好爽在线观看免费视频| 老牛影视av一区二区在线观看| 中文字幕久热精品视频在线| 久久露脸国语精品国产91| 日本亚洲最大的色成网站www| 亚洲最大福利视频网站| 国产精品视频二区三区| 亚洲www啪成人一区二区麻豆| 9l视频白拍9色9l视频| 欧洲精品一区| 色综合久久天天综线观看| 国产九色91回来了| 91免费在线播放| 国产欧美日韩小视频| 77成人影视| 久久av在线播放| 中文字幕人妻互换av久久| 日韩国产在线一| 国产视频不卡| 色婷婷av在线| 欧美一级二级三级乱码| 国产三级短视频| 石原莉奈一区二区三区在线观看| 久久综合久久久| hd国产人妖ts另类视频| 日韩欧美不卡一区| 免费在线观看a级片| 人禽交欧美网站| 色综合久久久久久久久五月| 性欧美xxx69hd高清| 亚洲激情久久久| 久久精品欧美一区二区| 国产高清久久久| 熟妇熟女乱妇乱女网站| 亚洲电影二区| 久久天堂电影网| 国产孕妇孕交大片孕| 中文字幕在线免费不卡| 国内国产精品天干天干| 久久影视一区| 成人天堂噜噜噜| jizz在线免费观看| 91精品国产一区二区三区蜜臀 | 国产98色在线|日韩| 久久香蕉视频网站| 另类尿喷潮videofree| 91国产在线精品| 日韩美女一级视频| 日本道免费精品一区二区三区| 强伦人妻一区二区三区| 日韩av中文字幕一区二区| 亚洲人成77777| 动漫一区二区三区| 欧美黑人视频一区| 亚洲女同志亚洲女同女播放| 欧美性xxxxxxx| 免费成人深夜天涯网站| 麻豆精品新av中文字幕| 在线观看亚洲视频啊啊啊啊| 国产精品一区二区三区www| 精品自拍视频在线观看| 天堂在线资源库| 欧美性极品少妇精品网站| 欧美做爰啪啪xxxⅹ性| 不卡av在线网| av五月天在线| 亚洲精品成人无限看| 国产精品久久久久久久久久直播 | 欧美激情第3页| 国产一区日韩欧美| 久久久久久久免费| 欧美成人一二区| 欧美精品久久久久| 青青草超碰在线| 欧美成人精品3d动漫h| 91午夜视频在线观看| 国产精品蜜臀av| 香蕉视频污视频| 蜜臀久久久久久久| 男人天堂a在线| 欧美丝袜激情| 国产精品三区四区| 国产电影一区| 日本久久久久久久久久久| 日本在线观看网站| 亚洲国产精品人人爽夜夜爽| 国产香蕉精品视频| 久久精品毛片| 欧美aaa在线观看| 任你躁在线精品免费| 成人激情视频在线播放| 国产黄大片在线观看| 色妞久久福利网| 色哟哟国产精品色哟哟| 精品国产福利在线| 久久精品黄色片| 国产亚洲欧美日韩日本| 美女网站视频在线观看| 蜜桃久久久久久久| 欧美网站免费观看| 欧美日韩网址| 91精品国产高清自在线看超| 91精彩视频在线播放| 337p日本欧洲亚洲大胆精品| 国产精品爽爽久久| 欧美亚洲一区二区在线| 黄色片视频网站| 一区二区三区四区亚洲| 成人在线观看高清| 国产欧美一区二区精品婷婷| 中文在线观看免费视频| 韩国三级电影一区二区| 久久精品免费网站| 亚洲综合丁香| 国产日韩亚洲欧美在线| 99久久综合| 懂色av粉嫩av蜜臀av| 日韩久久精品网| 神马影院一区二区三区| 蜜桃一区二区三区| 久久99国产精品99久久| 精品国产午夜肉伦伦影院| 成人妇女淫片aaaa视频| 成人免费91| 成人免费在线视频网站| 嫩草伊人久久精品少妇av杨幂| 日本久久亚洲电影| 巨茎人妖videos另类| 欧洲亚洲在线视频| 欧美与亚洲与日本直播| 国产成人精品久久二区二区| 亚洲最新无码中文字幕久久| 2019av中文字幕| 亚洲一级少妇| 日本91av在线播放| 成人激情综合| 国产色婷婷国产综合在线理论片a| 国产成人精品一区二区三区在线 | 影音先锋中文字幕一区| 久久av综合网| 国产欧美精品久久| 六月丁香婷婷激情| 美女黄网久久| wwwwxxxx日韩| 免费在线一区观看| 在线观看你懂的视频| 成人性视频免费网站| 香港三日本8a三级少妇三级99| 成人av午夜影院| 无遮挡aaaaa大片免费看| 91网上在线视频| 日本精品在线观看视频| 最新国产精品久久精品| 欧美精品乱码视频一二专区| 亚洲高清在线精品| 天天爽夜夜爽夜夜爽精品| 日本福利一区二区| 97人妻精品一区二区三区软件 | 蜜桃久久久久| 久久综合九九| 99re66热这里只有精品8| 日韩精品一区二区三区电影| 亚洲国产一区二区三区在线播放| 波多野结衣 作品| 鲁大师影院一区二区三区| 9久久婷婷国产综合精品性色| 精品一区二区免费在线观看| 制服.丝袜.亚洲.中文.综合懂| av一区二区不卡| 丁香激情五月少妇| 亚洲色欲色欲www在线观看| 国产又大又黄又粗| 91麻豆精品国产91久久久使用方法 | 2018国产精品视频| 欧美日韩视频免费观看| 国产福利精品视频| 成人国产精品一区二区网站| 精品视频高清无人区区二区三区| 精品盗摄女厕tp美女嘘嘘| 国产成人一二三区| 首页国产欧美久久| 91 视频免费观看| 久久精品人人做人人综合| 久久久久99精品成人片试看| 欧美视频在线观看 亚洲欧| 国产又黄又猛又爽| 亚洲美女性生活视频| 福利视频在线| 国产精品va在线| 亚洲人成网77777色在线播放| 精品少妇人妻av一区二区| 免费看的黄色欧美网站| 无码人妻少妇色欲av一区二区| 久久亚洲一级片| 清纯粉嫩极品夜夜嗨av| 欧美日韩国产中文字幕 | 亚洲国产精品一区制服丝袜| 狠狠躁狠狠躁视频专区| 成人精品视频一区| 少妇愉情理伦三级| 色综合久久久久久久久| 亚洲av无码国产精品永久一区| 国产亚洲美女久久| 神马久久午夜| av成人观看| 久久综合av| 国产特级黄色大片| 成人91在线观看| 九九久久免费视频| 欧美日本在线播放| 免费国产在线观看| 亚州国产精品久久久| 日韩免费成人| 91免费视频黄| 久草精品在线观看| 永久免费观看片现看| 在线影院国内精品| 免费在线黄色电影| 91国产一区在线| 国语精品视频| 免费的av在线| 国产精品69久久久久水密桃| 亚洲视频重口味| 欧美体内she精视频| 韩国免费在线视频| 国产成人高潮免费观看精品| 狠狠色丁香婷婷综合影院| 日本a级片免费观看| 91视频国产资源| 亚洲 欧美 日韩 综合| 亚洲精品国产电影| 欧美裸体视频| 久久天天狠狠| 久久久久国产精品午夜一区| 97人妻精品一区二区免费| 色天使久久综合网天天| 国产午夜在线视频| 国产成人综合亚洲| 激情婷婷综合| 日本一二区免费| 亚洲人成人一区二区在线观看| 国产精品毛片一区二区在线看舒淇 | 日本韩国欧美| 欧美三级网色| 免费看黄色91| 久久精品无码一区| 在线综合亚洲欧美在线视频| 爆操欧美美女| 成人做爰www免费看视频网站| 自拍偷拍欧美专区| 俄罗斯黄色录像| 欧美日韩精品中文字幕| 九色视频在线播放| 91久久精品视频| 一区在线免费| 亚洲综合色一区| 欧美日韩高清一区二区三区| 超鹏97在线| 91黄色精品| 日韩在线一区二区三区| 中文字幕美女视频| 欧美精品一区二区在线观看| 亚洲欧洲自拍| 一区二区三区四区视频在线观看| 久久精品国产一区二区三区免费看| 久久综合亚洲色hezyo国产| 日韩电影中文字幕在线观看| 欧美韩国亚洲| 在线观看18视频网站|