99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

SpringBoot手工藝品電商平臺(tái)開發(fā)實(shí)戰(zhàn):從設(shè)計(jì)到部署

SpringBoot手工藝品電商平臺(tái)開發(fā)實(shí)戰(zhàn):從設(shè)計(jì)到部署 簡介本資源是一套完整的基于SpringBoot的手工藝品銷售系統(tǒng)畢業(yè)設(shè)計(jì)項(xiàng)目面向計(jì)算機(jī)專業(yè)本科生及Java全棧初學(xué)者解決課程設(shè)計(jì)選題難、環(huán)境搭建復(fù)雜、前后端聯(lián)調(diào)無參考等實(shí)際痛點(diǎn)。壓縮包共830個(gè)文件含133個(gè)Java后端核心代碼、66個(gè)Vue前端組件、157個(gè)JS交互邏輯、162個(gè)SVG圖標(biāo)資源、79個(gè)GIF動(dòng)效素材及1個(gè)SQL數(shù)據(jù)庫腳本覆蓋用戶管理、商品發(fā)布、購物車、訂單支付與評(píng)論模塊的全鏈路實(shí)現(xiàn)包體大小34.18MB。所有代碼經(jīng)完整測試可直接運(yùn)行并配套詳細(xì)部署文檔與bat一鍵啟動(dòng)腳本如run.bat、install.bat顯著降低環(huán)境配置門檻。學(xué)習(xí)者可快速掌握SpringBootVueMySQL前后端分離開發(fā)范式理解RESTful接口設(shè)計(jì)、JWT鑒權(quán)、MyBatis動(dòng)態(tài)SQL等關(guān)鍵技術(shù)點(diǎn)同時(shí)獲得可直接用于答辯的源碼與論文雙交付成果。1. 項(xiàng)目概述從零到一構(gòu)建一個(gè)手工藝品電商平臺(tái)最近幾年身邊做獨(dú)立設(shè)計(jì)、手工創(chuàng)作的朋友越來越多從陶藝、皮具到編織、木工大家手里都有不少好作品。但一個(gè)普遍的問題是很多人精于手藝卻苦于沒有一個(gè)合適的線上渠道去展示和銷售自己的作品。要么是依賴大型電商平臺(tái)被淹沒在海量商品中要么是自己用社交媒體零散發(fā)布管理起來非常麻煩。正好我之前用SpringBoot做過幾個(gè)電商類的項(xiàng)目這次就結(jié)合“手工藝品銷售”這個(gè)垂直領(lǐng)域從頭到尾梳理一下如何開發(fā)一個(gè)專屬的銷售系統(tǒng)。這個(gè)系統(tǒng)不僅僅是商品的上下架它更需要體現(xiàn)手工藝品的獨(dú)特性和創(chuàng)作者的故事同時(shí)兼顧后臺(tái)管理的便捷性。如果你是一名Java開發(fā)者或者是一名計(jì)算機(jī)專業(yè)的學(xué)生正在尋找畢業(yè)設(shè)計(jì)的課題這篇內(nèi)容或許能給你提供一個(gè)完整的、可落地的思路和實(shí)現(xiàn)參考。簡單來說我們要做的是一個(gè)B2C模式的電商系統(tǒng)但它的內(nèi)核更偏向于“創(chuàng)作者平臺(tái)”。前端用戶可以看到精美的商品詳情、了解手工藝人的故事、進(jìn)行購買后端管理員和手工藝人賣家可以管理商品、訂單、用戶。技術(shù)棧上我們選擇SpringBoot作為后端框架這幾乎是目前Java領(lǐng)域快速開發(fā)Web應(yīng)用的首選它簡化了配置讓我們能更專注于業(yè)務(wù)邏輯。數(shù)據(jù)庫用MySQL前端可以考慮Thymeleaf模板引擎快速搭建或者分離前后端用Vue.js。接下來我會(huì)詳細(xì)拆解整個(gè)系統(tǒng)的設(shè)計(jì)思路、技術(shù)選型背后的考量、核心功能的實(shí)現(xiàn)細(xì)節(jié)以及開發(fā)過程中那些容易踩坑的地方。2. 系統(tǒng)整體設(shè)計(jì)與架構(gòu)選型2.1 為什么是SpringBoot在開始敲代碼之前我們先聊聊為什么選SpringBoot。市面上框架很多從傳統(tǒng)的SSH/SSM到新興的微服務(wù)框架。對(duì)于“手工藝品銷售系統(tǒng)”這樣一個(gè)典型的單體Web應(yīng)用SpringBoot的優(yōu)勢非常明顯。首先就是快速啟動(dòng)它提供了大量的“Starter”依賴比如spring-boot-starter-web用于Web開發(fā)spring-boot-starter-data-jpa或mybatis-spring-boot-starter用于數(shù)據(jù)持久化幾乎不需要你手動(dòng)配置XML一個(gè)pom.xml文件就能搞定大部分依賴。其次它內(nèi)嵌了Tomcat這意味著你的應(yīng)用可以打包成一個(gè)獨(dú)立的Jar文件直接通過java -jar命令運(yùn)行部署變得極其簡單非常適合作為畢業(yè)設(shè)計(jì)演示或個(gè)人項(xiàng)目部署。最后SpringBoot擁有豐富的社區(qū)生態(tài)和詳盡的文檔你在開發(fā)中遇到的絕大多數(shù)問題都能在社區(qū)找到解決方案這對(duì)于學(xué)習(xí)和解決問題至關(guān)重要。注意雖然SpringBoot簡化了配置但并不意味著不需要理解Spring框架的核心如IoC、AOP。建議在開始前至少對(duì)Spring MVC和一種ORM框架如JPA或MyBatis有基本了解否則你會(huì)感覺雖然項(xiàng)目跑起來了但完全不知道發(fā)生了什么。2.2 核心業(yè)務(wù)模塊拆解一個(gè)手工藝品銷售系統(tǒng)其核心業(yè)務(wù)模塊可以抽象為以下幾個(gè)部分這構(gòu)成了我們數(shù)據(jù)庫設(shè)計(jì)和代碼結(jié)構(gòu)的基礎(chǔ)用戶模塊包括買家普通用戶和賣家手工藝人。這里需要一個(gè)統(tǒng)一的用戶表通過“角色”字段或單獨(dú)的關(guān)系表來區(qū)分。買家關(guān)注收藏、購物車、訂單歷史賣家則需要商品管理、訂單處理、數(shù)據(jù)統(tǒng)計(jì)等功能。商品模塊這是系統(tǒng)的核心。手工藝品商品信息比標(biāo)準(zhǔn)品復(fù)雜得多。除了常規(guī)的名稱、價(jià)格、庫存、主圖還必須包含詳情圖文描述需要支持富文本以便賣家講述作品背后的故事、工藝、材質(zhì)等。多圖展示至少需要輪播圖展示作品不同角度。定制化屬性例如對(duì)于皮具可能有“皮革類型”、“顏色”、“尺寸”等可選屬性。這涉及到SKU庫存量單位的管理是設(shè)計(jì)中的難點(diǎn)。分類與標(biāo)簽分類可以是樹形結(jié)構(gòu)如手工藝 - 皮具 - 錢包標(biāo)簽則更靈活如復(fù)古、手工染色、禮物。訂單模塊記錄訂單狀態(tài)待付款、待發(fā)貨、已發(fā)貨、已完成、已取消、收貨地址、支付信息通常對(duì)接第三方支付系統(tǒng)內(nèi)只記錄支付狀態(tài)和流水號(hào)、物流信息。購物車模塊臨時(shí)存放用戶意向商品支持增刪改查。后臺(tái)管理模塊提供儀表盤集中管理用戶、商品、訂單、分類、輪播圖等所有內(nèi)容。2.3 技術(shù)棧與工具清單基于以上分析我建議的技術(shù)棧如下后端核心框架SpringBoot 2.x (建議2.7.x穩(wěn)定且資料多)持久層Spring Data JPA (開發(fā)速度快) 或 MyBatis-Plus (SQL更靈活)數(shù)據(jù)庫MySQL 8.0模板引擎/前端Thymeleaf (適合快速出原型) 或 完全前后端分離Vue.js RESTful API安全框架Spring Security (用于登錄認(rèn)證和權(quán)限控制)工具庫Lombok (簡化Bean代碼)Hutool (國產(chǎn)工具集好用)前端如果不用前后端分離Bootstrap 5 jQuery Thymeleaf 碎片化布局。如果前后端分離Vue 3 Element Plus 或 Ant Design Vue。開發(fā)與部署IDEIntelliJ IDEA (對(duì)SpringBoot支持最好)構(gòu)建工具M(jìn)aven版本控制Git部署打包成Jar可以在Windows/Linux上直接運(yùn)行。對(duì)于畢業(yè)設(shè)計(jì)用本機(jī)或?qū)W生服務(wù)器即可。3. 數(shù)據(jù)庫設(shè)計(jì)與核心表結(jié)構(gòu)解析數(shù)據(jù)庫設(shè)計(jì)是系統(tǒng)的基石設(shè)計(jì)得好后續(xù)開發(fā)事半功倍。這里我給出幾個(gè)核心表的設(shè)計(jì)思路和避坑點(diǎn)。3.1 用戶表 (sys_user)這張表需要同時(shí)容納買家和賣家信息。一個(gè)常見的做法是通過一個(gè)user_type字段來區(qū)分例如0-管理員1-賣家2-買家。但更靈活的方式是使用角色關(guān)聯(lián)表實(shí)現(xiàn)RBAC基于角色的訪問控制模型。CREATE TABLE sys_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵, username varchar(50) NOT NULL COMMENT 用戶名唯一, password varchar(255) NOT NULL COMMENT 加密后的密碼, nickname varchar(50) DEFAULT NULL COMMENT 昵稱, avatar varchar(500) DEFAULT NULL COMMENT 頭像URL, email varchar(100) DEFAULT NULL COMMENT 郵箱, phone varchar(20) DEFAULT NULL COMMENT 手機(jī)號(hào), status tinyint(4) DEFAULT 1 COMMENT 狀態(tài)0-禁用1-正常, create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT 創(chuàng)建時(shí)間, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新時(shí)間, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用戶表;實(shí)操心得密碼存儲(chǔ)絕對(duì)不要明文存儲(chǔ)使用Spring Security的BCryptPasswordEncoder進(jìn)行哈希加密。即使數(shù)據(jù)庫泄露攻擊者也無法直接獲得用戶密碼。字段長度avatar頭像字段要預(yù)留足夠長度因?yàn)榭赡艽鎯?chǔ)的是完整的OSS對(duì)象存儲(chǔ)URL地址。字符集務(wù)必使用utf8mb4字符集以支持存儲(chǔ)Emoji表情等特殊字符特別是昵稱字段。3.2 商品與SKU設(shè)計(jì)最大的挑戰(zhàn)這是系統(tǒng)最復(fù)雜的部分。普通商品可能只有一個(gè)價(jià)格和庫存但手工藝品常有定制選項(xiàng)。例如一個(gè)手工皮包可以選擇“棕色牛皮”或“黑色植鞣革”選擇“大號(hào)”或“小號(hào)”。每種組合對(duì)應(yīng)不同的價(jià)格和庫存。這就需要引入**SPU標(biāo)準(zhǔn)產(chǎn)品單元和SKU庫存保有單位**的概念。商品SPU表 (product_spu)描述一個(gè)商品的基本、通用信息。CREATE TABLE product_spu ( id bigint(20) NOT NULL AUTO_INCREMENT, title varchar(200) NOT NULL COMMENT 商品標(biāo)題, sub_title varchar(500) DEFAULT NULL COMMENT 副標(biāo)題/賣點(diǎn), category_id bigint(20) NOT NULL COMMENT 分類ID, seller_id bigint(20) NOT NULL COMMENT 賣家用戶ID, main_pic varchar(500) NOT NULL COMMENT 主圖, slide_pics text COMMENT 輪播圖JSON數(shù)組格式, detail_html text COMMENT 商品詳情HTML富文本, status tinyint(4) DEFAULT 0 COMMENT 狀態(tài)0-待審核1-上架2-下架, create_time datetime DEFAULT CURRENT_TIMESTAMP, update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品SPU表;商品規(guī)格/屬性表 (product_spec)定義可以選擇的維度如“顏色”、“尺寸”。CREATE TABLE product_spec ( id bigint(20) NOT NULL AUTO_INCREMENT, spu_id bigint(20) NOT NULL COMMENT 所屬SPU ID, spec_name varchar(50) NOT NULL COMMENT 規(guī)格名如顏色, spec_values varchar(500) NOT NULL COMMENT 規(guī)格值列表JSON數(shù)組如[棕色,黑色], PRIMARY KEY (id), KEY idx_spu_id (spu_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品規(guī)格表;商品SKU表 (product_sku)代表一個(gè)具體的、可售賣的庫存單元是規(guī)格組合的結(jié)果。CREATE TABLE product_sku ( id bigint(20) NOT NULL AUTO_INCREMENT, spu_id bigint(20) NOT NULL COMMENT 所屬SPU ID, sku_code varchar(100) DEFAULT NULL COMMENT SKU編碼可自定義, spec_combination varchar(500) DEFAULT NULL COMMENT 規(guī)格組合JSON如{顏色:棕色,尺寸:大號(hào)}, price decimal(10,2) NOT NULL COMMENT 價(jià)格, stock int(11) NOT NULL DEFAULT 0 COMMENT 庫存, pic varchar(500) DEFAULT NULL COMMENT SKU特有圖片, status tinyint(4) DEFAULT 1 COMMENT 狀態(tài), PRIMARY KEY (id), UNIQUE KEY uk_spu_specs (spu_id, spec_combination(100)), -- 防止重復(fù)組合 KEY idx_spu_id (spu_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT商品SKU表;核心難點(diǎn)與解決方案SKU生成與庫存扣減前端選擇不同規(guī)格時(shí)需要?jiǎng)討B(tài)查詢對(duì)應(yīng)的SKU ID。在用戶下單時(shí)必須基于SKU ID來扣減庫存。這里必須使用樂觀鎖或悲觀鎖來防止超賣。例如在更新庫存的SQL中加上條件where id? and stock ?。規(guī)格組合的存儲(chǔ)spec_combination字段存儲(chǔ)JSON是一個(gè)靈活的選擇方便前端解析和展示。但要注意如果需要根據(jù)某個(gè)規(guī)格值如所有“棕色”的商品進(jìn)行篩選JSON字段的查詢效率很低。如果篩選是核心需求可能需要更復(fù)雜的、標(biāo)準(zhǔn)化的表結(jié)構(gòu)如關(guān)聯(lián)表。圖片管理slide_pics字段存儲(chǔ)圖片URL的JSON數(shù)組。圖片本身建議上傳到云存儲(chǔ)如阿里云OSS、騰訊云COS數(shù)據(jù)庫只存路徑。這能極大減輕服務(wù)器壓力。3.3 訂單與購物車表訂單表需要關(guān)聯(lián)用戶、地址并且一個(gè)訂單可能包含多個(gè)商品所以通常拆分為訂單主表 (order_master)和訂單詳情表 (order_item)。購物車表 (cart_item) 相對(duì)簡單記錄用戶、商品SKU、數(shù)量即可。需要注意的是購物車商品價(jià)格應(yīng)該實(shí)時(shí)查詢商品SKU表的最新價(jià)格而不是在加入購物車時(shí)固定下來避免商品調(diào)價(jià)后產(chǎn)生糾紛。4. SpringBoot后端核心功能實(shí)現(xiàn)詳解4.1 項(xiàng)目初始化與配置使用IntelliJ IDEA的Spring Initializr或訪問 start.spring.io 快速生成項(xiàng)目。依賴選擇Spring Web,Spring Data JPA,MySQL Driver,Lombok,Thymeleaf如果做前后端不分離。關(guān)鍵的application.yml配置server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/handicraft_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: yourpassword driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update # 開發(fā)環(huán)境可以用update生產(chǎn)環(huán)境務(wù)必設(shè)為none或validate并通過SQL腳本管理表結(jié)構(gòu) show-sql: true # 開發(fā)時(shí)顯示SQL方便調(diào)試 properties: hibernate: format_sql: true # 格式化打印的SQL servlet: multipart: max-file-size: 10MB # 文件上傳大小限制 max-request-size: 20MB # 自定義配置 myapp: upload: path: /tmp/upload/ # 本地存儲(chǔ)路徑生產(chǎn)環(huán)境請改為絕對(duì)路徑重要提示ddl-auto: update在開發(fā)初期很方便但存在數(shù)據(jù)丟失風(fēng)險(xiǎn)且對(duì)字段重命名等操作支持不好。正式項(xiàng)目一定要使用Flyway或Liquibase這樣的數(shù)據(jù)庫版本遷移工具。4.2 用戶認(rèn)證與權(quán)限控制Spring Security手工藝品系統(tǒng)涉及買家、賣家、管理員三種角色權(quán)限控制必不可少。Spring Security配置是初學(xué)者的一大難點(diǎn)。核心配置類示例Configuration EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { Autowired private UserDetailsService userDetailsService; Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers(/, /home, /product/**, /login, /register, /css/**, /js/**).permitAll() // 公開訪問路徑 .antMatchers(/seller/**).hasRole(SELLER) // 賣家后臺(tái)路徑 .antMatchers(/admin/**).hasRole(ADMIN) // 管理員后臺(tái)路徑 .anyRequest().authenticated() // 其他所有路徑都需要認(rèn)證 .and() .formLogin() .loginPage(/login) // 自定義登錄頁 .defaultSuccessUrl(/) // 登錄成功跳轉(zhuǎn) .permitAll() .and() .logout() .logoutSuccessUrl(/) .permitAll() .and() .rememberMe() // 記住我功能 .and() .csrf().disable(); // 開發(fā)階段可關(guān)閉CSRF上線后需要開啟并處理 } Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); } }實(shí)操心得角色前綴Spring Security默認(rèn)在角色前加ROLE_。所以數(shù)據(jù)庫中存儲(chǔ)的角色名如果是SELLER在配置時(shí)寫hasRole(SELLER)框架實(shí)際會(huì)去匹配ROLE_SELLER。你也可以通過配置修改這一行為。CSRF防護(hù)在前后端不分離且使用Thymeleaf時(shí)Thymeleaf會(huì)自動(dòng)在表單中添加CSRF Token。如果前后端分離如Vue需要將Token放在請求頭中傳遞或者根據(jù)情況謹(jǐn)慎地禁用對(duì)安全性要求不高的API。密碼加密務(wù)必在用戶注冊時(shí)使用BCryptPasswordEncoder的encode()方法對(duì)密碼進(jìn)行加密后再存入數(shù)據(jù)庫。在登錄校驗(yàn)時(shí)Spring Security會(huì)自動(dòng)調(diào)用matches()方法進(jìn)行比對(duì)。4.3 商品管理的后端邏輯實(shí)現(xiàn)以“賣家添加商品”這個(gè)復(fù)雜流程為例展示Controller-Service-Repository的分層架構(gòu)。1. Repository層 (數(shù)據(jù)訪問)Repository public interface ProductSpuRepository extends JpaRepositoryProductSpu, Long { // JPA會(huì)自動(dòng)實(shí)現(xiàn)基本CRUD方法 // 自定義查詢查找某個(gè)賣家下所有上架的商品 ListProductSpu findBySellerIdAndStatusOrderByCreateTimeDesc(Long sellerId, Integer status); }2. Service層 (業(yè)務(wù)邏輯)這里是核心包含添加SPU、SKU以及處理規(guī)格組合的邏輯。Service Transactional public class ProductService { Autowired private ProductSpuRepository spuRepository; Autowired private ProductSkuRepository skuRepository; Autowired private ProductSpecRepository specRepository; public void addProduct(ProductSpu spu, ListProductSpec specs, ListProductSku skus) { // 1. 保存SPU基本商品信息 ProductSpu savedSpu spuRepository.save(spu); // 2. 保存規(guī)格定義 specs.forEach(spec - spec.setSpuId(savedSpu.getId())); specRepository.saveAll(specs); // 3. 保存SKU列表 skus.forEach(sku - { sku.setSpuId(savedSpu.getId()); // 這里可以生成唯一的SKU編碼例如SPUID 規(guī)格組合的哈希值 if (StringUtils.isEmpty(sku.getSkuCode())) { sku.setSkuCode(generateSkuCode(savedSpu, sku.getSpecCombination())); } }); skuRepository.saveAll(skus); } private String generateSkuCode(ProductSpu spu, String specCombination) { // 簡單的生成邏輯示例 try { String specHash DigestUtils.md5DigestAsHex(specCombination.getBytes()).substring(0, 6); return SPU spu.getId() - specHash.toUpperCase(); } catch (Exception e) { return SPU spu.getId() - System.currentTimeMillis(); } } }關(guān)鍵點(diǎn)整個(gè)添加商品的方法需要用Transactional注解標(biāo)記確保SPU、Spec、SKU的保存操作在一個(gè)數(shù)據(jù)庫事務(wù)中要么全部成功要么全部回滾保證數(shù)據(jù)一致性。3. Controller層 (接收請求)Controller RequestMapping(/seller/product) public class SellerProductController { Autowired private ProductService productService; PostMapping(/add) public String addProduct(Valid ProductForm form, BindingResult result, HttpSession session) { if (result.hasErrors()) { return seller/product_add; // 返回表單頁并顯示錯(cuò)誤 } // 從session中獲取當(dāng)前登錄的賣家ID Long sellerId (Long) session.getAttribute(userId); // 將表單對(duì)象form轉(zhuǎn)換為實(shí)體對(duì)象spu, specs, skus // ... 轉(zhuǎn)換邏輯 productService.addProduct(spu, specs, skus); return redirect:/seller/product/list; // 添加成功跳轉(zhuǎn)到商品列表 } }表單驗(yàn)證ProductForm是一個(gè)DTO數(shù)據(jù)傳輸對(duì)象可以使用JSR-303注解如NotBlank,Min進(jìn)行校驗(yàn)配合Valid注解在Controller中自動(dòng)觸發(fā)校驗(yàn)。4.4 訂單創(chuàng)建與庫存扣減的并發(fā)處理這是電商系統(tǒng)的核心難點(diǎn)。在高并發(fā)下多個(gè)用戶同時(shí)購買最后一個(gè)庫存的商品會(huì)導(dǎo)致超賣。下面是一個(gè)使用悲觀鎖在數(shù)據(jù)庫層面加鎖的簡單實(shí)現(xiàn)方案。Service層方法Service public class OrderService { Autowired private ProductSkuRepository skuRepository; Autowired private OrderRepository orderRepository; Transactional(rollbackFor Exception.class) public Order createOrder(Long userId, ListOrderItemDTO itemDTOs, Address address) { // 1. 計(jì)算總價(jià)驗(yàn)證商品狀態(tài)略 BigDecimal totalAmount BigDecimal.ZERO; ListOrderItem orderItems new ArrayList(); for (OrderItemDTO itemDTO : itemDTOs) { // 關(guān)鍵步驟通過悲觀鎖查詢SKU (使用JPA的Lock注解或原生SQL) ProductSku sku skuRepository.findSkuForUpdate(itemDTO.getSkuId()); if (sku null || sku.getStatus() ! 1) { throw new RuntimeException(商品[ sku.getId() ]已下架或不存在); } if (sku.getStock() itemDTO.getQuantity()) { throw new RuntimeException(商品[ sku.getId() ]庫存不足); } // 2. 扣減庫存 int updatedRows skuRepository.deductStock(itemDTO.getSkuId(), itemDTO.getQuantity()); if (updatedRows 0) { // 扣減失敗可能已被其他請求修改拋出異常觸發(fā)事務(wù)回滾 throw new RuntimeException(商品庫存并發(fā)更新失敗請重試); } // 3. 構(gòu)建訂單項(xiàng) OrderItem orderItem new OrderItem(); orderItem.setSkuId(sku.getId()); orderItem.setSkuSnapshot(JSON.toJSONString(sku)); // 保存快照防止后續(xù)商品信息變更 orderItem.setQuantity(itemDTO.getQuantity()); orderItem.setPrice(sku.getPrice()); orderItems.add(orderItem); totalAmount totalAmount.add(sku.getPrice().multiply(new BigDecimal(itemDTO.getQuantity()))); } // 4. 創(chuàng)建訂單主表 Order order new Order(); order.setUserId(userId); order.setOrderNo(generateOrderNo()); // 生成唯一訂單號(hào) order.setTotalAmount(totalAmount); order.setStatus(OrderStatusEnum.WAIT_PAY.getCode()); // ... 設(shè)置其他字段 Order savedOrder orderRepository.save(order); // 5. 保存訂單項(xiàng)關(guān)聯(lián)訂單ID orderItems.forEach(item - item.setOrderId(savedOrder.getId())); orderItemRepository.saveAll(orderItems); // 6. 清空用戶購物車中對(duì)應(yīng)的商品略 return savedOrder; } }Repository層扣減庫存方法使用原生SQL確保原子性Repository public interface ProductSkuRepository extends JpaRepositoryProductSku, Long { // 悲觀鎖查詢 Query(value SELECT * FROM product_sku WHERE id :id FOR UPDATE, nativeQuery true) ProductSku findSkuForUpdate(Param(id) Long id); // 扣減庫存 Modifying Query(value UPDATE product_sku SET stock stock - :quantity WHERE id :id AND stock :quantity, nativeQuery true) int deductStock(Param(id) Long id, Param(quantity) Integer quantity); }方案對(duì)比與選擇悲觀鎖 (FOR UPDATE)在查詢時(shí)直接鎖定記錄其他事務(wù)必須等待。簡單粗暴能保證強(qiáng)一致性但在高并發(fā)下容易導(dǎo)致大量請求等待性能有瓶頸。適用于庫存量極少、競爭激烈的場景。樂觀鎖在表中增加一個(gè)version字段更新時(shí)帶上版本號(hào)條件update ... set stock?, versionversion1 where id? and version?。如果更新返回影響行數(shù)為0說明版本沖突讓用戶重試。性能更好但用戶體驗(yàn)稍差可能需要前端提示“請重試”。Redis分布式鎖在扣減前先用Redis鎖住這個(gè)SKU ID防止其他進(jìn)程同時(shí)操作。適用于分布式部署環(huán)境。Redis緩存庫存異步同步到數(shù)據(jù)庫將庫存扣減操作放在Redis中原子操作decr快速返回然后再異步將結(jié)果持久化到MySQL。這是應(yīng)對(duì)極高并發(fā)秒殺場景的常用方案但架構(gòu)復(fù)雜。對(duì)于畢業(yè)設(shè)計(jì)或中小型項(xiàng)目樂觀鎖是一個(gè)在性能和一致性之間取得較好平衡的選擇。5. 前端頁面與用戶體驗(yàn)關(guān)鍵點(diǎn)5.1 商品詳情頁的動(dòng)態(tài)SKU選擇前端需要根據(jù)用戶選擇的規(guī)格動(dòng)態(tài)匹配出對(duì)應(yīng)的SKU并更新價(jià)格、庫存和圖片。這是一個(gè)經(jīng)典的交互。實(shí)現(xiàn)思路頁面加載時(shí)從后端獲取該SPU下的所有ProductSpec規(guī)格定義和ProductSku列表。前端使用JavaScript構(gòu)建一個(gè)規(guī)格值到SKU的映射關(guān)系。可以將所有SKU的spec_combinationJSON字符串解析成對(duì)象然后建立一個(gè)查找字典。當(dāng)用戶點(diǎn)擊選擇規(guī)格如“顏色棕色”時(shí)遍歷當(dāng)前已選的所有規(guī)格組合去映射字典里查找是否存在對(duì)應(yīng)的SKU。如果找到唯一SKU則顯示該SKU的價(jià)格、庫存和特有圖片如果找不到則顯示“此組合暫無貨”或禁用購買按鈕。示例代碼片段Vue.js思路// 假設(shè) skuList 是從后端獲取的所有SKU數(shù)組 const skuMap {}; skuList.forEach(sku { const key JSON.stringify(sku.specCombination); // 將規(guī)格組合對(duì)象轉(zhuǎn)為字符串作為鍵 skuMap[key] sku; }); // 當(dāng)用戶選擇規(guī)格時(shí) const selectedSpecs { 顏色: 棕色, 尺寸: 大號(hào) }; const searchKey JSON.stringify(selectedSpecs); const matchedSku skuMap[searchKey]; if (matchedSku) { this.currentPrice matchedSku.price; this.currentStock matchedSku.stock; this.currentSkuId matchedSku.id; } else { this.currentPrice --; this.currentStock 0; this.currentSkuId null; }5.2 圖片上傳與預(yù)覽功能手工藝品展示極度依賴圖片。我們需要實(shí)現(xiàn)多圖上傳、預(yù)覽、排序和刪除。后端ControllerPostMapping(/upload/image) ResponseBody public Result uploadImage(RequestParam(file) MultipartFile file, HttpServletRequest request) { if (file.isEmpty()) { return Result.error(請選擇文件); } // 1. 生成唯一文件名防止覆蓋 String originalFilename file.getOriginalFilename(); String fileExt originalFilename.substring(originalFilename.lastIndexOf(.)); String newFileName UUID.randomUUID().toString() fileExt; // 2. 確定存儲(chǔ)路徑 (配置文件中讀取) File dest new File(uploadPath newFileName); // 確保目錄存在 dest.getParentFile().mkdirs(); // 3. 保存文件 try { file.transferTo(dest); // 4. 返回訪問URL (如果是本地存儲(chǔ)可能需要配置靜態(tài)資源映射) String fileUrl /upload/ newFileName; // 示例URL return Result.success(上傳成功, fileUrl); } catch (IOException e) { e.printStackTrace(); return Result.error(上傳失敗); } }前端實(shí)現(xiàn)可以使用現(xiàn)成的組件如Element Plus的el-upload或Bootstrap-FileInput。關(guān)鍵是要支持多選、拖拽排序、預(yù)覽和刪除已選圖片的交互。上傳成功后將返回的URL存儲(chǔ)在一個(gè)數(shù)組中最終在提交商品表單時(shí)將這個(gè)數(shù)組以JSON格式傳給后端。5.3 響應(yīng)式布局與移動(dòng)端適配如今大部分流量來自手機(jī)所以前端頁面必須做好響應(yīng)式設(shè)計(jì)。使用Bootstrap 5的柵格系統(tǒng)可以輕松實(shí)現(xiàn)。核心原則是任何容器、行和列都使用Bootstrap的類而不是固定像素寬度。例如商品列表在PC上一行顯示4個(gè)在平板上顯示3個(gè)在手機(jī)上顯示2個(gè)div classrow div classcol-lg-3 col-md-4 col-sm-6 mb-4 v-forproduct in productList :keyproduct.id !-- 商品卡片 -- div classcard h-100 img :srcproduct.mainPic classcard-img-top alt... div classcard-body h5 classcard-title{{ product.title }}/h5 p classcard-text text-danger{{ product.price }}/p a :href/product/detail/ product.id classbtn btn-primary查看詳情/a /div /div /div /div6. 系統(tǒng)部署與上線注意事項(xiàng)開發(fā)完成后如何讓老師和同學(xué)訪問你的系統(tǒng)本地運(yùn)行和部署到服務(wù)器是兩回事。6.1 打包與運(yùn)行打包在項(xiàng)目根目錄執(zhí)行Maven命令mvn clean package -DskipTests。成功后會(huì)在target目錄下生成一個(gè)*.jar文件。運(yùn)行將Jar包上傳到服務(wù)器或就在本機(jī)在命令行執(zhí)行java -jar your-project-name.jar。SpringBoot會(huì)使用內(nèi)嵌的Tomcat啟動(dòng)服務(wù)。后臺(tái)運(yùn)行在Linux服務(wù)器上可以使用nohup命令讓進(jìn)程在后臺(tái)運(yùn)行nohup java -jar your-project-name.jar app.log 21 。更規(guī)范的做法是使用systemd創(chuàng)建服務(wù)。6.2 生產(chǎn)環(huán)境配置數(shù)據(jù)庫不要使用本地測試數(shù)據(jù)庫。在服務(wù)器上安裝MySQL創(chuàng)建專用數(shù)據(jù)庫用戶和密碼并在application-prod.yml中配置。文件存儲(chǔ)切勿將上傳的文件保存在項(xiàng)目Jar包內(nèi)部或相對(duì)路徑因?yàn)镴ar包是只讀的且每次更新部署會(huì)被覆蓋。必須使用絕對(duì)路徑并確保運(yùn)行Jar包的用戶對(duì)該目錄有讀寫權(quán)限。最佳實(shí)踐是使用云存儲(chǔ)服務(wù)。日志配置logback-spring.xml將日志按級(jí)別和日期滾動(dòng)輸出到文件方便排查問題。端口與防火墻確保服務(wù)器安全組或防火墻開放了你的應(yīng)用端口如8080。通常我們會(huì)用Nginx做反向代理將80/443端口請求轉(zhuǎn)發(fā)到8080并配置域名。6.3 使用Nginx進(jìn)行反向代理在服務(wù)器上安裝Nginx修改配置文件如/etc/nginx/conf.d/your-site.confserver { listen 80; server_name your-domain.com; # 你的域名或服務(wù)器IP location / { proxy_pass http://127.0.0.1:8080; # 轉(zhuǎn)發(fā)到SpringBoot應(yīng)用 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 靜態(tài)資源如圖片直接由Nginx處理效率更高 location /upload/ { alias /path/to/your/upload/dir/; # 指向你文件存儲(chǔ)的絕對(duì)路徑 expires 30d; # 設(shè)置瀏覽器緩存 } }配置完成后重啟Nginxsudo systemctl restart nginx。現(xiàn)在通過訪問服務(wù)器IP或域名就能看到你的手工藝品銷售系統(tǒng)了。7. 開發(fā)常見問題與調(diào)試技巧實(shí)錄在開發(fā)這個(gè)系統(tǒng)的過程中我踩過不少坑這里總結(jié)幾個(gè)最具代表性的問題和解決方法。7.1 問題一JPA 更新實(shí)體時(shí)字段被意外設(shè)置為NULL現(xiàn)象你從數(shù)據(jù)庫查詢出一個(gè)ProductSpu對(duì)象修改了它的title字段然后調(diào)用repository.save()結(jié)果發(fā)現(xiàn)其他未修改的字段如createTime在數(shù)據(jù)庫里變成了NULL。原因JPA的save()方法在執(zhí)行更新時(shí)默認(rèn)行為是使用你提供的實(shí)體對(duì)象的所有字段去覆蓋數(shù)據(jù)庫記錄。如果你的實(shí)體對(duì)象某些字段為null例如從JSON反序列化過來的DTO轉(zhuǎn)換而成只包含了部分字段那么這些字段在數(shù)據(jù)庫里就會(huì)被更新為null。解決方案使用查詢-修改-保存流程先通過findById()查詢出完整的持久化實(shí)體Managed Entity然后只修改需要改的字段再調(diào)用save()。因?yàn)榇藭r(shí)實(shí)體處于被管理狀態(tài)Hibernate只會(huì)更新發(fā)生變化的字段臟檢查。ProductSpu spu productSpuRepository.findById(id).orElseThrow(...); spu.setTitle(newTitle); // 只修改需要的字段 // spu.setSubTitle(null); // 千萬不要這樣做 productSpuRepository.save(spu); // 實(shí)際上這行可以不寫事務(wù)提交時(shí)會(huì)自動(dòng)flush使用動(dòng)態(tài)更新注解在實(shí)體類上添加DynamicUpdate注解。這樣Hibernate會(huì)在生成Update SQL時(shí)只包含發(fā)生變化的字段。但注意這需要Hibernate進(jìn)行額外的臟檢查有輕微性能開銷。Entity DynamicUpdate Table(name product_spu) public class ProductSpu { ... }自定義Update方法在Repository中定義Modifying和Query注解的更新方法直接編寫Update SQL精確控制更新的字段。7.2 問題二Thymeleaf模板中Spring Security的權(quán)限判斷不生效現(xiàn)象在HTML中使用Thymeleaf的sec:authorize屬性如div sec:authorizehasRole(ADMIN)但內(nèi)容始終不顯示或一直顯示。原因沒有正確引入Thymeleaf與Spring Security的集成命名空間或者依賴缺失。解決方案確保pom.xml依賴正確除了spring-boot-starter-thymeleaf還需要添加thymeleaf-extras-springsecurity5依賴。dependency groupIdorg.thymeleaf.extras/groupId artifactIdthymeleaf-extras-springsecurity5/artifactId /dependency在HTML模板中聲明命名空間在html標(biāo)簽中添加。html xmlns:thhttp://www.thymeleaf.org xmlns:sechttp://www.thymeleaf.org/extras/spring-security檢查Security配置確保你的角色名正確并且用戶確實(shí)被授予了該角色??梢栽贑ontroller中打印SecurityContextHolder.getContext().getAuthentication()來調(diào)試。7.3 問題三事務(wù)Transactional不回滾現(xiàn)象在Service方法上標(biāo)注了Transactional方法內(nèi)部拋出了異常但數(shù)據(jù)庫操作并沒有回滾。原因排查異常類型默認(rèn)情況下Transactional只在拋出運(yùn)行時(shí)異常RuntimeException和Error時(shí)回滾。如果你拋出的是受檢異常Exception事務(wù)不會(huì)回滾。解決在注解中指定回滾的異常類型Transactional(rollbackFor Exception.class)。方法訪問權(quán)限Transactional注解在代理對(duì)象Spring AOP生成上生效。如果方法不是public代理可能無法正常工作。解決確保事務(wù)方法是public的。自調(diào)用問題在同一個(gè)類中一個(gè)非事務(wù)方法A調(diào)用了另一個(gè)事務(wù)方法BB的事務(wù)不會(huì)生效。因?yàn)檫@是通過this對(duì)象直接調(diào)用而不是通過Spring代理對(duì)象調(diào)用。解決將事務(wù)方法B放到另一個(gè)Service中或者通過AopContext.currentProxy()獲取代理對(duì)象再調(diào)用不推薦耦合高。數(shù)據(jù)庫引擎確保MySQL表使用的引擎是InnoDB因?yàn)镸yISAM引擎不支持事務(wù)。7.4 問題四前端頁面樣式和JS文件404現(xiàn)象SpringBoot應(yīng)用啟動(dòng)后HTML能訪問但CSS、JS、圖片等靜態(tài)資源加載失敗404。原因SpringBoot對(duì)靜態(tài)資源有默認(rèn)的映射規(guī)則你的文件可能沒放對(duì)位置或者被攔截了。解決方案放置位置將靜態(tài)資源/static/,/public/,/resources/,/META-INF/resources/放在src/main/resources目錄下對(duì)應(yīng)的文件夾里。例如src/main/resources/static/css/style.css在HTML中引用路徑為/css/style.css。自定義路徑如果想放在其他目錄如/web-resources/可以在application.yml中配置spring: mvc: static-path-pattern: /resources/** web: resources: static-locations: classpath:/web-resources/這樣src/main/resources/web-resources/css/style.css對(duì)應(yīng)的訪問路徑就是/resources/css/style.css。檢查Security配置確保Spring Security的配置中放行了靜態(tài)資源的路徑如.antMatchers(/css/**, /js/**, /images/**).permitAll()。7.5 問題五訂單號(hào)等唯一標(biāo)識(shí)的生成現(xiàn)象直接使用數(shù)據(jù)庫自增ID或時(shí)間戳作為訂單號(hào)在高并發(fā)或分布式環(huán)境下可能重復(fù)或者看起來不夠?qū)I(yè)。解決方案生成一個(gè)全局唯一、趨勢遞增且難以猜測的訂單號(hào)。public class OrderNoGenerator { /** * 生成訂單號(hào)時(shí)間戳精確到毫秒 隨機(jī)數(shù)或機(jī)器ID 簡短哈希 */ public static String generate() { // 1. 時(shí)間部分yyyyMMddHHmmssSSS SimpleDateFormat sdf new SimpleDateFormat(yyyyMMddHHmmssSSS); String timePart sdf.format(new Date()); // 2. 隨機(jī)數(shù)部分3位模擬機(jī)器或進(jìn)程標(biāo)識(shí) int random (int) ((Math.random() * 9 1) * 100); // 100-999 // 3. 組合并可能加一個(gè)校驗(yàn)位簡單示例 String baseNo timePart random; // 可以再加一個(gè)簡單的校驗(yàn)碼如取后兩位數(shù)字和的個(gè)位數(shù) int sum 0; for (char c : baseNo.toCharArray()) { sum Character.getNumericValue(c); } String checkCode String.valueOf(sum % 10); return baseNo checkCode; } }更嚴(yán)謹(jǐn)?shù)姆桨甘鞘褂醚┗ㄋ惴⊿nowflake可以生成分布式環(huán)境下唯一的、趨勢遞增的ID。有許多開源實(shí)現(xiàn)如Hutool工具包里的IdUtil.createSnowflake。開發(fā)這樣一個(gè)系統(tǒng)從需求分析、技術(shù)選型、數(shù)據(jù)庫設(shè)計(jì)、編碼實(shí)現(xiàn)到最終部署是一個(gè)完整的軟件工程實(shí)踐。它不僅僅是對(duì)SpringBoot等技術(shù)的應(yīng)用更是對(duì)業(yè)務(wù)邏輯抽象、系統(tǒng)架構(gòu)設(shè)計(jì)、異常處理和用戶體驗(yàn)思考的綜合考驗(yàn)。過程中遇到的每一個(gè)報(bào)錯(cuò)和踩過的每一個(gè)坑都是寶貴的經(jīng)驗(yàn)。希望這篇超詳細(xì)的拆解能幫你理清思路少走彎路最終做出一個(gè)讓自己滿意、也能打動(dòng)答辯老師的手工藝品銷售系統(tǒng)。記住在開發(fā)中多寫注釋多寫日志善用調(diào)試工具遇到問題先自己思考搜索再請教他人你的成長會(huì)快得多。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷六月天天| 黄网在线免费观看| wuyuedingxiang99| 激情九九六月激情免费视频| 202丰满熟女妇大| 常久最新免费的色吊丝| 丁香五月综合在线播放 | 亚洲婷婷五月天在线激情综合网| 综合综合网| 绿色小导航AV| 97偷拍对白视频| 九九热最新视频| 国产资源91在线| 中文字幕AV在线| 激情五月综合网丁| 免费超碰在线观看| 桃色成人网| 婷婷丁香五月亚洲17cao| 偷偷狠狠久久婷婷五月天| 91熟妇大香蕉| 五月天丁香啪啪网| 丁香五月婷婷综合啪啪| 青草青草视频2免费观看| 99热这里只有精品99| 六月婷婷视频| 丁香五月大片| 激情小说之五月| 操逼视频一区| 日日干天天射| 99热福利| 一夜福利不卡| 五月丁香狠狠爱婷婷综合| 久久久WWW| 操逼巨乳91| 九月色婷婷综合亚洲| 狠狠精品干练久久久无码中文字幕| 五月婷婷手机在线| 久久九九激情五月天| 亚洲天堂99| 久久五月天婷婷| 人妻在线中文字幕久久| 五月丁香基地| 开心婷婷五月天激情网| 色色色色色网| 亚洲网站999| 亚洲综合热| 色婷婷九月| 伊人婷婷五月天av| 婷婷五月天视频免费在线观看| 天天操天天草天天草天天| 丁香婷婷六月激情综合| 五月激情婷婷丁香| 色色激情网| 日韩aaaaa| 99热综合| 五月天国产| 色婷婷电影网| 97luluse| 日本久热| 综合狠狠五月婷婷| 丁香成人色情五月天| 五月天影院| 五月天婷婷青青草| 人人操97| 夜夜操加勒比| 五月天婷婷社区久久综合| av操一操| 五月激情另类| 五月天综合视频| 五月天色丁香| 91一起操| 婷婷基地成人五月天| 精品国婬伦V无码久久久| 亚洲人成网站999综合| WWW久久99久久99久久| 丁香六月欧美| 久久五月六月| 狠狠色噜噜狠狠狠狠综合| www.婷婷.com| 色综合综合综合| 久久久久久久久久久jjjj| 国产毛片操B| 91久久久久| 伊人色综合久久久| 岛国av网| 91精品久久久久久| 91丨九色丨首页| 丁香五月AV| 婷婷在线播放av| 五月天激情日色在线| 99热在线观看精品免费| 涩五月婷婷| 婷婷丁香六月天| 久婷婷五月天影院| 六月婷色六月| 亚洲激情综合| 婷婷久久婷婷| 欧美视频在线观看噜噜| 97精品综合| 91中文狠狠综合| www.99精品视频| 噜噜色五月| 久热这里只有精品在线| 欧美婷婷| 激情婷婷五月天| 99热久草| 欧美成人一区二区三区在线视频 | 婷婷五月黄色激情在线| 啪啪色区| 日都一级A片| 丁香六月婷婷开心| 91日本在线观看| 99久热视频在线| 永久思思热在线| 激情五月丁香六月| 丁香婷婷五月天成人| 亚洲天堂爱爱| www.天天干| 激情五月天天| 79成人网| 久久AAAA片一区二区| 久久伦乱| 久久婷婷五月综合伊人| 亚洲视频无| 狠狠色情婷婷| 婷婷五月花| 亚洲五月天婷婷| 九九热99精品在线| 色欧美一级| 色色色色综合网| 丁香五月五婷| 日本黄色精品| 天天综合久久| 大香蕉啪啪| 九九精品在线观看视频6| 97在线观看| 99色色热| 丰满少妇乱A片无码| 亚洲综合字幕色色| 精品人妻一区| 色五月 激情婷婷 综合五月天| 婷婷永久在线| 台湾综合丁香五月蜜桃| 国产乱妇无乱码大黄AA片| 成人片在线播放| 99啪啪网| 婷婷在线视频| 国产AV一区二区三区最新精品| 久久五月天婷婷视频| 亚洲激情网| 色情丁香五月婷婷精品| 99性爱视频| 丁香五月久久| JAPANRCEP老熟妇乱子伦视频 | 色婷婷六月天| 色色五月天丁香| 99操免费视频| 丁香五月激情婷婷视频| 国外亚洲成AV人片在线观看| 五月亭亭激情综合| 日韩成人综合| 五月婷婷色影院| 五月丁香激| 操逼视频一区| 五月亭亭六月色| 色五月av| 激情小说五月欧美亚洲丁香| 色五月超碰| 99综合一区| 婷婷天堂站| 色色色网站| 丁香五月亭亭六月综合激情网| 中文字幕无码人妻少妇免费视频| 丁香六月无码播放| 午夜成人天堂久久无码日韩久久| 久草热8精品视频在线观看| 99久久国产成人精品| 99色在线| AV性爱网| 色婷婷视频| 婷婷丁香九色| 日本九九九九| 五月天激情.com| 91久久免费| 人人97碰| 五月丁香花激情综合网| 九九色中文| 丁香六月综合激情| 91se在线观看| 色亚洲婷婷| 高清免费在线视频| 五月丁香免费看| 伊人久久婷婷五月天激情四射| 人碰人人人玩91| 99热精品中文字幕| xx色综合| 99人人干| 丁香五月婷婷婷桃花影院| 婷婷色色网| 婷婷播播五月天| 日本九九九九九九| 丰满少妇乱A片无码| 亚城区在线| 久久WW| 激情婷婷丁香| 婷婷五月婷婷| 五月欧美色色五月| 涩涩五月天综合| 激情文学 综合 九月| 亚洲高清在线| 激情五月天婷婷| 激情六月丁香综合| 国产9色在线/日韩| 久久大香免费| 激情精品久久| 午夜伊人大香蕉| 99精品在线观看视频| 欧洲亚洲免费视频区| 五月丁香婷婷激情四射迷人| 色五月婷婷7777| 91九色熟女| 久久99这里只有精品视频 | 99re思思精品视频在线观看| 婷婷爱爱蜜臀天天操| 丁香五月五月婷婷欧美大香蕉 | 亚洲综合视频天天精品| 先锋资源91| 超碰操日| 香蕉AV777XXX色综合一区| 97碰碰人人| 亚洲99精品欧美一区| 爱草视频在线| 天天干天天日天天插| 伊人久久大香蕉网| 色狠狠色综合久久久绯色AⅤ影视 大香蕉五月天婷婷丁香91 | 日韩精品超碰在线观看| 亚洲成人无码片| 欧美69久成人做爰视频| 激情五月婷婷| 色播五月丁香婷婷| 99惹在线精品免费观看| 熟女乱论网| 日本超碰在线| 九月丁香婷婷综合激情| 青青草a在线| 99热国内精品| 99小视频| 久久久久久草黄色片AV在线观看| 深情六月婷婷综合久久| 婷婷五月AA五月在线| 国产成人网| 亚洲AV中文在线| 久久婷婷东京热| cao视频,现在观看| 中文字幕黄色电影网址| 九九亚洲综合| 五月丁香爱婷婷深深| 午夜婷婷| 婷婷色五月久久| 五月激情另类| 天天操天爱综合| 日日操,夜夜爽| 欧美英丁香开心快乐六月天网| 日韩婷婷五月天| 丁香五月激情欧欧美| 五月丁香av在线| 91婷婷五月天综合视频| 五月开心深爱激情网| 人人人va亚洲视频在线| 久久久久久人妻| 日韩aaa| 麻豆雪千夏| 无码人妻激情| 激情六月天| 国外亚洲成AV人片在线观看| 97丁香视频| 综合亚洲AV| 久热久操久热久草国产91| 婷婷婷五月香蕉| 亚洲视频久久| 激情深爱五月婷婷| 亚洲六月色| 99∨VTV| 亚洲第一成人无码A片| 9久视频| 天天插天天射| 五月婷丁香久久综合| 超碰资源在线| 国产欧美日韩一区二区三区| 五月天色区| 国产精品久久久久久白浆色欲| 亚洲六月婷婷| 一起操 91N.com| 久久女人天堂| 色色网五月激情| 色欲天天综合| wwww.9免费视频| WWW99热| 亚洲色五月天在线| 免费AV在线| 婷婷成人五月天| 91制片厂久久久国产电影| 大香蕉 伊人夜| 蜜臀A∨在线水帘洞| 丁香六月激情蜜桃| 99这里都是精品| 8050一级网| 久久最新色| 亚洲久久视频| 丁香六月啪| co超碰在线观看| 99九九玖玖| 五月婷丁香在线视频在线| 色婷婷婷婷| 婷婷六月综合激情| 国产精品视频| 激情五月天伊人影院| 五月丁香香蕉| www.色九月| 天天插夜夜爽| 9l视频自拍9l九色成人| 久99视频在线观看| 色五月天电影| 伊综合蕉| 婷婷五月天亚洲图片| 强伦轩人妻一区二区电影| 极品人妻VIDEOSSS人妻| 婷婷六月丁香在线| 欧美黄色AA片哗啦啦啦| 丁香婷婷综合激情五月色| 久热这里只有精品66| 丁香五月天网站| ztEJj| 色噜噜狠狠色综合伊人| 久久五月综合| 久久婷婷亚洲| 91viP在线看| 国产黄色一级片| 99爱免费在线视频| 超碰97在线操| 色婷丨日丨天丨综合久久| 五月天婷婷综合| 久久性刺激| 日本色色色| www.91五月| 婷丁香五月天| 无码免费人妻A片AAA毛片西瓜| 成人五月天综合网| 极品少妇高潮啪啪AV无码| 性一交一乱一交A片久久四色| 五月天天天天天天天天天天天天天天天婷婷婷| 一区二区乱视频码| 激情五月天激情五月天| 五月婷婷黄色毛片| 亚州操操| 91精品91久久久中77777| 成人国产综合| 天天狠天天狠| 日欧一片内射VA在线影院| 五月婷婷激情四季| 熟妇内谢69XXXXXA片| 99热精品10| 黑人糟蹋人妻HD中文字幕| 丁香婷婷六月激情文学| 麻豆AV一区二区三区| 天天做天天爱天天爽夜夜揉| JAPANRCEP老熟妇乱子伦视频 | 琪琪理论片| 狠狠色色| 色五月丁香五月婷婷五月成人网| 五月丁了香蕉综合| 日韩九九| 五月天小说激情| 五月天色小说| 五月丁香婷婷AV| 久人操| 五月丁香亭亭操逼| 99爱欧美| 久久女人九九| 国产激情久久| 激情五月婷婷啪啪| 超碰高清在线| 色综合久久888| 九九热在线视频,| 久热精彩视频98| 天堂综合久| 久久久人妻不卡| 狠狠操狠狠插| 无套内射极品大美女| 日本99在线| 五月天丁香| 婷婷五月中文字幕国产| 人妻AV在线观看| 性做久久久久久久免费看| 久久婷婷亚洲五月天| 色播色丁香五月| 五月天精品视频| 一二线视频 另类| 日韩在线婷婷五月天综合| 激情综合99| 99热18| 亚洲va欧美va国产综合久久久| 久婷婷久草| 婷婷情色五月天| 草操AV在线| 综合激情四射一theav| 日韩av在线免费观看| 深爱五月婷婷开心中文字幕| 婷婷五月丁香A∨| 色色a| www.开心激情| 都市激情久久| 91精品国产日韩91久久久久久国模| 涩涩涩五月天| 五月天综合在线| 久久婷婷六月综合资源| 日韩影院三级| 亚洲成人无码免费| 久久综合婷婷激情| 国产99久久久国产精品免费看| 激情综合五月开心狠狠| 我爱va亚洲va52| 婷婷爱爱蜜臀天天操| 国产片XXXXA片国语对白| 99在线观看精品视频| 色婷婷欧美在线| 激情爱爱网站| 丁香五月大香蕉AV| 丁香婷婷五月天成人| 五月婷婷在线视频| 九九99九九99九九99视频网| 噜噜噜噜综合在线| 99热视精品| 操操操操操操婷婷五月天| www.com色播五月天| 偷偷与邻居做爰完整视频| 99re视频在线播放| 婷婷综合色| 激情六月婷| 五月天色婷婷av| 激情小说五月天社区丁香| 大香蕉七区| 97人人妻人人艹| 中国女人内射6XXXXX| www.操.com| 91免费看片| 五月婷婷婷婷网| 久久久月丁香| 日本ww亚洲| 激情色中文| 欧美日朝成人| 91精品久久久久久| 欧美噜噜免费观看| 久鲁鲁色网| 亚洲激情av| 99热在线中文字幕| 97久久视频| 午夜九九九九九九九九九九九九九| 九九精品系列| 99噜噜噜| 久久婷婷五月综合色奶水99啪| 1234操逼网| 超级97碰碰| 就爱日五月天| 五月丁了香蕉综合| 午夜激情综合| 丁香五月精品视频| 婷婷丁香五月激情图片| www.热99热| 婷婷中文字幕版| 3p日韩网站视频| 色欲五月天| 国产精品色色色色| 国产午夜一区二区三区| 亚韩在线视频| 日本狠狠干| 国自产拍偷拍精品啪啪一区二区| 色综合久久久无码中文字幕999| 成人免费120分钟啪啪| 国外亚洲成AV人片在线观看| 91日本在线免费| 日本久久9| 超碰国产在线观看| 婷婷丁香69精华| 丁香五月AV在线| 狠狠干五月丁香| 欧美综合激情五月天| 日本色色视频| 大香蕉五月婷婷| 五月天婷婷久久| 国产67194| 97caop| 99啪视频在线观看| 大香蕉啪啪啪| 色五月婷婷久久大| 原琪琪色影院| 老美AA片| 偷拍91九色| .操區COm| 深爱激情丁香| 五月亭亭开心网| yazhoujiqingav| 丁香激情五月天| 变态另类9| 五月丁香激情综合网官网| 亚洲欧美一区二区三区四区爱爱动图| 日本色色色| 大地9中文在线观看免费高清| 91无码一起草| 日本综合色色| 26UUU精品一区二区Com| 久久色天堂| 中文字幕网伦射乱中文| 在线观看996精品| 深爱 五月天| 五月丁花六月丁香综合| 五月丁香影视| 伊人久久婷| 青草激情在线| 成人精品在线| 久9久9热久热| 综合在线色婷婷| 女人天堂AV| 日韩精品一曲二曲三曲四曲五曲| 色优久久| 丁香五月欧美午夜视频| www免费在线视频| 超碰成人电影| 婷婷亚洲五月| 久久99最新地址| 99精品在线| 天天狠狠六月婷丁香影院| 99视频只有精品| 99久精品视频| 五月天激情小说欧美激情| 九九色婷婷| 任你擦免费视频| 玖久精品视频9| 五月天婷婷久久| 葵花AV在线| 五月婷婷香蕉| 狠狠狠狠狠狠| 九九九热精品| 激情婷婷久久| 射琪琪| 久久性爰视频这里只有精品| 国产JK精品白丝AV在线观看| 久久香蕉影院| 五月婷婷基地| 亚洲中文字幕AV| 日本九婷婷| 怡春院天天干| 六月激情久久| 婷婷玖玖丁香| 久色视频| 夜夜爱影院| 开心五月网 | 五月天影院婷婷在线观看| 九九热最新地址| 五月丁香性爱| 99精品亚洲| 九热...av| 婷婷射综合| 午夜爱爱网站| 涩五月婷婷| 99乱视频| 五月婷婷丁香| 婷婷色五月婷婷姐妹| 96丁香六月婷婷蜜桃综合久久| 久久五月视频| 激情五月综合网| 成人婷婷桔色| 中日韩美欧成人一区二区精品在线| 激情五月激情综合网一级丸片| 婷婷久久五月天| 日日干日日色| 天天爱天天天射AV| 久久金品黃色| 色综合久久99色| 激情久久久| 99这里有精品久久97| www.minyis.com【JT】实力收量可预付QQ2101460746 | 色色色视频免费无码 | 91精品久久久久久| 婷婷五月色| 五月丁香婷婷婷婷综合网| 男同91 | 国产乱子轮XXX农村| 青青操绿aaa一区日v| 国产成人一区二区三区在线观看| 色婷婷综合网站| www:99热视频| 91操碰| 亚州激情网| 亚洲精品V天堂中文字幕| 天天干天天色天天干| 一区二区乱视频码| 九九碰九九爱97超碰| 91艹人| 啪啪操网| 99热久| 99愛国产| 亚洲黄色影视| 久久密臀婷婷| 丁香五月天之婷婷影院| 丁香五月欧美激情| 91久操| 91狠狠色丁香婷婷综合久久狠丁香综合久久精品 | 国产精品久久久久久五月天加勒比| 嫩草视频。| 人妻九九九九| 婷婷色色播五月天| 激情综合九月| 狠狠色综合无线观看| 五月丁香婷婷久久| 婷婷丁香五月天亚洲| 天堂久久婷婷| www.99色在线| jiZZdr| 欧美日韩AAAA| 久久视频这里都是精品| 丁香婷婷91在线观看视频| 色色亚洲| 91色五月| 精品人妻一区二区三区四区不卡在| 亚洲婷婷在线播放十月| 亚洲AV成人无码电影| 99热精品在线| 丁香六月久久| 看片视频在线免费日产在线看| 99爱欧美| 超碰人人在线| 色五月婷婷91| 六月婷婷日| AA片在线观看视频在线播放| 色婷婷综合久久久久| 欧美成人精品老美女噜噜噜| 天天色天天爱天天舔| 婷婷五月天六点丁香五月| 亚洲成人日韩无码精品| 北京熟妇搡BBBB搡BBBB| 五月婷婷婷| 九九99热| 五月丁香六月玩女人| 99这里只有精品在线观看| 婷婷爱在线观看| 欧美日韩成人在线网| 人妻有码乱操| A片天天| 色一情一乱一伦一区二区三区| 婷婷五月激情网| 婷婷五月婷婷| 99色热视频在线| 婷婷五月深爱五月| 激情网婷婷婷| 色婷婷九月| 五月丁香色播| 六月丁香五月激情婷婷| 天天综合色综合| 狠狠色官网| 六月五月丁香五月欧美| 在线五月婷婷小电影| 欧美日韩99| 最新色色五月天| 激情99热| 97人人干人人操| 91丨九色丨丰满人妖| 婷婷九月亚洲| 色色色综合色| 日韩综合网络男女香蕉a片| 国产精品电影网| 影音先锋91| 九九re精品视频在线观看| 97综合色片| 99在线视频播放| 色色免费网站| 九九视频网| 久热这里只有精品在线观看 | 超碰在线成人| 无码AV免费精品一区二区三区 | 五月天色色激情综合| 日韩成人精品中文字幕| 久久五月视频| 激情婷婷亚洲五月| 婷婷五月精品中文字幕| 色色色色色综合| 亚洲精品99| 婷婷五月花| 日日色综合| 99国产精品久久久久久久久久久 | 亚洲小视频免费看| 五月色丁香婷婷中文字幕| 国产日日操夜夜操的肉棒视频| 婷婷五月美女直播| 熟女网站久久| 色色热| 性爱激情久久| 美女黄频aⅴ视频| 狠狠做五月| 桔色成人官方网站| 久久久这里有精品| 天天干夜夜想| 蜜桃婷婷丁香综合久久开心亚洲| www:99热视频| www.久久| 开心五月婷婷99| 日亚二欧美| 免费精品99| 99视频免费播放| 91人人操人人看| VA婷婷| 五月婷婷在线综合| 91碰碰碰| 大香蕉网 久久| 性视频久久| 99re思思热这里| 欧美色色色色色色| 中文字幕免费高清电视剧| 99久久亚洲国产| 《诡秘之主》在线观看 | 亚洲午夜电影| 欧美色片中文字幕久久久久| 操操自拍| 色五月丁香在线| 五月天综合久久| 99天堂在线观看免费视频| 日本久久婷婷| 婷婷五月天BBw| 夜夜撸天天操| 三级99热| 99在线看片| 丁香五月天激情| 婷婷九九色| 99热这里在线精品| 99热碰碰| 婷婷婷久久| 精品色情一区二区三区四区| www.91在线观看| 亚洲xx在线| 天天看片日日夜夜| 色999;丁香五月| 五月婷婷色白丝| 99视频这里只有久久精品| 亚洲成人免费在线| 婷婷丁香五月激情密臀av| 玖操97| 国产日比| 婷婷的99视频网站| 丁香五月激情综合| 狠狠狠狠青草| 日本成人噜噜| 色婷婷丁香花五月天| 思思视频久久| 婷婷色五月激情| 超碰成人av| 天天干夜晚夜操| 欧美性爱专区| site:feetmall.com| 开心五月色婷婷综合开心网| 国产1区2区3区在线观| 五月婷婷啪啪啪| 另类激情五| 天天爽夜爽| 99re在线免费视频| 五月天色社区| 91免费试看| 婷婷五月天激情网站| 99精日本久久| 色天天综合| 91精选国| 婷婷五月天在线观看免费| 超碰人人插| 丁香综合网| 人妻在线观看视频| 成 人 色 色| 九月婷婷人人操人人舔人人爱| 三十路磁力链接| 202丰满熟女妇大| 精品无码人妻一区| 无码AV免费精品一区二区三区| 激情婷婷五六月天| 艳妇野外情欲放荡HD| 五月婷婷色情| 日操夜操天天操不卡| 久久99美女精彩视频| av一区二区电影免费在线观看| 婷婷色5月激情网| 色婷婷综合在线| 久热这里| 影音先锋噜一噜| 国产色色视频| 五月丁综合在线观看| 丁香色婷婷色手机免费在线| 久久人妻伦理| 久99久视频免费观看| 久久婷婷五月天激情四射| 成人网址在线观看| 丰满人妻一区二区三区| 涩涩婷婷五月| 亚洲色色五月| 欧美成人A片AAA片在线播放| 色久婷婷网| WWW.五月com| 丁香五月成人| 99 热| 人人人操 超碰| 思思久久精品| 五月丁香婷婷综合网| 国产亚洲成AV人片在线观黄桃| 欧美亚洲操逼| 婷婷网影院| 六月婷婷综合| 五月婷婷开心综合| 亚洲视频五区| 大香蕉220| 丁五月激情视频免费| 丁香九月婷| 极品人妻XXXXOOOO| 婷婷五月天狠狠色| 综合亚洲五月天| 国内自拍1区| 97干欧美| 99精品久久久久久久婷婷久久| 蜜桃婷婷狠狠久久综合| 91Chinese在线| 婷婷五月天熟妇| 亚洲av日韩无码| 少妇被下春药玩弄A片| 99热在线播放| 五月天色官网| 99福利导航| 操逼五月婷婷| 九九热在线99| 丁香婷婷五月| 久久久月丁香| 99热播放| 性爱111111| 九九热在线视频观看| 欧美爆乳一区二区三区| 色五月婷婷婷婷婷婷婷婷婷婷| 91婷婷丁香五月亚洲| 日韩aaaaa| 婷婷五月天电影网| 视频这里只有精品16| 五月婷婷亚洲| 99久久終合| 五月丁香综合| 大香蕉伊人久久| 丁香五月电影| 婷婷综合激情五月综合| 五月色情婷婷| 成人精品人妻| 成人免费视频一区| 九九婷婷激情综合网| 婷婷五月天社区| 七七色色综合| 天天夜夜爽| 婷婷五月丁香高清无码| 丁香五月久久| 9l视频自拍9l九色9l成人| 99综合色色色| 人与禽A片啪啪| 99热婷婷| 秋霞成人毛片一级A片| 五月丁香777| 综合图区激情| 天堂五月婷婷| 开心丁五月| 五月天激情国产综合婷婷婷就去爱| 成人短视频在线免费观看| 99超碰欧美| 国产AV影片| 超pen个人视频97| 99亚洲视频| 久久一热| 五月天丁香网站| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 亚洲天堂啪啪| 丁香五月婷婷天堂大香蕉| 久久久潮喷-久久久九九-成人AV| 亚洲在线免费成人| 亚洲色无码A片一区二区麻豆| 久久婷婷五月综合| 日日夜夜狠狠| 另类激情综合| 综合色99| 99国产精品白浆在线观看免费| 六月色婷婷| 久久激情五月| 国产SUV精品一区二区6| 国产精品久久久久久妇女6080| 天天干天天做| 99人妻碰碰久久久禁片| 久久久婷婷五月天| 啪啪操网| 五月婷婷色啪| 超碰在线人人| 色色热99| 我爱宗和色| 五月丁香激情欧洲啪啪| 99热在线这里| 夜夜操狠狠操| 九色婷婷| www.久久爱| 日本黄色三级片内射| 久久久久久久久18久久| 第1影院之五月婷婷| 第四色网婷婷| 97人人超| 伊人丁香五月| 蜜乳中文字| 超碰资源在线| 国产这里只有精品| 欧美日本韩国亚洲| 大香蕉丁香| 久久 婷婷 五月天| 丁香五月综合激情久久潮喷| 成人婷婷深爱综合网| 丁香涩涩爱| 九九热99免费视频| 色欲久久综合| 91人妻九色大屁股| 国产婷婷综合在线免费视频| 亭亭五月丁香综合欧美| 欧美另类五月激情| 亚洲视频99| 99视频在线精品免费观看2| 天天干天天插| av在线不卡播放| 天天肏视频| 丁香婷婷六月激情综合| 99色| 这里只有精品96| 五月第四色| 午夜色婷婷| 欧美成人一区二区三区在线视频| 色婷大香蕉| 婷婷综合| 五月激情六月婷婷| 99这里只有| 99爱在线| 久久之人妻| 狠狠干综合网| 九九aV| 青青草原爱爱网| 狠狠色丁香久久久婷| 人人噜天天上| 六月激情婷婷| 欧美123区免| 久热伊人| 开心五月网| 欧美丰满熟妇BBB久久久| 丁香五婷| 欧美丁香六月激情视频| 97碰在线| 91干99| 久热这里只有精品在线观看| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 另类五月激情| 五月天丁香网| 国产成人高清| 成人精品99| 99只有精品| 久久综合首页| 久久66成人网站| 91久久婷婷| 婷婷五月丁香花综合| 射久久丁香五月| 91性高潮久久久久久久久| 伊人久久大香天蕉亚洲特级| 丁香五月狠狠综合欧美| 综合大香蕉| 秋霞网在线免费基地五月婷婷丁香| 丁香五月婷婷少妇| 超碰人人超碰| 日本一级大片| 色爱终和网| 国产肥白大熟妇BBBB视频| 婷综合| 久久99热这里只频精品6学生| 五月天开心色色网| 色五月久久成人婷婷| 丁香五月婷婷影院| 综合激情五月婷婷| 天天艹夜夜艹| 亚洲图色五月天| 久久AV电影| 激情五月婷婷| www色婷婷久久综合久色 | 一区二区三区XXXXXX| 深爱激情av| 偷偷与邻居做爰完整视频| 噜噜噜噜噜在线| 9久久久久久久久久久| 2015WWW永久免费观看播放| 人人摸人人干人人做| 九九9久九9国产视频| 久久婷婷五月国产色综合激情| 久久HD| 亚洲综合视频网| 91九色国产熟女| 特级操b片| 婷婷色五天| 91精产一区三区免费观看| 99在线精品免费视频| 色婷婷AV在线观看| 色婷五月天激情| 精品视频网| 激情五月六月婷婷| 色婷亚洲五月丁香| 可以直接看的av| 日韩免费99| 丁香 亚洲 久久| 色综合丁香婷婷| 五月丁香婷婷色色| 淫荡家庭AV| 亚洲爆乳无码精品AAA片蜜桃 | 九九这里有精品| 久热re在线视频| 97五月久久丁香婷婷| 久9热视频在线观看| 亚洲综合久| 久久永久网址| 亚洲V国产V欧美V久久久久久| 亚洲综合视频一下| 日韩国产AV播放| 狠狠色综合精品视频在线| 午夜色丁香| 五月丁香操婷逼| 六月丁香久久| 欧美成人精品A片免费一区99| 天色综合网站| 综合久久8| 欧美影院| 欧美成人Va| 97很鲁在线视频| 精品人妻久久久久| 成人精品人妻| 伊人91| 久99热| 免费黄色AV| 99热免费| 五月婷婷开心丁香| 香蕉婷婷色五月| 天天插天天射| 激情五月天色婷婷| 婷婷六月综合| 另类小说五月天| 成人五月天视频播放| 五月天婷婷情色| h在线看免费版在线看| 久久精品永久免费| 另类激情码| 日本天天色| 精品成人a v无码内射| www.久久久久久久| 国产毛片精品一区二区色欲黄A片 国产人妻777人伦精品HD | 9久久AV| 久操热| 2025天天操| 激情五月丁香社区| 无码激情AAAAA片-区区| 免费精品99| 开心婷婷五月天电影院| 丁香五月综合久久| 这里只有精品久久| 狠狠狠色激情综合适合| 99精品这里只有免费视频| 人妻操日日| 免费精品99| 亚洲成人无码网站| 丁香五月天欧美在线| 大香蕉五月婷婷| 久久91久久精品久久| www.色综合| 婷婷五点亚洲| 色五月xxx| 99日精品视频| 丁香五月天堂婷婷| 日日爽日日| 综合五月网| 天天综合干| www狠狠| αV电影| 性做久久久久久久免费看| 五月天婷婷綜合院| 色人妻五月| 国产日韩欧美性生活| 91人人网| 日韩AV中文字幕在线| 噼里啪啦完整版中文在线观看| 六月婷婷综合激情| 午夜激情五月天| www.狠狠操.com| 色优久久| 日本久久爽| 五月婷婷之综合激情在线| 婷婷综合视频| 色婷婷影院| 国产成人高清| 婷婷五月天综合久久| 五月色俺婷婷| 狠狠干2007| 秋霞黄色一级久久| 伦乱天堂| 超碰在线中文字幕| 艹色18p| 狠狠干最新地址| 狠狠穞A片一區二區三區| 久久亚洲婷婷| 激情综合99| 另类综合色| 色播激情五月天| 久久深爱激情网| 5月婷婷性视频| 日本五月婷婷久久久六月丁香| 色性综合| 色九月婷婷| 欧美一级色| 国产9色在线/日韩| 大香蕉天堂| 亚洲人人操| 一级性爱大片| 狠狠综合久久综合| 狠狠色狠狠色综合日日91| 五月丁香久久激情综合| 伊人网啪啪| 天天夜天天色天天| 天天摸日日舔狠狠添婷婷婷| www.夜夜操.con| 九九精品片一| 天天色综合色色色色色。| 久久视屏这里只有久久| 99热这里只有99| 天天舔夜夜操www com| 色必久悠悠影院| 狠狠色丁香婷婷基地| 深爱开心激情网| 五月天激情国产综合AV| 婷婷丁香亚洲五月天| 色婷婷激情五月天在线观看| 婷婷六月色播| 日日夜夜狠狠操| 99色在线视频| 九九热99免费视频| 亚洲激情AV| 九九成人视频| 亚洲成人在线在线| YW无码| 大香蕉人人网| 伊久久婷婷| 激情综合五月婷| 婷婷丁香久久五月综合| 开心五月婷| 丰满熟女人妻一区二区三| www,超碰| 五月色丁香| 国产在线网| 欧美在线视频9| 先锋五月婷婷丁香草草| 伦乱美欧| 丁香五月天天高清在线| 中文av网站| 91操操| 日欧一片内射VA在线影院| ai97re99一本| 成人版视频在线观看| 亚洲va日| 丁香五月激情综合啪啪| 婷婷娌伦网| 伊人久久艹| 色色网站日本91| 啪啪99| 五月天色婷婷av| 99热在线只有精品| 五月丁香六月婷婷网| av亚洲国产小电影| 大香蕉伊然在亚洲90| 久久久WWW| 狠狠色狠狠色综合日日91| 看片视频在线免费日产在线看| 婷婷网五月天| 五月婷婷性爱网| 91丨九色丨东北熟女| 日日操,夜夜爽| 色久女| 丁香五月婷婷av影院| 97狠狠色| 五月停停丁香| 色五月天在线观看| 97成人丁香| 丁香5月激情网| 99精色| 亚洲无码99| 大香蕉五月| 人人射av| 五月色网| 婷婷色资源| 开心久久xxx色| www色五月| 嫩BBB搡BBBB榛BBBB| 丁香五月六月综合激情| 激情综合亚洲色婷婷五月| 亚洲精品视频在线| 激情五月天情色| 婷婷六月丁香激情综合| 九热免费视频| 男女啪啪视频久 9| 日韩色色小视频| 色欲午夜无码久久久久久张津瑜| 欧美成人一区二区三区在线视频| 人妻激情综合| 99热6这里只有精品| 成人综合网站| 91黄址| 天天干夜夜谢| www.seqingwuyuetian| 久久久久9999| 五月丁香六月| 精品自拍97| 激情小说五月天中文字幕| 五月婷色色| 婷婷五月天精品| 色色cOm| 婷婷91视频| 蜘蛛女免费观看完整版高清电影| 国产婷婷五月天| 五月激情久久| 亚洲色色精品| 99爱爱| 色播五月丁香| 大香蕉婷婷色| 超碰99热精品| 亚洲第一第二网站| 精品热九九| 久久99热 这里有精品| 97色色婷婷| 天天情天天狠天天透| 色爱综合网| 久久婷丁香五月| 久久婷婷五月天激情| 99热999| 婷婷性爱五月天| 丁香五月天亚洲综合| 99爱无码| 色婷婷狠狠18yy| 99er6热在线观看精品6| 国产,欧美,学生妹,视频| 66久久视频在线| 婷婷五月天av| 激情五月天开心网丁香无码| 五月天婷婷色| 六月婷婷六月天天在线免费| 婷婷六月色| 六月丁香婷婷拍拍| 欧美色五月| 77799热| 亚洲欧洲中文日韩久久AV乱码| 丁香婷婷偷拍| 免费无码毛片一区二区A片| 五月丁香拍拍激情综合| 国产人妻人伦精品一区二区| 天堂婷婷五月色| 琪琪色五月婷婷老师| 婷婷五月18永久免费视频| 色色综合院|