亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Java實現(xiàn)MySQL到Excel高效導出與導入:POI與EasyExcel實戰(zhàn)

Java實現(xiàn)MySQL到Excel高效導出與導入:POI與EasyExcel實戰(zhàn) 1. 為什么“數(shù)據(jù)庫到Excel”這個需求值得認真對待但凡做過企業(yè)級應用的人幾乎都繞不開一個場景業(yè)務方跑過來說“能不能把系統(tǒng)里的數(shù)據(jù)導出來給我我要在Excel里做分析”?;蛘叻催^來“我這邊整理了一份Excel能不能批量導入到系統(tǒng)里”。這個需求聽起來簡單得不像個技術(shù)問題但真正動過手的人都知道從MySQL到Excel的導出與導入坑遠比想象中多。我做過不少類似的項目從最早用JDBC拼字符串生成CSV到后來用POI直接寫xlsx再到用EasyExcel處理百萬行級別的數(shù)據(jù)每一次都在踩坑中積累經(jīng)驗。這篇文章就把我這些年在這個場景下積累的東西完整梳理一遍從方案選型、核心實現(xiàn)、性能優(yōu)化到常見問題排查盡量做到你拿著就能用。先說清楚這個內(nèi)容適合誰看如果你是一個Java后端開發(fā)者手頭有MySQL數(shù)據(jù)庫需要實現(xiàn)數(shù)據(jù)的Excel導出和導入功能不管你是剛?cè)胄械男率诌€是有一定經(jīng)驗的工程師這篇文章都能給你提供可直接參考的方案。我會從最基礎的實現(xiàn)講起逐步深入到性能優(yōu)化和異常處理中間會穿插大量實際項目中總結(jié)的經(jīng)驗和注意事項。核心關鍵詞就幾個Java、MySQL、Excel、導出、導入、Apache POI、EasyExcel。這些詞會貫穿全文但我不會為了堆砌而堆砌每個技術(shù)點的出現(xiàn)都是因為實際需要。2. 方案選型用什么庫、走什么路線2.1 主流Excel處理庫對比Java生態(tài)里處理Excel的庫不算多主流的就是那么幾個。我整理了一個對比表格方便你根據(jù)自己項目的實際情況做選擇庫名稱優(yōu)勢劣勢適用場景Apache POI功能最全支持xls和xlsx社區(qū)成熟API偏底層代碼量大內(nèi)存占用高復雜格式、圖表、公式等高級需求EasyExcelAPI簡潔內(nèi)存占用低適合大數(shù)據(jù)量功能相對POI少一些復雜格式支持有限大數(shù)據(jù)量導入導出格式要求不極端JXL輕量API簡單只支持xls已停止維護老項目維護新項目不推薦CSV方案極簡無依賴性能最好不支持格式、多sheet編碼問題多純數(shù)據(jù)交換無格式要求我個人的選擇邏輯是這樣的如果數(shù)據(jù)量在10萬行以內(nèi)格式要求不高直接用EasyExcel如果數(shù)據(jù)量超過50萬行優(yōu)先考慮EasyExcel的流式處理或者CSV方案如果業(yè)務方要求復雜的表頭合并、單元格樣式、公式計算那就老老實實用Apache POI。這里要特別說一個誤區(qū)很多人覺得POI性能差就完全不用其實POI的SXSSF模式流式寫入在處理大數(shù)據(jù)量時表現(xiàn)也不差只是API用起來確實比EasyExcel啰嗦不少。2.2 導出方案的核心考量導出這個方向核心要解決的問題就三個數(shù)據(jù)量、格式要求、響應方式。數(shù)據(jù)量決定了你用哪種寫入模式。POI的XSSF模式是把整個工作簿放在內(nèi)存里10萬行以上就可能OOMSXSSF模式是流式寫入只在內(nèi)存里保留一定行數(shù)默認100行適合百萬級數(shù)據(jù)。EasyExcel底層也是基于流式寫入的思路但封裝得更好用。格式要求決定了你選哪個庫。如果只是簡單的表頭加數(shù)據(jù)行EasyExcel足夠如果需要合并單元格、設置條件格式、插入圖片那POI是唯一選擇。響應方式?jīng)Q定了你的接口設計。如果是同步導出用戶點擊按鈕后等待文件生成然后下載那要注意HTTP超時和內(nèi)存控制如果是異步導出生成文件后存到文件服務器再通知用戶下載那要考慮文件清理和并發(fā)控制。2.3 導入方案的核心考量導入比導出更復雜因為你要處理用戶輸入的不確定性。用戶可能傳一個空文件、可能傳一個格式不對的文件、可能傳一個列順序亂掉的文件、可能傳一個包含非法字符的文件。導入功能的核心不是“讀Excel”而是“校驗和容錯”。我的經(jīng)驗是導入功能至少要考慮以下幾層校驗文件格式校驗是不是xlsx/xls、文件大小校驗防止惡意大文件、表頭校驗列名和順序是否匹配、數(shù)據(jù)類型校驗數(shù)字列是不是數(shù)字、業(yè)務規(guī)則校驗必填項、唯一性、關聯(lián)關系。每一層校驗都要給用戶明確的錯誤提示最好能定位到具體是哪一行哪一列出了問題。3. 從MySQL導出到Excel的完整實現(xiàn)3.1 環(huán)境準備與依賴引入先假設你用的是Maven項目需要引入的依賴如下。這里我同時給出POI和EasyExcel的依賴你可以根據(jù)實際選型決定用哪個!-- Apache POI 核心依賴 -- dependency groupIdorg.apache.poi/groupId artifactIdpoi/artifactId version5.2.3/version /dependency dependency groupIdorg.apache.poi/groupId artifactIdpoi-ooxml/artifactId version5.2.3/version /dependency !-- EasyExcel 依賴 -- dependency groupIdcom.alibaba/groupId artifactIdeasyexcel/artifactId version3.3.2/version /dependency !-- MySQL 驅(qū)動 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency注意POI 5.x版本和4.x版本在API上有一些差異網(wǎng)上很多老教程用的是4.x的寫法直接復制可能會編譯報錯。建議統(tǒng)一用5.x版本API更穩(wěn)定。數(shù)據(jù)庫連接池我推薦用HikariCPSpring Boot項目默認就是它這里不展開。關鍵是要確保你的數(shù)據(jù)源配置里fetchSize設置合理導出大數(shù)據(jù)量時這個參數(shù)直接影響內(nèi)存占用。3.2 基于POI的導出實現(xiàn)先看一個最基礎的POI導出實現(xiàn)把MySQL中的一張表導出為xlsx文件。假設我們有一張用戶表字段包括id、name、email、create_timepublic void exportWithPoi(Connection conn, String outputPath) throws Exception { String sql SELECT id, name, email, create_time FROM user; try (PreparedStatement ps conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { // 關鍵設置流式讀取結(jié)果集避免一次性加載所有數(shù)據(jù)到內(nèi)存 ps.setFetchSize(Integer.MIN_VALUE); // MySQL驅(qū)動需要設置為流式模式 ps conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); ps.setFetchSize(Integer.MIN_VALUE); try (ResultSet rs ps.executeQuery(); SXSSFWorkbook workbook new SXSSFWorkbook(100)) { // 內(nèi)存中保留100行 Sheet sheet workbook.createSheet(用戶數(shù)據(jù)); // 創(chuàng)建表頭 Row headerRow sheet.createRow(0); String[] headers {ID, 姓名, 郵箱, 創(chuàng)建時間}; for (int i 0; i headers.length; i) { Cell cell headerRow.createCell(i); cell.setCellValue(headers[i]); } // 填充數(shù)據(jù) int rowIndex 1; while (rs.next()) { Row row sheet.createRow(rowIndex); row.createCell(0).setCellValue(rs.getLong(id)); row.createCell(1).setCellValue(rs.getString(name)); row.createCell(2).setCellValue(rs.getString(email)); Timestamp ts rs.getTimestamp(create_time); if (ts ! null) { row.createCell(3).setCellValue( new SimpleDateFormat(yyyy-MM-dd HH:mm:ss).format(ts)); } } // 寫入文件 try (FileOutputStream fos new FileOutputStream(outputPath)) { workbook.write(fos); } // 清理臨時文件 workbook.dispose(); } } }這段代碼有幾個關鍵點需要解釋。第一SXSSFWorkbook的構(gòu)造參數(shù)100表示內(nèi)存中只保留100行數(shù)據(jù)超出的部分會寫入臨時文件這樣即使導出100萬行也不會OOM。第二ps.setFetchSize(Integer.MIN_VALUE)是MySQL驅(qū)動特有的流式讀取設置不加這個的話驅(qū)動會一次性把所有結(jié)果集加載到內(nèi)存數(shù)據(jù)量大時同樣會OOM。第三workbook.dispose()一定要調(diào)用否則臨時文件不會被清理磁盤空間會被慢慢吃掉。3.3 基于EasyExcel的導出實現(xiàn)同樣的需求用EasyExcel來實現(xiàn)會簡潔很多。先定義一個數(shù)據(jù)對象Data public class UserExcelDTO { ExcelProperty(ID) private Long id; ExcelProperty(姓名) private String name; ExcelProperty(郵箱) private String email; ExcelProperty(創(chuàng)建時間) DateTimeFormat(yyyy-MM-dd HH:mm:ss) private Date createTime; }然后導出邏輯public void exportWithEasyExcel(Connection conn, String outputPath) throws Exception { String sql SELECT id, name, email, create_time FROM user; try (PreparedStatement ps conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)) { ps.setFetchSize(Integer.MIN_VALUE); try (ResultSet rs ps.executeQuery()) { // 構(gòu)建數(shù)據(jù)列表實際項目中建議分批查詢避免一次性加載 ListUserExcelDTO dataList new ArrayList(); while (rs.next()) { UserExcelDTO dto new UserExcelDTO(); dto.setId(rs.getLong(id)); dto.setName(rs.getString(name)); dto.setEmail(rs.getString(email)); dto.setCreateTime(rs.getTimestamp(create_time)); dataList.add(dto); } EasyExcel.write(outputPath, UserExcelDTO.class) .sheet(用戶數(shù)據(jù)) .doWrite(dataList); } } }EasyExcel的代碼量明顯少很多而且ExcelProperty注解直接定義了表頭DateTimeFormat處理了日期格式化非常直觀。但要注意上面這種寫法是把所有數(shù)據(jù)先加載到List里再寫入數(shù)據(jù)量特別大時內(nèi)存會有壓力。EasyExcel也支持分批寫入后面性能優(yōu)化部分會講。3.4 導出功能的接口設計實際項目中導出通常是一個HTTP接口。這里給出一個Spring Boot的Controller示例GetMapping(/export/users) public void exportUsers(HttpServletResponse response) throws IOException { response.setContentType(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet); response.setCharacterEncoding(utf-8); String fileName URLEncoder.encode(用戶數(shù)據(jù), UTF-8).replaceAll(\\, %20); response.setHeader(Content-Disposition, attachment;filename*utf-8 fileName .xlsx); // 使用EasyExcel直接寫入response的輸出流 EasyExcel.write(response.getOutputStream(), UserExcelDTO.class) .sheet(用戶數(shù)據(jù)) .doWrite(queryUserList()); }提示文件名一定要做URL編碼否則中文文件名在部分瀏覽器上會亂碼。filename*utf-8這種寫法是RFC 5987規(guī)定的兼容性最好。4. 從Excel導入到MySQL的完整實現(xiàn)4.1 導入功能的設計思路導入功能我一般會拆成三個階段解析階段、校驗階段、入庫階段。解析階段負責把Excel文件讀成Java對象列表校驗階段負責檢查數(shù)據(jù)的合法性入庫階段負責批量寫入數(shù)據(jù)庫。這三個階段分開的好處是每個階段都可以獨立處理異常給用戶精確的錯誤反饋。解析階段用EasyExcel的監(jiān)聽器模式是最合適的因為它支持逐行讀取不需要一次性加載整個文件。校驗階段可以定義一個校驗器接口針對不同的業(yè)務規(guī)則實現(xiàn)不同的校驗邏輯。入庫階段用JDBC的批量插入配合事務控制。4.2 基于EasyExcel的導入實現(xiàn)先定義一個導入用的監(jiān)聽器public class UserImportListener extends AnalysisEventListenerUserExcelDTO { private static final int BATCH_SIZE 500; private ListUserExcelDTO batchList new ArrayList(BATCH_SIZE); private ListString errorMessages new ArrayList(); private int rowIndex 1; // 從第2行開始是數(shù)據(jù)第1行是表頭 private UserService userService; public UserImportListener(UserService userService) { this.userService userService; } Override public void invoke(UserExcelDTO data, AnalysisContext context) { rowIndex; // 單行校驗 String error validateRow(data); if (error ! null) { errorMessages.add(第 rowIndex 行 error); return; } batchList.add(data); // 達到批次大小就入庫 if (batchList.size() BATCH_SIZE) { saveBatch(); } } Override public void doAfterAllAnalysed(AnalysisContext context) { // 處理最后一批 if (!batchList.isEmpty()) { saveBatch(); } } private void saveBatch() { try { userService.batchInsert(batchList); } catch (Exception e) { errorMessages.add(批次入庫失敗 e.getMessage()); } batchList.clear(); } private String validateRow(UserExcelDTO data) { if (data.getName() null || data.getName().trim().isEmpty()) { return 姓名不能為空; } if (data.getEmail() null || !data.getEmail().matches(^[\\w.-][\\w.-]\\.[a-zA-Z]{2,}$)) { return 郵箱格式不正確; } return null; } public ListString getErrorMessages() { return errorMessages; } }調(diào)用方式public ImportResult importUsers(MultipartFile file) throws IOException { UserImportListener listener new UserImportListener(userService); EasyExcel.read(file.getInputStream(), UserExcelDTO.class, listener) .sheet() .doRead(); ImportResult result new ImportResult(); result.setSuccessCount(/* 成功條數(shù) */); result.setErrorMessages(listener.getErrorMessages()); return result; }這個實現(xiàn)有幾個值得注意的地方。第一BATCH_SIZE設為500是一個經(jīng)驗值太小會導致頻繁的數(shù)據(jù)庫交互太大會占用過多內(nèi)存500到1000之間比較合適。第二錯誤信息記錄了具體的行號用戶拿到反饋后可以直接定位到Excel中的問題行。第三doAfterAllAnalysed方法里處理最后一批數(shù)據(jù)這個容易被遺漏。4.3 批量入庫的SQL優(yōu)化批量插入的性能差異非常大我做過測試逐條插入和批量插入在1萬條數(shù)據(jù)上的耗時差距可以達到幾十倍。下面是批量插入的示例public void batchInsert(ListUserExcelDTO list) { String sql INSERT INTO user (name, email, create_time) VALUES (?, ?, ?); try (Connection conn dataSource.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { conn.setAutoCommit(false); for (UserExcelDTO dto : list) { ps.setString(1, dto.getName()); ps.setString(2, dto.getEmail()); ps.setTimestamp(3, new Timestamp(dto.getCreateTime().getTime())); ps.addBatch(); } ps.executeBatch(); conn.commit(); } catch (SQLException e) { // 異常處理 } }注意MySQL的JDBC連接URL上要加上rewriteBatchedStatementstrue參數(shù)否則addBatch()和executeBatch()不會真正合并成一條SQL性能提升非常有限。這個參數(shù)是MySQL驅(qū)動特有的優(yōu)化開關很多人不知道。4.4 導入功能的容錯設計導入功能最怕的就是用戶傳了一個亂七八糟的文件然后系統(tǒng)拋出一堆看不懂的異常。我的做法是在解析之前先做一輪文件級別的校驗public void validateFile(MultipartFile file) { if (file.isEmpty()) { throw new BusinessException(文件不能為空); } String fileName file.getOriginalFilename(); if (fileName null || (!fileName.endsWith(.xlsx) !fileName.endsWith(.xls))) { throw new BusinessException(只支持xlsx和xls格式的文件); } if (file.getSize() 10 * 1024 * 1024) { throw new BusinessException(文件大小不能超過10MB); } }然后在解析過程中對于格式錯誤、類型轉(zhuǎn)換失敗等異常EasyExcel會拋出ExcelAnalysisException需要捕獲并轉(zhuǎn)換成用戶能理解的提示。我一般會自定義一個異常處理器EasyExcel.read(inputStream, UserExcelDTO.class, listener) .registerConverter(new CustomStringConverter()) .sheet() .doRead();自定義Converter可以處理一些特殊的數(shù)據(jù)轉(zhuǎn)換場景比如把Excel中的“是/否”轉(zhuǎn)換成Java的Boolean或者把“2024/1/1”這種非標準日期格式解析成Date對象。5. 性能優(yōu)化與大數(shù)據(jù)量處理5.1 導出性能優(yōu)化的幾個關鍵點大數(shù)據(jù)量導出核心就一個字流。從數(shù)據(jù)庫查詢到Excel寫入整條鏈路都要做到流式處理不能在任何環(huán)節(jié)把全量數(shù)據(jù)加載到內(nèi)存。數(shù)據(jù)庫層面前面提到的setFetchSize(Integer.MIN_VALUE)是必須的。但這里有個坑MySQL驅(qū)動在流式讀取模式下同一個連接不能同時執(zhí)行其他查詢否則會報“Streaming result set is still active”的錯誤。所以導出操作最好使用獨立的數(shù)據(jù)庫連接不要和業(yè)務查詢共用。Excel寫入層面POI的SXSSF模式已經(jīng)做了流式處理但要注意SXSSFWorkbook的構(gòu)造參數(shù)不要設得太大100到1000之間比較合適。設得太大內(nèi)存占用高設得太小臨時文件IO頻繁。還有一個容易被忽略的點是單元格樣式的創(chuàng)建。POI中每創(chuàng)建一個CellStyle都會占用內(nèi)存如果每行都創(chuàng)建新樣式數(shù)據(jù)量大時內(nèi)存會暴漲。正確的做法是把樣式創(chuàng)建在循環(huán)外面所有行復用同一個樣式對象CellStyle style workbook.createCellStyle(); Font font workbook.createFont(); font.setBold(true); style.setFont(font); // 在循環(huán)外面創(chuàng)建循環(huán)里面復用 for (int i 0; i headers.length; i) { Cell cell headerRow.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(style); // 復用樣式 }5.2 導入性能優(yōu)化的幾個關鍵點導入的性能瓶頸通常在數(shù)據(jù)庫寫入上。除了前面說的批量插入和rewriteBatchedStatementstrue還有幾個優(yōu)化點第一關閉自動提交。每次executeBatch()之前手動setAutoCommit(false)批量執(zhí)行完再commit()可以減少事務開銷。第二合理設置批次大小。我實測下來500到1000條一批比較均衡。批次太小數(shù)據(jù)庫交互頻繁批次太大內(nèi)存占用高且單次事務時間長。第三使用多線程解析。EasyExcel支持多線程讀取但要注意線程安全問題。如果業(yè)務允許可以把Excel按行拆分成多個片段用線程池并行解析和入庫。不過這個方案實現(xiàn)復雜度較高數(shù)據(jù)量不是特別大的話沒必要。第四數(shù)據(jù)庫連接池配置。導入操作會占用數(shù)據(jù)庫連接較長時間連接池的maxPoolSize要設置合理避免導入操作把連接池占滿導致其他業(yè)務請求無法處理。5.3 內(nèi)存監(jiān)控與OOM預防大數(shù)據(jù)量導出最容易出的問題就是OOM。除了用流式處理還建議在代碼里加一些內(nèi)存監(jiān)控的邏輯Runtime runtime Runtime.getRuntime(); long usedMemory runtime.totalMemory() - runtime.freeMemory(); if (usedMemory runtime.maxMemory() * 0.8) { // 內(nèi)存使用超過80%觸發(fā)GC或者暫停處理 System.gc(); // 如果還是高考慮分批處理或者拋出提示 }當然System.gc()只是建議JVM執(zhí)行GC不保證立即執(zhí)行。更可靠的做法是在JVM啟動參數(shù)里設置合理的堆大小和GC策略比如-Xmx2g -Xms2g -XX:UseG1GC。6. 常見問題與排查技巧實錄6.1 導出常見問題速查表問題現(xiàn)象可能原因解決方案導出文件打不開提示損壞輸出流未正確關閉或?qū)懭氩煌暾_保workbook.write()后正確關閉流使用try-with-resources中文文件名亂碼未做URL編碼使用URLEncoder.encode()并設置正確的Content-Disposition導出數(shù)據(jù)量大了就OOM使用了XSSFWorkbook或未設置fetchSize改用SXSSFWorkbook設置setFetchSize(Integer.MIN_VALUE)日期格式不對未設置日期格式或時區(qū)問題使用DateTimeFormat注解或手動SimpleDateFormat導出速度特別慢逐條查詢數(shù)據(jù)庫或頻繁創(chuàng)建樣式批量查詢樣式復用使用流式寫入數(shù)字變成了科學計數(shù)法Excel自動格式化設置單元格格式為文本或使用BigDecimal并設置DataFormat6.2 導入常見問題速查表問題現(xiàn)象可能原因解決方案讀取不到數(shù)據(jù)表頭行號設置錯誤檢查headRowNumber參數(shù)默認是1日期解析失敗Excel中的日期格式不標準自定義Converter處理多種日期格式數(shù)字精度丟失Excel中數(shù)字被存為double使用String接收再轉(zhuǎn)換或使用BigDecimal批量插入慢未開啟rewriteBatchedStatementsJDBC URL添加該參數(shù)部分數(shù)據(jù)入庫失敗未做事務控制使用事務失敗時回滾或記錄錯誤行內(nèi)存溢出一次性讀取所有數(shù)據(jù)使用監(jiān)聽器模式逐行讀取分批入庫6.3 幾個我踩過的坑第一個坑MySQL流式讀取的副作用。前面提到setFetchSize(Integer.MIN_VALUE)可以實現(xiàn)流式讀取但很多人不知道的是在流式讀取模式下如果結(jié)果集沒有讀完就關閉了StatementMySQL驅(qū)動會拋出異常。所以一定要確保ResultSet被完整遍歷或者正確關閉。第二個坑EasyExcel的并發(fā)寫入問題。EasyExcel的doWrite()方法不是線程安全的如果多個線程同時往同一個文件寫入會出現(xiàn)數(shù)據(jù)錯亂。如果確實需要并發(fā)導出每個線程應該寫入不同的文件最后再合并。第三個坑Excel的單元格類型判斷。用POI讀取Excel時cell.getCellType()返回的類型可能和預期不一致。比如用戶輸入的數(shù)字“123”Excel可能存為NUMERIC類型也可能存為STRING類型。穩(wěn)妥的做法是用DataFormatter來統(tǒng)一處理DataFormatter formatter new DataFormatter(); String value formatter.formatCellValue(cell);第四個坑大文件導入時的超時問題。如果導入的文件很大HTTP請求可能會超時。解決方案是把導入操作改成異步的用戶上傳文件后立即返回一個任務ID后臺異步處理用戶通過任務ID查詢進度和結(jié)果。第五個坑Excel中的空行處理。用戶可能在數(shù)據(jù)末尾留了很多空行EasyExcel默認會跳過完全空白的行但如果空行中有格式比如邊框就可能被當成有效數(shù)據(jù)。建議在監(jiān)聽器的invoke()方法里加一個判斷如果所有字段都為空就跳過。7. 一些進階思路與擴展方向7.1 動態(tài)表頭與多Sheet導出實際項目中經(jīng)常遇到需要動態(tài)生成表頭的場景比如用戶可以選擇導出哪些字段。EasyExcel支持動態(tài)表頭ListListString head new ArrayList(); head.add(Collections.singletonList(ID)); head.add(Collections.singletonList(姓名)); // 根據(jù)用戶選擇動態(tài)添加 EasyExcel.write(outputPath) .head(head) .sheet(數(shù)據(jù)) .doWrite(dataList);多Sheet導出也很簡單多次調(diào)用sheet()方法即可ExcelWriter writer EasyExcel.write(outputPath).build(); WriteSheet sheet1 EasyExcel.writerSheet(0, 用戶數(shù)據(jù)).head(UserExcelDTO.class).build(); WriteSheet sheet2 EasyExcel.writerSheet(1, 訂單數(shù)據(jù)).head(OrderExcelDTO.class).build(); writer.write(userList, sheet1); writer.write(orderList, sheet2); writer.finish();7.2 導入時的數(shù)據(jù)去重與更新策略導入數(shù)據(jù)時經(jīng)常需要處理“已存在的數(shù)據(jù)是更新還是跳過”的問題。我的做法是在校驗階段查詢數(shù)據(jù)庫根據(jù)業(yè)務主鍵判斷數(shù)據(jù)是否已存在然后分別走插入或更新邏輯。批量場景下可以先把所有主鍵查出來放到一個Set里避免逐條查詢數(shù)據(jù)庫。7.3 導出文件的存儲與清理如果是異步導出生成的文件需要臨時存儲。我一般會在服務器上建一個臨時目錄文件名用UUID避免沖突然后設置一個定時任務定期清理超過24小時的文件。如果文件比較大還可以考慮壓縮后再提供下載。8. 個人經(jīng)驗總結(jié)做了這么多導出導入的功能我最大的體會是這個看似簡單的需求實際上考驗的是你對整個數(shù)據(jù)鏈路的掌控能力。從數(shù)據(jù)庫查詢、內(nèi)存管理、Excel寫入、HTTP響應到異常處理每一個環(huán)節(jié)都可能出問題。如果讓我給新手一個建議那就是先用最簡單的方案把功能跑通然后再根據(jù)實際的數(shù)據(jù)量和性能要求逐步優(yōu)化。不要一上來就追求完美方案很多時候業(yè)務方的數(shù)據(jù)量根本沒那么大過度設計反而增加了維護成本。另外導入功能的錯誤提示一定要做得足夠友好。用戶傳了一個有問題的文件你要告訴他具體是哪一行哪一列出了什么問題而不是拋一個“系統(tǒng)異?!本屯晔铝?。這一點在實際項目中得到的正面反饋最多也是最容易被開發(fā)者忽略的地方。最后分享一個小技巧在導出功能的測試階段可以用LIMIT子句限制查詢條數(shù)先驗證格式和邏輯是否正確確認無誤后再去掉限制做全量導出。這樣可以避免每次測試都等待大量數(shù)據(jù)查詢和寫入的時間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
中文字幕永久在线| 99黄页网站| 最新亚洲黄色免费电影| 91N综合网在线| 啊啊啊啊啊在线观看网址 | 青青草在线成人视频| 高清无码一区二区三区| 久草新在线| 国产美女91视频| 国产 无码 一区二区| 操一对老熟妇爽上天视频| 高树玛利亚无码流出| 偷拍自拍在线视频观看| 97久久网| 97在线视频观看免费| 激情四射婷婷四五月天| 网页导航五月天免费一二三区| 天天拍夜夜| 91成人国产综合久久精品蜜月| 国产97视频免费观看| 干超碰碰熟女| 東南亚性呦成人伦理资源在线视频| 亚欧中文字幕在线视频| 色婷婷视频| 九九热超碰| 日本久久女同性恋视频| 人妻精品综合中文字幕在线| 人妻9117c| 91 亚欧| 欧美亚洲丝袜人妻制服99| 3p国产色噜噜一区| 欧美人妻精品一区二区| 黄色一区三区| 自拍偷拍草一草| 国产一区二区三区久久精品太古里| 免费一级黄色录像影片| 青青三级视频| 久久久男人的天堂| 亚洲天堂 视频你懂的| 日韩精品.久久精品.AV女优.天美传媒| 亚洲操人| 18岁禁 茉莉成人久久| 激情文学网伊人| 欧美性生活内射| 人爽不卡视频| 97精品97| 青青草在线视频播放器| 精品久久99| 加勒比五月天| 亚洲黄色网址视频| 激情黄色五月天| 久操热| 人妻丝袜日本| 荡小穴在线观看| 狠狠操狠狠操操| 蜜臀少妇一区二区| 97香蕉网| 蜜桃精品视频一区| 久久精彩视频| 亚洲精品性爱片| 亚洲性少妇| 图片区小说区| 97亚洲在线| 成人无码专区精品视频| 国产亚洲精品第一最新| 美女啊啊啊啊啊| 超碰97资源中文字幕| 十八禁成人网站在线观看| 啊啊在线| 亚洲色91C| 探花在线免费观看视频国产一区| 日本不卡一二区| 97内射偷拍| 秋霞免费AV| 97爱爱| 亚洲一区亚洲天堂| 中文字幕乱码人妻一区二区三区,99精品 | 亚洲蜜乳av| 78精品在线| 男人的天堂成人的社区| 丁香九月激情啪| 91日韩网站| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 99国产在线 精品 视频| 人人操人人色网| 男人的天堂无码| 极品出轨视频网站| 亚洲性爱电影| AV一起草在线| 啊啊啊啊啊在线| 97操在线| 东北女人操比视频| 天天摸天天插天天日| 乱伦图av| 亚洲人妻中文在线视频| 久久少妇人妻| 2019久久久久久久久福利| 熟妇色99| 日本曲间由美性生活片| 在线观看av区| 亚洲成人性爱网站在线播放| 操B久久| 丁香婷婷色五月| 国产极品粉嫩馒头一线天av| 色天使亚洲综合在线观看| 欧美色图亚洲色| 午夜福利在线合集| 情色五月天网| 啊啊啊啊啊好大好舒服想要| 91啪9色| 丁香色婷婷| 国产精品久久久久久片| 97中文字幕色| 无码一区二区三区四区五区六区七区八区九区十区视频 | 激情久久av一区av二区av| 一级做a爰片性色毛片久久| 国产路线专区| 亚洲久久久| 91操熟女| 97超碰久久| 欧美综合1性辶| 97国产精品久久久久| 精品999日本| 九热大香蕉| 色噜噜人妻av 中文字幕| 久久久久久亚洲精品不卡人乳| 蜜乳AV网址| 十八禁视频网站| 操逼片中文| 中文字幕日韩人妻视频一区二区三区| 翔田千里一区二区三区奶水| 男女激情黄色网址| 综合欧美日本三级| 久久婷婷五月天| 图片区小说区| 九九热在线精品视频| 九九伊人网| 五月天婷婷影院| 五月激情在线| 亚洲熟妇丝袜在线观看| 9ⅰ久久久天天| 久偷拍欧美日韩三区| 精品乱码久久久久| 国内精品久9| 麻豆熟妇乱妇熟色A片在线看 | 亚洲。日韩。欧美| 日韩78m视频| 国产和美国毛片| 中文字幕av一区二区三区人妻少妇| 97欧美久久久久久久| 久草精品在线| 久久精品国产亚洲AV清纯| 无码久久亚洲高清,| 成人影院永久免费观看网址| 91丨九色丨熟女高潮| 99久热| 人妻天天操天天爽视频免费| 欧美亚洲国产日本在线,久久精品国产| 97丝袜亚洲在线播放| 成人怡红院| 蜜臀久久99精品久久久久久-DVD | 好爽,再快点啊哈嗯嗯嗯嗯| 日本一片一区| 女人18精品一区二区三区| 久久久性爱| 老司机深夜18禁污污网站| 爽极品影院| 色999;丁香五月| 欧美黄片免费在线观看视频| 欧美日韩免费性爱| 久久久无码国精品无码三区三区| 大香蕉啪啪网| 亚洲男人的天堂一区二区| 欧美美女后入| 国产精品一区二区手机看片| 久久久亚洲熟妇熟女| 秋霞一级A片黄色视频| 韩国三级理论在线| 台湾大香蕉99热| 蜜臀99久久精品久久久久久| 天堂中文日本在线观看| 黄总AV色图| 日韩欧美天堂| 91视频伊人| 色墦五月丁香| 殴美色网| 人人插人人摸人人| 久热精品色情| 99在线观看| 秋霞男人网| …中文字幕亚洲乱,97人妻无码费视… | 免费看黄片现成| 国产免费一区二区在线A片视频| 色噜噜人妻丝袜a∨先锋影| 久久久久9久久久久| 国产免费一区| 九月激情婷婷| 欧美午夜色妇色鬼| 五月婷亚洲精品天堂| 日韩AV熟女乱伦| 国产精品一区二区后入| 亚洲国产尤物yw在线观看| 毛片视频白嫩| 韩国一级做a久久久久| 26uuu国产| 91老熟女91老女人| 丁香六月婷婷| 超碰97护士| 日韩一级片| 欧美中字不卡| 午夜爽爽爽在线观看永久入口姬片| 亚州色站 日韩电影| 国产精品网址| 在线天堂999| 日韩在线观看三级电影| 韩国久久97| 欧美大的香蕉有线电视视频 | 天堂精品| 精品国产一区二区三区四区在线看| 91中文在线| 久久久91| 97超碰69| 大香蕉狠狠爱| 国产午夜无码片在线观看影视| 欧美一区二区三区大综合| 91精品国产91久久青草| 91狠狠综合久久久久久| 97精| 亚洲精品欧美专业| av天堂精品久久| 欧美国产视频| 黄色av片三级三级三级免费看| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 久草国产在线视频| 国产精品粉嫩福利在线| 亚洲综合色男人网| 天天看天天干| 大香蕉色欲AV| 99ri在线视频| 久久中文字幕一区不卡| 国产欧美日产一区二区三区 - 国产欧美日| 久草国产在线视频| 日韩射图| 九九九九精品一区| 婷婷丁香久久| 视频国产成人精品日本亚洲18| 热久久99999| 亚洲欧美中文一区二区三| 亚洲日韩97| 五月香婷婷| 亚洲av噜噜噜噜噜噜| 蜜臀99999| 99久久久久久久久| 色香AV| 99黄页网站| 天天干天天狼在线视频| CCYY草草影院地址入口| 情色大香蕉| 欧美综合在线91| 男女激情黄色网址| 精品久久久久久无码| 伊人在线大香蕉视频久久| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 97色视频在线| 久碰视频| 中文字幕精品日韩中文字幕| 97免费视频在线| 青春草A| 亚洲乱熟女一区二区三区大香蕉| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 97久久超碰国产精品| 人妻干天天| 热久久无毒不卡| 东京太热久久久| 熟妇人妻丰满久久久久久久无码| 熟女中出视频| 国产一区二区三区导航| 凹凸精品熟女在线观看| 日日干夜夜骑| 白丝少妇一区二区| 1024香蕉视频| 黑人无码一区二区| 另类TS人妖一区二区三区| 97视频播放| 色噜噜人妻丝袜AV资源| 色啪网| 91久久九九精品国产综合| 黄久久| 美女诱惑久久| 自拍亚洲综合| 99在线视频播放| 日本美女性生活久久久久久久 | 福利大香蕉| 亚洲精品天天影视综合网 | 综合九九| 国产人妻精品一区二区三区秋霞| 免费农村成人少妇人妻Aa一区二区视频| 蜜乳av首页| 五月婷网站| www.色吧5.com| 欧美激情区| 色色97爱| 亚洲精品97p| 欧洲精品久久| 一区二区三区四区久久视1| 98色网| 97人人模人人爽人人| 中文字幕交换人妻| 熟女字幕| 性一交一乱一交A片久久四色| 国产亚洲精品美女久久久m| 成人小说视频在线精品欧美| 五月天我淫我色av| 日韩在线欧美精品一区二区| 91丝袜在线观看| 九九热九九| 久久久久久久| 亚洲国产精品无码AV久久久| 欧美精品成人在线播放| 中文字幕一区电影在线观看| 欧美视频一区二区在线| 超碰人人超在线观看| 播播亚洲小说亚洲| 91GD.COM| 婷婷五月花| 97天堂| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 青青操在线视频| 女人香蕉久久毛毛片精品| 国产精品久久久久久久久久久久久久吹 | 国产青一二三| 久久 亚洲 日韩 人妻| 天天干天天中出av| 亚洲色天堂九9| 91欧美经典| 欧美中文字幕精品人妻| 天天躁日日躁AAAAXXXX国产| 欧美大香蕉专区网| 亚洲午夜免费狠狠干| 亚洲情色婷婷五月天| 亚洲色9| 欧美色日| 亚洲人精品久久久| 日韩精品色呦呦| av在线免费一区二区| 操婢日韩| 三级三久久线久久99久目本WW| 精品福利视频| 黑人精品久久97| 在线电影亚洲色图| 天天看天天日天天操| 草草草视频在线免费看| 欧美,日韩,亚洲视频| 色婷婷电影网| 91嫩草欧美| 中文无线日韩一区| 九九AV| 日韩欧美中文日韩欧美色| 99视频在线| 69人妻精品丰满熟女区| 97天天爽| 日本久久网| 男人的天堂欧美| 涩亚洲欧洲| 亚洲综合大片| 成人26uuu| 高跟丝袜AV专区国产| 国产女大学生AV| 熟女五十路一区二区三| 韩国一区二区精品亚洲| 91操熟妇| 亚洲阿v天堂无码z2018| 狼人综合婷婷激情四射 | 国产成人在线观看综合| 啊啊啊不要啊啊受不了了视频在线| 91中文字幕在线观看| 100啪啪视频大全| 青青草日韩无码| 天美传媒av一区二区| 男人的午夜天堂| 久久爽爽精品| 亚洲人成网站7777| 久久精品免费| 97伊人网| 日本综合色图| 快播久久人人aV| 丁香六月激情| 亚洲五区熟女| 九九AV| 国产精品电影大全| 日本三级韩三级99久久| 色香欲天天天天综合色| 性爱乱伦视频免费| 97se综合网| 9久精品| 男人天堂一区二区| 中文字幕乱妇免费视频| 9九九九九视频在线观看| AV色五月| 久操不卡视频| 大香蕉2017| 91精品人妻电影| SUV一区二区在线看| 国产狂喷潮在线精品| 91久久国产综合久久| 亚洲色图欧美色18直播在线| 国模精品一区二区三区苹果色戒| 九九热午夜欧亚国产视频| 日韩国产欧美伦理在线| 超碰538| 精品成人亚洲午夜电影| 在线免费观看高清无码视频| 国产精品免费日韩| 偷拍精品一区二区三区| 欧 美 自 拍 偷 拍| 超碰79人人乐| 天美传媒婬乱在| 男人下部插入女人下部| 欧美亚洲丝袜美女电影| 五月婷婷hd| 久偷拍| 国产乱码精品久久久久久 | 免费观看一区| 一级性爱视频免费观看| 亚洲AV无码黄色强奸| 亚洲国产一级精品毛一级精品看免费视频 | 久久久久久69国产一区二区| 亚洲一区二区三区AV无码| 日韩人妻一区二区精品| 神马视频久久久久久| 熟女中出视频| 久久亚洲不卡| 精品人妻一区二区三区在线视频不卡| 中文字幕 一区二区 亚洲无码| 水多多映视AV| 中文幕97| 四季AV综合网址| 欧美淫乱视频| 78综合网| 国产一级不卡在线观看| 麻豆色约约| 亚洲另类综合欧美| 黄片色区软件| 97干在线视频| av东京热男人的天堂| 婷婷丁香五月激情啪啪| 亚洲网站一区二区在线| 新视频sss国产| 色五月网址| 亚洲最大的综合性av| 波多野42部无码喷潮在线观看| 色乱二区| 熟女熟妇一区二区三四区| 天天干天天舔| 国产亚洲女v在线观看| 91在线丝袜视频| 日本韩欧美在线播放a| 久久久久久精| 五月天人妻综合| 99色婷婷| 强奸乱伦大香蕉| 欧美的精品的视频| 国产粉嫩蜜臀av一区二区三区| 日本高清免费一本视频在线观看| 激情99| 激情四射婷婷六月天| 熟妇xxxxx性春色| 婷婷五月天成人网| 色吧5亚洲| 超碰97最新人妻| 欧美后进式| 日韩免费在线观看不卡| 五月激情视频| 伊人视频| 日韩激情啪啪| 色网综合网| 一本色道久久天天射天天干| 最新加勒比丝袜在线| 中文字幕精品亚洲熟女| 国产懂色精品国产av| 欧美亚洲厕所精品偷拍91| 东北毛片| 亚洲AV秘无码一区..| 丝袜美腿欧美| 91丝袜美女视频| 欧美日韩传媒| 99国产精品人妻人伦| 色逼综合| 青青青草原| 91黄站| 亚洲人天堂| 日韩在线电影| 嗯嗯啊啊啊啊轻点视频| 国产天天骚| 日韩av色图综合| 2020久久免费视频| 97精| 97无码视频在线播放| 黑丝少妇| 亚洲综合九九| 色爱欲亚洲| 中文字幕日韩专区精品系列 | 久久免费精品视频免一| 91操熟女| 狠狠中文字幕| 91精品人妻偷情| 女人的天堂大香蕉网| 国产精品999zyz| 中精品一区二区三区| 人人透人人操| 久肏视频字幕| 亚洲天堂色图| 天天草夜夜草高潮片| 国产成人网站在线观看| 午夜一区| 秋霞男人网| 亚洲无码免费看| 欧美色亚洲色| 嗯……啊…嗯嗯…啊…好舒服| 日韩无码精品综合久久| 国产欧洲精品亚洲午夜拍精品| 极品极品色影院| 东北女人操逼| 欧美人妻另类在线| 大香蕉免| 国产精品无码在线| 97干在线视频| 嗯嗯啊啊的视频| 92福利社视频| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91操熟女视频| 9 7超碰在线免费观看| 欧美日韩在线国产在线| 美女性91| 欧美日韩人妻少妇 一区二区三区| 亚洲免费看片| 97在线精品观看视频| 亚洲男人天堂手机版| 久久仑合| 超碰调教97| 91人人臊| 在线国产福利网址导航| 3PAV乱伦视频| 欧美日韩不卡传媒| 色综合20p| 九一亚洲国产免费| 吻戏激情性巴克| 亚洲中文一区二区三区| 日本淫乱女一区二区三区视频| 欧美高潮在线| 色情五月综合婷婷| 看免费一级在线播放毛片| 伊人麻豆传媒| 成人精品久久| 9999久久久久| 91欧美性| 麻豆国产第一| 综合网久久| www鬼畜国产男人的天堂| 国产精品一区二区黄片| 久久AV无码网址| 成人七区| 亚洲中文国际强奸字幕| 偷拍亚洲熟女视频播放| 日韩黄片影院| 亚洲在线网站| jazzjazz国产精品麻豆| 日本久久女同性恋视频| 亚洲激情深爱文学小说网站| 九9热伊人| 日日日啊啊啊| 91九九九小逼| 狠狠中文字幕| 99综合网| 在线播放成人网站| 国产一区二区三区导航| 1人人看人人摸人人操| 亚洲成人贴图| 91伊人| 亚洲本色精品一区二区久久| 九九热精品视频六| 久久久一二三四区| 国产精品久久久久久9999| 蜜色网色哟哟| 四虎国产精品永久在线囯在线| 涩涩这里只有精品视频| 日日超碰亚洲| 欧美亚洲自拍另类人妻| 天天谢天天干| 97人妻免费中文字幕| 日本操逼视频免费| 亚洲欧洲无码97久久精品| 美女黄色一级A视频| 好淫网一二三视区| 高树玛利亚无码流出| 亚洲av热热色| 天欧美在线| 日1区2区3区2020| 99热一区二区三区四区| 偷拍精品一区二区三区| 女同女同恋久久级三级| 九九综合久久| 91婷婷伊人狠人| 伊人丝袜美腿高跟在线观看高清| 欧美乱伦专区| 啊啊啊啊啊啊好多水| 欧美性xxxxx狂欢| 日本中文字幕在线电影| 在线一道啪| 十八禁成人网站在线观看| 日韩中文字幕二区| 岛国AV一区二区电影| 97 九色| 九九九偷拍| 婷婷久久五月综合激情| 国产 亚洲 丝袜 制服| 大香蕉伊人久久| 久偷拍| 日韩91网| 国产欧美精选自拍一区| aV中文麻| 日韩性爱免费观看视频| 天天操天天日天天干| 亚洲人成网站7777| 精品国产Av无码久久久亚洲| 日本超碰色精品| 91激情国产| 久久国产在线一区二区| 99精品免费| 亚洲色悠悠久久88| 91亚洲欧洲| 亚洲性少妇| a片久久久久久久久久久久| 偷拍自拍在线视频观看| 国产人妻精品久久久一区二区三区| 中文字幕二区日韩天堂| 加勒比av网| 久久精品 六十路 熟女 欧美| 九九色逼| 亚洲校园激情| 日韩中文字幕人妻视频| 91久久精品国产| 99re99在线视频| 色成人Www精品永久观看| 玖玖爱综合| 91精片| 超碰人人色| 嗯嗯啊啊的视频| 久久久精品电影| 99自拍B亚洲 | 国产精品九九| 亚洲精品国产专区在线观看| 乱理日韩中文| 亚洲97| 91麻豆天美国产欧美日| 五月天婷婷社区| 欧美网站免费| 中文字幕欧洲有码| 久久久久九九九| 久久av成人无码免费| 欧美日韩国产电影| 91性高朝久久久久久久久| 久热色情精品| 91色图| 亚洲成人一二三区| 日韩黄片视频试看| 成人小说视频在线精品欧美| 亚洲s在线观看| 精品九九九| 亚洲中文字幕有码视频一区二区三区| 蜜臀久久99精品久久久久久无删减 | A级在线视频| 天堂精品在线| 久久老女人| 久久久久9久久久久| 大学生美女口爆| 曰本精品久久久| 国产精品嫩草影院午夜两性 | 欧美亚洲手机在线| 久久精品免费| 中文字幕精品一区欧美| 五毛骚逼极品美女怕怕| 超碰成人国产| 亚洲情色 欧美| 99999久久久久9国产精品| 欧美日韩在线视频网站| 97精品综合久久网| 综合色99| 伊人天天久久动态图| 欧美日韩理论一区| 国产精品一级特黄aaa大片在线观看| 天天日美女的B| 女同性恋久久| 欧美不在线| 蜜桃传媒一区二区亚洲| 草草影院日本第一页| 四虎影视在线| 国产久久成人| 五月天婷婷影院| 久久丁香五月天| 国产精品高朝久久久久久久| 亚洲无码太久| 日韩99神马视频播放片在线播放| 久久色网| 把腿张开老子CAO烂你| 日日干日日摸| 99热这里是精品| 亚洲熟女中文字幕在线| 综合网色| 96AV久久久| 日日操丁香五月天| 久久久99999久网站| 欧美精品自慰系列寂寞少妇| 综合网欧美| 麻豆 亚洲 97| 国产玖玖| 逼逼逼逼操操操操操操操操操午夜剧场 | 老熟女综合网| 黑丝日韩av丝袜av| 色色丁香| 国产亚洲精品激情| 91性片| 在线 欧美 亚洲| 国产视频三区四区| 国产日韩欧美三级片| 久久国产逼| 欧美精品不卡一二三四在线91| 九一亚洲国产免费| 蜜臀AV网站| 一本色道无码DVD中文字幕| 综合情欲网| 超碰97最新人妻| 懂色AV一区二区三区| 美中日韩无码| 亚洲免费成人在线高清无码视频| 欧美色乱| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 嫩草影院永久在线制服丝袜| 亚殴在线| 成人五月香网在线| 囯产操逼片| 久久亚州精品成人Av无| 女人综合网| 欧美se综合| 久久久成人免费av电影| 激情久久av一区av二区av| 免费?级毛片无码?∨蜜芽试看| 夜夜躁狠狠躁日日躁av| 天天综合网合集91| 欧美18 在线观看| 99在线无码精品秘 入口黑人 | 精品一区二区三区麻豆| 91精品久久久久五月天精品 | 涩涩久久精品| 欧美中文字幕一区 | 亚洲第91页| 草b在线 | SUV一区二区在线看| 日韩精品人妻中文字幕久久久| 炮色五月| 一道本东京热加勒比一区二区三区| 亚洲男人天堂2019| 人人喜人人妻| ,国产乱人伦精品一区二区三区| 九九热精品视频在线观看| 国产原创剧情在线丝袜| 色综合久久888| www.超碰| 插入综合网| 97精品一二区| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 91N综合网在线| 亚洲宗合网| 天天干1区2区在线| 一二三四区电影| 久久男人| 日日超碰亚洲| 操操吧亚洲乱伦视频| 搡老女人老妇女AAA一VU麻豆 | 婷婷丁香五月激情啪啪| 丁香激情网| 97在线免费看| 91色图片| 尤物AV免费网站| 夜夜爽夜夜操| 在线人成亚洲视频免费观看| 精品国产一区二区三区在线播出| 777超碰| 天天综合网亚洲综合网| 五月天色五月| 人妻碰碰碰碰碰碰| 久久精品视频在线观看| 人妻少妇久久中文| 国产精品一区二区三| 91久久国产精品| 性夜影院爽黄A爽免费动漫| 国产女s强制榨精视频| AV不卡在线| 人妻少妇色综合| 欧美大香蕉97| 蜜桃臀一区二区三区久久| 精品免费囯产一区二区三区| 亚洲日韩在线a不卡99精品 | 欧美网站免费| 亚洲 中文 女同| 老女人碰碰在线碰碰视频| 青草地一本线一区二区三区| 国产强奸AV在线| 国产综合网站在线播放 | 婷婷美人网| 欧美激情在线观看视频| 熟妇的味道HD中文字幕| 欧美日韩999| 怡春苑东京热| 熟妇人妻精品一区二区| 国产女人和拘做爰视频| 亚洲激情AV| 欧美伦乱爱| 精品人妻一区二区三区四区| 久久久久久亚洲Av无码| 啪啪一区| 午夜欧美J进J出白浆流出久久久| 性交一区二区在线播放| 亚欧美色| 亚洲四虎熟女精品| 欧亚日韩三区| 欧美一级在线观看成人| 四虎影院成年人片| 欧美在线视频播放| 国产主播福利| 天天做天天爱天天高潮| 日韩一级二级三级免费看完整版国语版| 我想要 啊 啊 啊| 丝袜熟女一区二区三区| 亚洲中文字幕日产无码久久| 啊啊啊想要| 国产在线视视频有精品| 热热热热日日漂亮永久永久国产日| 2017亚洲天堂| 亚洲无码色| 一本一道久久综合久久| 免费一级a毛片久久久久久鸭绿欲| 亚洲精品97在线| 黄色十八禁| av在线观看不卡网站| 久久夜嗨| 91九色蝌蚪在线观看| 久久久久久久78| 久久专区| 久久久99久9| 一区二区视频在看| 色99在线| 91色夜| 丁香色五月 97干| 亚洲天堂久久| 国产AV久久久蜜爱影集| 欧美一品道| 无色无码| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 97色综合中文网| 色色五月天婷婷| 97超碰色屌| 国产精品第一区第一页| 丝袜内射| 另类亚洲一区二区三区| 欧美日韩夜夜| 一区二区影视| 资源在线观一 二| 天天综合中文字幕 91| 综合网欧美在线| 国产精品白丝| 亚洲国产一级中文综合久久天堂在线免费观看 | 狼人狠干| 丝袜狠狠草尤物人妻av91| 国内偷拍精品一区二区| 国产女人高潮视频| 午夜久久久| 9999久久久久| 操逼A∨| 天天综合网入口~91| 性在久久久久久| 久久专区| 岛国片国产成人亚洲播放| 操死我了啊啊啊| 精品成人av一区二区三区在线| 久久久久久久久久久久97| 五月婷婷六月丁香| 妇女性内射冈站HDWWWCOM| 五月天激情四射| 超碰色97| 97天天操天天干| 国模不卡| 激情欧美97| 99天天超碰| 色综合尤物| 99色骚| 爆操无码| 中文字幕在线免费观看2| 青青草国产盗摄一二三区| 双插性欧美一二三区| 999综合色| 99色在线视频| 婷婷av在线中文字幕| 少妇精品久久久八区九区| 2020视频1区2区3区| 一级黄色视频网| 久久久久久久91| 国产第二页| 欧美亚洲综合色| 干干干天天| 青青在线视频日韩欧美| 久久久久9| 欧美熟爽综合| 美女黄频a美女大全免费皮| 国内一区二区免费| 日韩中字av一区| 久久婷婷综合国际产色怕| 爽 好舒服 无码刺激久久| 五月婷婷大香蕉| 国产精品亚洲一区二区三区四区| 极品白嫩美女白浆成人福利在线看| 欧美激情另类一区二区| 超碰综合色| 久操视频资源站公开| 无码伊人久久大杳蕉中文无码| 秋霞一级视频在线观看免费| 成人热久久精品| 欧美久久久| 欧洲一区二区三区四区在线观看| 九九九国产精品| 久久香蕉国产线看观看亚洲女人 | 亚洲女毛多水多21P| 欧美极度丰满熟妇hd| 久久久久久午夜男人的天堂| 美腿色图| 亚洲男人天堂2| 日本男人天堂| 亚洲丝袜诱惑| 久久直播国产| 中文字幕在线日亚州9| 在线视频一区二区传媒| 超碰无码五月97| 亚洲综合九九| 国产精品亚洲天堂网址| 曰韩操B| 97色碰| 全球成人中文在线| 神马视频久久久久久| 99色骚| 国产v亚洲v日韩v欧美v片另类| WWW啪啪的com| 夜夜爽33333| 91丝袜在线视频| 亚洲色图欧美另类在线| 91高潮| 太久视频| 中文字日本乱码| 蜜臀中文无码午夜| 中日韩一区二区三区欧美| 精品一啪| 成人色女网| 亚洲图片91| 蜜乳中文字幕a在线| 免费啪啪啪网站18岁| 啊啊啊啊啊操我视频| 97超碰中文字幕| 你懂的在线观看区国产| 性做久久久久久免费观看软件| 久久久久久夜夜夜夜夜| 精品久久艹| 久久久性| 色综合久久888| 超碰79人人乐| 色五月天AV| 亚洲精品久久久久久| 久久六六| 日韩精品一区的| 久久一二三四不卡 | 久久精品国产97欧美精品亚洲 | 午夜福利av电影在线| 96精品在线| 美女主播色欲91抠b在线播放| 亚洲色婷婷综合久久久久中文| 日韩免费在线观看不卡| 少妇xx精品| 91最新综合| 天天射日日干| 乱色视频中文字幕| 日韩传媒在线| 人人操人人摸人人骑| 色哟哟511老熟女| 又大又白奶子| 欧日韩一二三f区| 亚洲 小说 欧美 激情 另类| 日本一级性爱| 欧美天堂亚洲电影院一区在线播放 | 自拍大香蕉乱插| 亚洲图片 激情小说| av毛片aaaaa免费看| 日本精品五区| 色色热| 久久97超碰| 加勒比在线观看一区二区| 无码抄逼网| 97爱啪| 中文字幕成人理论在线| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 国产乱人妻精品入口| 一级一性爱免费视频| 亚欧国产无码精品在线| 免费视频观看60秒| 欧美日韩国产三级黄色| 超碰在线人妻不卡| 色综合色| 在线精品福利免费播放| 国产色产精品在线观看 | 日本精品中文字幕视频| 碰人碰碰人人开房人肉| 高潮嗯啊性感美女久久久| 国产精品久久久久久无码红治院| 天天碰操中国年青熟妇| 97自拍一区| 国产精品久久久久久久电影渣男| 一本一道人妻久久一区二区三区 | 另类在线| 久久色AV线| 黄色一级视| 久久风骚城市| www.91色| 综合 亚洲 欧美| 91操碰| 蜜臀久久99精品久久久久久婷婷| 精品少妇一区二区三区免费观看| 91欧美综合| 97玖玖人妻| 亚洲性爱免费电影| 欧美 传媒 麻豆 日韩 偷拍| 亚洲图片欧美| 久久久久久久97| 亚洲最大91网| 色女99一级片在线观看| 国产性爱强奸乱伦大全| 大吊色| 操逼999| 综合久久2017| 美腿色图| 377p欧洲日本亚洲大胆| 老女人91| 熟妇在线视频一区二区| 欧美高清18A片| 日本天堂网| 久久在线观看免费视频| 欧美视频激情久久久久久| 睡产熟女乱伦| 亚洲欧美天堂| 天美传媒Av在线| 色色五月婷| 97国产精品视频| 精品久久九| 这里只有精品视频| 在线日韩日本亚洲国产| 蘋果手機免費看成人Av| 日韩在线观看中文字幕视频| 一区二区三区视频| 激情人妻另类| 亚洲天堂中文字幕无码男同| 91社区伊人| 亚洲交换| 欧美爆操91| 国产精品秘 福利姬在线观看| 白丝AV| 国产乱青青草久久| 97超碰色五月| 性色avv| 偷拍精品一区二区三区| 久久久久久久久国产| 亚洲无线码一区国产欧美国| 日本一级真人黄色性爱视频| 国桃视频产巨乳精品一区二区在线| 长长久久免费视频| 久久亚洲欧美中文字幕国语| 啊v在线观看视频| 久久久久斤小| 蜜乳AV一区| 天天情欲宗合网| 超碰av人人人| 日本视频在线观看污污污| 狠狠操使劲操| 超碰4A| 五月天伊人| 屌妞视频久久久久久久久久久久| 97福利视频| 亚洲蜜臀精品视频久久| 国产操逼视频在线观看| 亚洲色图 欧美热图 清纯唯美 另类自拍 | julia国产在线 | 蜜桃精品视频一区二区三区| 美国久久一二三四| 久久亚州高清| 欧美专利1区2区3区4区5区免费| 日韩精品99999| 中国东北熟女老太婆内谢| 96久久久| 黑人干亚洲| 久久夜夜夜| 日日AV加勒比| 刺激性视频黄页| 欧美天天拍| 99精品在线观看| 第四色色综合91| 天天操夜夜操| 九九热免费视频| 黄色av一区二区在线| 久久久久国产精品片区无码直播| 久久九九视频九九视频| 99色热国产视频精品| 日韩卡一卡二卡三在线| 91成人久久 | 国产一区二区a毛片| 欧美成人AⅤ大片在线观看| 亚洲第2页| 超碰成人国产| 九九在线精品| 天天综合日韩网| 精爱久久| 黑人精品久久97| 国内外毛片在线观看| 中文字幕一二三| 久久黄黄| 九色 人妻 大香蕉| 真实高潮91| 天堂伊人久久| 天天综合网亚洲综合网| 欧洲亚洲人妻无码久久三区四区| 深喉吞精| 亚洲天堂精品日韩电影| 欧差乱伦二三| 高清无码在线播放网站| 亚洲色图日韩精品| 99热欧美| 午夜久久一区二区无码中出| 欧美日韩国产男人| 亚洲图片欧美另类综合免费视频大大香| 日韩精品资源| 日韩三级伊人| 国产欧美一级在线观看| 色婷婷亚洲婷婷| 亚洲AV资源| 中字一区| 亚洲97在线观看| 欧美黄色大片在线观看| 天天日天天干天天整| 天综合网| 精品九九九九九九九九九| 33044男人的天堂深夜备| 综合色好色| 日本精品无码三级网站| 亚洲 日本 一 二 三| 欧美亚洲AN| 精品97久久|