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

ARTICLE DETAIL

資訊詳情

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

Spring Boot寵物用品交易平臺實(shí)戰(zhàn):從設(shè)計(jì)到部署全解析

Spring Boot寵物用品交易平臺實(shí)戰(zhàn):從設(shè)計(jì)到部署全解析 做畢設(shè)或練手項(xiàng)目選“在線交易平臺”這套命題幾乎是繞不開的。原因很簡單電商類系統(tǒng)覆蓋面廣從前臺購物車到后臺訂單管理能完整串起 Java Web 開發(fā)的主線知識非常適合作為 Spring Boot 實(shí)戰(zhàn)項(xiàng)目的切入點(diǎn)?!盎?Spring Boot 的寵物用品交易平臺”是這個分類里做得比較細(xì)、也不容易跟別人完全撞車的題目。這篇文章我把這個項(xiàng)目的完整思路、技術(shù)選型、數(shù)據(jù)庫設(shè)計(jì)、核心流程實(shí)現(xiàn)和踩坑記錄都整理出來希望能幫正在做類似項(xiàng)目或準(zhǔn)備自己從零寫一套系統(tǒng)的同學(xué)省下不少彎路。這個項(xiàng)目解決的是寵物用品線上購買場景中的完整交易閉環(huán)核心包含用戶端和管理端兩大部分。用戶端有注冊登錄、商品瀏覽、分類篩選、購物車、下單支付模擬、訂單管理和收貨地址管理管理端則是商品管理、分類管理、訂單處理、用戶管理和基礎(chǔ)數(shù)據(jù)統(tǒng)計(jì)。整套系統(tǒng)不僅適合畢業(yè)設(shè)計(jì)展示也特別適合想通過一個完整項(xiàng)目把 Spring Boot 前后端知識串起來的人。簡單說做完這個項(xiàng)目你對 SSM 框架整合、RESTful API 設(shè)計(jì)、關(guān)系型數(shù)據(jù)庫建模、攔截器鑒權(quán)、文件上傳這些核心技能都會有比較扎實(shí)的體感。1. 項(xiàng)目整體設(shè)計(jì)與功能拆解1.1 需求定位與角色權(quán)限設(shè)計(jì)寵物用品交易平臺這個題目如果你去看網(wǎng)上現(xiàn)成的成品會發(fā)現(xiàn)很多版本做得非常單薄有的只有一個商品列表加一個“購買”按鈕點(diǎn)了之后什么反饋都沒有有的是把所有管理功能堆到一個頁面里用戶和管理員完全不分權(quán)。這些做法應(yīng)付中期檢查都勉強(qiáng)更別說真正上線或者進(jìn)答辯被問到業(yè)務(wù)細(xì)節(jié)。我做這個項(xiàng)目時第一件事就是把角色權(quán)限作為整個系統(tǒng)的基礎(chǔ)框架來設(shè)計(jì)。系統(tǒng)分兩種角色普通用戶和管理員。用戶端通過 JWTJSON Web Token做無狀態(tài)鑒權(quán)管理員接口再單獨(dú)加一層攔截校驗(yàn)。這樣做的直接好處是前后端分離時不用每次請求都傳 session ID移動端如果以后要接入小程序這類場景JWT 也能直接復(fù)用。管理員權(quán)限校驗(yàn)我用的是 Spring Boot 攔截器寫一個AdminInterceptor類實(shí)現(xiàn)HandlerInterceptor接口在preHandle里判斷請求頭中的 token解析出用戶角色后再決定放行還是攔截。整個系統(tǒng)的功能模塊劃分我建議按照用戶端和管理端兩條線來梳理用戶端注冊、登錄、退出登錄個人信息查看修改首頁輪播圖、商品分類導(dǎo)航、商品推薦列表商品列表支持關(guān)鍵詞搜索、分類篩選、價格排序、分頁展示商品詳情頁展示多張商品圖片、庫存、銷量、詳情描述購物車加入、修改數(shù)量、刪除、批量勾選結(jié)算訂單提交訂單、在線支付模擬、取消、確認(rèn)收貨收貨地址新增、編輯、刪除、設(shè)置默認(rèn)地址個人中心我的訂單、我的收藏、瀏覽記錄管理端管理員登錄鑒權(quán)獨(dú)立于用戶端商品管理新增、上下架、修改庫存和價格、編輯商品圖片分類管理商品分類的增刪改查訂單管理訂單列表、訂單詳情、發(fā)貨操作、訂單統(tǒng)計(jì)用戶管理查看用戶列表、禁用/啟用用戶賬號數(shù)據(jù)看板銷售額統(tǒng)計(jì)、訂單量統(tǒng)計(jì)、熱銷商品 Top N1.2 技術(shù)選型背后的取舍邏輯這個項(xiàng)目我用的是 Spring Boot 2.7.x MyBatis-Plus 3.5.x MySQL 8.0 這套組合。如果你用的是 Java 8 或 11Spring Boot 2.7 仍然是兼容性和穩(wěn)定性最穩(wěn)妥的版本不建議一上來就追 Spring Boot 3因?yàn)?Spring Boot 3 強(qiáng)制要求 Java 17且部分第三方中間件的適配還容易踩坑。注意如果你的學(xué)?;蚬经h(huán)境強(qiáng)制要求 JDK 8Spring Boot 2.7.x 是最后一代完整兼容 JDK 8 的大版本分支這個信息在選型時很關(guān)鍵。MyBatis-Plus 在這個項(xiàng)目里是真正的效率神器。它內(nèi)置了BaseMapper單表 CRUD 基本不需要手寫 SQL注意是“基本”多表關(guān)聯(lián)查詢和復(fù)雜統(tǒng)計(jì)還是要自己寫 XML。我用它的分頁插件PaginationInnerInterceptor非常順手配置十幾行代碼就能實(shí)現(xiàn)標(biāo)準(zhǔn)的分頁查詢避免了原生 MyBatis 寫 PageHelper 依賴時的版本沖突問題。前端我選的方案是 Thymeleaf Bootstrap 5 jQuery沒上前后端完全分離的 Vue 腳手架。原因很實(shí)際團(tuán)隊(duì)只有一個人既要寫后端又要寫頁面如果還要維護(hù) Nginx 靜態(tài)資源分離和前端構(gòu)建流程工作量會翻倍。服務(wù)端渲染模式下頁面直接通過 ModelAndView 渲染HTML 里用th:each循環(huán)商品列表對演示和答辯來說已經(jīng)足夠完整。更重要的是Thymeleaf 的語法風(fēng)格跟原生 HTML 非常接近后續(xù)想遷移到 Vue 時后端接口只要保證返回 JSON 格式就行改動成本也不至于傷筋動骨。2. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)2.1 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)不是堆字段是理清關(guān)系數(shù)據(jù)庫設(shè)計(jì)是這個項(xiàng)目最值得花時間的環(huán)節(jié)。它決定了后面所有業(yè)務(wù)邏輯的復(fù)雜度上限設(shè)計(jì)得當(dāng)代碼寫起來會非常順手。寵物用品交易平臺我設(shè)計(jì)了 8 張核心表下面這張表給你做個索引對照表名中文含義核心字段關(guān)聯(lián)關(guān)系user用戶表id, username, password, nickname, avatar, phone, role與 cart、orders 一對多category商品分類表id, name, sort_order與 product 一對多product商品表id, category_id, name, subtitle, main_image, detail, price, stock, sales, status與 cart、order_item 一對多cart購物車表id, user_id, product_id, quantity, checked不落訂單表作緩存型數(shù)據(jù)orders訂單表id, order_no, user_id, total_price, payment_type, status, receiver_name, receiver_phone, receiver_address與 order_item 一對多order_item訂單明細(xì)表id, order_id, product_id, product_name, product_image, current_price, quantity多對一關(guān)聯(lián) ordersaddress收貨地址表id, user_id, receiver_name, receiver_phone, province, city, district, detail, is_default與 user 多對一banner輪播圖表id, image_url, link_url, sort_order, status獨(dú)立配置表有幾個設(shè)計(jì)細(xì)節(jié)我說一下都是我實(shí)際開發(fā)中被坑過之后改出來的第一訂單表和訂單明細(xì)表必須分開設(shè)計(jì)。剛開始圖省事把商品快照直接存在訂單表里的 JSON 字段里后來發(fā)現(xiàn)一旦要統(tǒng)計(jì)“哪個商品賣得最好”就得去解析 JSON數(shù)據(jù)庫層面完全沒法做聚合查詢。拆成 order_item 表之后熱銷統(tǒng)計(jì)一條 SQL 就能解決。另外注意在訂單明細(xì)里要冗余一份product_name和product_image因?yàn)樯唐沸畔⑹莿討B(tài)的用戶下單之后商品改名或刪除了訂單里仍要保留購買當(dāng)時的快照。第二密碼字段存的不是明文是 BCrypt 加密后的密文。Spring Security 里自帶的BCryptPasswordEncoder可以直接用不用為了一個密碼加密功能把整個 Spring Security 引入項(xiàng)目單獨(dú)拿它的編碼器工具類即可。第三庫存字段的初始化和扣減邏輯要提前約定清楚。添加商品時默認(rèn)stock為 0上架前必須手動設(shè)置庫存和價格。扣減庫存時我用了樂觀鎖機(jī)制在 product 表增加version字段更新庫存的 SQL 里帶上WHERE version #{version}避免高并發(fā)場景下兩個訂單同時把同一件商品的庫存扣成負(fù)數(shù)。2.2 Spring Boot 項(xiàng)目結(jié)構(gòu)合理的分層是后期維護(hù)的救命稻草很多同學(xué)做項(xiàng)目時喜歡把所有的 Controller、Service 全部塞到幾個包里表面看文件很少但功能一多根本沒法維護(hù)。我自己比較推薦的分層結(jié)構(gòu)是com.pet.mall ├── controller // 接口層只做參數(shù)接收和響應(yīng)包裝 ├── service // 業(yè)務(wù)層處理核心邏輯 │ └── impl ├── mapper // MyBatis-Plus 的 Mapper 接口 ├── entity // 數(shù)據(jù)庫實(shí)體類 ├── dto // 數(shù)據(jù)傳輸對象請求參數(shù) ├── vo // 視圖對象響應(yīng)數(shù)據(jù) ├── config // 配置類跨域、攔截器、分頁插件 ├── common // 通用類統(tǒng)一返回結(jié)果、異常處理、常量 ├── util // 工具類JWT、文件上傳 └── interceptor // 登錄鑒權(quán)攔截器注意區(qū)分 DTO 和 VO 的概念這是很少有人在畢設(shè)里講清楚但答辯時很可能被問到的點(diǎn)。DTO 是接收前端傳來的參數(shù)比如注冊時只需要username、password、nickname不需要把整個User實(shí)體作為入?yún)O 是返回給前端的數(shù)據(jù)比如訂單詳情里需要包含商品明細(xì)列表和訂單狀態(tài)描述而這些字段在實(shí)體類中可能并不直接存在。統(tǒng)一返回結(jié)果類我也強(qiáng)烈建議寫這是公司里非?;A(chǔ)的一項(xiàng)規(guī)范。我用的是一個泛型類ResultT包含code、message、data三個字段。成功時 code 為 200失敗時 code 為 500 或自定義業(yè)務(wù)碼配合全局異常處理器RestControllerAdvice代碼里就基本不用在每個 Controller 里重復(fù)寫 try-catch 了。2.3 關(guān)鍵配置文件與依賴清單pom.xml里核心依賴我整理了一份參考清單dependencies !-- Web 啟動器 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Thymeleaf 模板引擎 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-thymeleaf/artifactId /dependency !-- MyBatis-Plus Spring Boot 3.x 使用不同的 starter -- dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency !-- MySQL 驅(qū)動 -- dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency !-- Lombok 簡化實(shí)體類 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency !-- JWT 工具 -- dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-api/artifactId version0.11.5/version /dependency !-- Hutool 工具包生成隨機(jī)訂單號、日期工具等 -- dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.8.20/version /dependency /dependenciesapplication.yml的關(guān)鍵配置如下數(shù)據(jù)庫連接池我直接用的 HikariCPSpring Boot 默認(rèn)server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/pet_mall?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root password: yourpassword hikari: maximum-pool-size: 10 minimum-idle: 5 thymeleaf: cache: false suffix: .html prefix: classpath:/templates/ mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true global-config: db-config: id-type: auto logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0提示map-underscore-to-camel-case一定要打開否則數(shù)據(jù)庫字段user_id無法自動映射到實(shí)體類的userId屬性會讓你在排查問題時懷疑人生。3. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)3.1 商品模塊從數(shù)據(jù)庫到頁面渲染的完整鏈路商品模塊是整個項(xiàng)目最先需要跑通的模塊因?yàn)楹竺尜徫镘?、訂單全都要依托商品?shù)據(jù)。實(shí)現(xiàn)一個商品列表接口為例從前端請求到數(shù)據(jù)庫查詢的完整鏈路是瀏覽器訪問/product/list?pageNum1pageSize8categoryId3keyword貓糧請求首先被 Spring MVC 的DispatcherServlet接收根據(jù)RequestMapping(/product/list)映射到ProductController的list方法。Controller 層把參數(shù)封裝成ProductQueryDTO調(diào)用 Service 層的queryProductPage()方法Service 里通過 MyBatis-Plus 的LambdaQueryWrapper構(gòu)造查詢條件分頁插件自動執(zhí)行 count 和 limit 兩條 SQL最終返回一個PageInfo對象給前端 Thymeleaf 渲染。關(guān)鍵代碼如下這段代碼我實(shí)測過很多次直接抄就能用Override public PageResultProductVO queryProductPage(ProductQueryDTO dto) { PageProduct page new Page(dto.getPageNum(), dto.getPageSize()); LambdaQueryWrapperProduct wrapper new LambdaQueryWrapper(); // 關(guān)鍵詞搜索 if (StrUtil.isNotBlank(dto.getKeyword())) { wrapper.and(w - w.like(Product::getName, dto.getKeyword()) .or() .like(Product::getSubtitle, dto.getKeyword())); } // 分類篩選 if (dto.getCategoryId() ! null) { wrapper.eq(Product::getCategoryId, dto.getCategoryId()); } // 只查詢上架商品 wrapper.eq(Product::getStatus, 1); // 排序按銷量、價格、新品 if (sales.equals(dto.getSort())) { wrapper.orderByDesc(Product::getSales); } else if (priceAsc.equals(dto.getSort())) { wrapper.orderByAsc(Product::getPrice); } else if (priceDesc.equals(dto.getSort())) { wrapper.orderByDesc(Product::getPrice); } else { wrapper.orderByDesc(Product::getCreateTime); } productMapper.selectPage(page, wrapper); PageResultProductVO result new PageResult(); result.setPageNum(page.getCurrent()); result.setPageSize(page.getSize()); result.setTotal(page.getTotal()); result.setList(BeanUtil.copyToList(page.getRecords(), ProductVO.class)); return result; }這里有個容易被忽略的細(xì)節(jié)搜索條件中的keyword用了StrUtil.isNotBlank()判斷而不是直接判斷! null因?yàn)榍岸巳绻麄饕粋€空字符串過來like條件仍然會拼進(jìn) SQL雖然結(jié)果集一樣但會多一次無效查詢。3.2 購物車與訂單流程事務(wù)邊界到底畫在哪里購物車和訂單流程是電商系統(tǒng)的核心鏈路也是答辯時最容易追問細(xì)節(jié)的地方。很多初學(xué)者的代碼在提交訂單時會出現(xiàn)嚴(yán)重問題訂單主表插入成功了但訂單明細(xì)和庫存扣減失敗了導(dǎo)致數(shù)據(jù)不一致。這個問題的根本原因是事務(wù)邊界沒有控制好。Spring 的Transactional注解默認(rèn)只對運(yùn)行時異常RuntimeException回滾對受檢異常如IOException不會回滾。如果代碼里 catch 住了異常但沒有重新拋出即使加了注解也無法觸發(fā)回滾。我實(shí)現(xiàn)的提交訂單邏輯是這樣的Transactional(rollbackFor Exception.class) Override public OrderVO submitOrder(OrderCreateDTO dto) { // 1. 參數(shù)校驗(yàn)地址不能為空購物車商品不能為空 Address address addressMapper.selectById(dto.getAddressId()); Assert.notNull(address, 收貨地址不存在); // 2. 計(jì)算訂單總價校驗(yàn)庫存 ListCartVO cartList cartMapper.selectCartWithProduct(dto.getUserId()); BigDecimal totalPrice BigDecimal.ZERO; for (CartVO cart : cartList) { if (cart.getStock() cart.getQuantity()) { throw new BusinessException(500, 商品【 cart.getProductName() 】庫存不足); } totalPrice totalPrice.add(cart.getCurrentPrice().multiply(new BigDecimal(cart.getQuantity()))); } // 3. 生成訂單號保存訂單主表 String orderNo PM System.currentTimeMillis() RandomUtil.randomNumbers(4); Orders order new Orders(); order.setOrderNo(orderNo); order.setUserId(dto.getUserId()); order.setTotalPrice(totalPrice); order.setStatus(0); // 0-待支付 1-已支付 2-已發(fā)貨 3-已完成 4-已取消 order.setReceiverName(address.getReceiverName()); order.setReceiverPhone(address.getReceiverPhone()); order.setReceiverAddress(address.getProvince() address.getCity() address.getDistrict() address.getDetail()); ordersMapper.insert(order); // 4. 批量保存訂單明細(xì)同時扣減庫存 for (CartVO cart : cartList) { OrderItem item new OrderItem(); item.setOrderId(order.getId()); item.setProductId(cart.getProductId()); item.setProductName(cart.getProductName()); item.setProductImage(cart.getProductImage()); item.setCurrentPrice(cart.getCurrentPrice()); item.setQuantity(cart.getQuantity()); orderItemMapper.insert(item); int rows productMapper.deductStock(cart.getProductId(), cart.getQuantity()); if (rows 0) { throw new BusinessException(500, 商品【 cart.getProductName() 】庫存扣減失敗); } } // 5. 清空用戶購物車中已結(jié)算的商品 cartMapper.deleteByUserIdAndProductIds(dto.getUserId(), cartList.stream().map(CartVO::getProductId).collect(Collectors.toList())); return orderToVO(order); }整套流程我用了Transactional(rollbackFor Exception.class)確保任何一步失敗前面插入的訂單主表、明細(xì)表、庫存扣減全部回滾。這里最關(guān)鍵的 SQL 是庫存扣減語句必須使用帶條件的更新而不是先查再更新UPDATE product SET stock stock - #{quantity}, version version 1 WHERE id #{productId} AND stock #{quantity} AND version #{version}這個寫法把“庫存檢查”和“庫存扣減”合并成一條原子 SQL避免了兩步操作之間可能出現(xiàn)的并發(fā)問題。3.3 文件上傳與圖片訪問策略商品圖片上傳是管理端必須的功能。我這里提供兩種方案看你的部署環(huán)境怎么選擇。方案一本地存儲在項(xiàng)目根目錄下的upload/images文件夾通過配置靜態(tài)資源映射來訪問。優(yōu)點(diǎn)是部署簡單方式是自定義一個WebMvcConfigurer來添加資源映射Configuration public class WebMvcConfig implements WebMvcConfigurer { Override public void addResourceHandlers(ResourceHandlerRegistry registry) { String uploadPath System.getProperty(user.dir) /upload/; registry.addResourceHandler(/upload/**) .addResourceLocations(file: uploadPath); } }PostMapping(/admin/product/upload) public ResultString uploadImage(RequestParam(file) MultipartFile file) { if (file.isEmpty()) { return Result.error(請選擇文件); } String originalFilename file.getOriginalFilename(); String ext originalFilename.substring(originalFilename.lastIndexOf(.)); if (!Arrays.asList(.jpg, .jpeg, .png, .gif).contains(ext.toLowerCase())) { return Result.error(圖片格式不支持); } String fileName System.currentTimeMillis() RandomUtil.randomNumbers(6) ext; String datePath DateUtil.format(new Date(), yyyyMMdd); File destDir new File(uploadPath datePath); if (!destDir.exists()) { destDir.mkdirs(); } file.transferTo(new File(destDir, fileName)); String url /upload/ datePath / fileName; return Result.success(url); }方案二把圖片上傳到某云存儲服務(wù)商的對象存儲桶里返回公網(wǎng)可訪問的 URL。這是生產(chǎn)環(huán)境的標(biāo)準(zhǔn)做法但需要你在云服務(wù)商控制臺創(chuàng)建一個 Bucket 并開通權(quán)限配置更麻煩一些。對于畢設(shè)和本地演示方案一足夠用了只要注意在上傳時做格式大小校驗(yàn)避免把可執(zhí)行文件偽裝成圖片傳上來。3.4 JWT 登錄鑒權(quán)與攔截器配置用戶登錄成功后后端返回一個 JWT 令牌前端在后續(xù)請求時通過Authorization: Bearer token頭發(fā)送。JWT 的核心結(jié)構(gòu)是 Header.Payload.Signature 三段式我用的生成方式如下public String generateToken(User user) { Date now new Date(); Date expireAt new Date(now.getTime() 7 * 24 * 60 * 60 * 1000); // 7天有效期 return Jwts.builder() .setSubject(String.valueOf(user.getId())) .claim(username, user.getUsername()) .claim(role, user.getRole()) .setIssuedAt(now) .setExpiration(expireAt) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); }攔截器里做的事很簡單從請求頭里取 token解析成功且未過期把 userId 和 role 存到ThreadLocal或HttpServletRequest的 attribute 中供后續(xù) Controller 使用。這里我推薦用HandlerInterceptor而不是Filter因?yàn)閿r截器能拿到 Spring 管理和容器對象比如直接注入 JWT 工具類而 Filter 在 Bean 獲取上會麻煩一些。不過這段攔截期間有個細(xì)節(jié)需要注意放行l(wèi)ogin、register、/product/**靜態(tài)資源等需要匿名訪問的路徑其他一律經(jīng)過校驗(yàn)。Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 放行跨域預(yù)檢請求 if (OPTIONS.equalsIgnoreCase(request.getMethod())) { return true; } String token request.getHeader(Authorization); if (StrUtil.isBlank(token) || !token.startsWith(Bearer )) { throw new BusinessException(401, 用戶未登錄); } try { Claims claims JwtUtil.parseToken(token.substring(7)); request.setAttribute(userId, claims.get(userId)); request.setAttribute(role, claims.get(role)); return true; } catch (Exception e) { throw new BusinessException(401, 登錄狀態(tài)已過期請重新登錄); } }4. 常見問題與排查技巧實(shí)錄4.1 數(shù)據(jù)庫中文亂碼和時區(qū)問題這是新手上路遇到的第一道坎?,F(xiàn)象是插入中文數(shù)據(jù)后查出來變成問號或者控制臺報(bào)The server time zone value ?D1ú±ê×?ê±?? is unrecognized的錯。歸根結(jié)底是連接串里沒有顯式指定編碼和時區(qū)。解決方式很直接數(shù)據(jù)庫連接 URL 加上三個參數(shù)就行jdbc:mysql://localhost:3306/pet_mall?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai這里缺characterEncodingutf8中文會亂碼缺serverTimezone會報(bào)時區(qū)異常兩個必須同時配置。另一個容易踩的地方是 MySQL 建庫時的默認(rèn)字符集如果建庫語句里沒指定 UTF8MB4Windows 上默認(rèn)會是 latin1這個和連接串無關(guān)要在 CREATE DATABASE 語句里顯式指定CREATE DATABASE IF NOT EXISTS pet_mall DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;4.2 MyBatis-Plus 實(shí)體映射導(dǎo)致的空指針項(xiàng)目里最常見的報(bào)錯之一就是查庫能查到數(shù)據(jù)但實(shí)體對象某些字段為 null后續(xù)代碼一用到就報(bào)空指針。排查思路分三步先看數(shù)據(jù)庫字段名和實(shí)體屬性名是否對應(yīng)再確認(rèn)map-underscore-to-camel-case是否打開最后看實(shí)體類有沒有加TableName和TableId注解。MyBatis-Plus 的實(shí)體類默認(rèn)認(rèn)為數(shù)據(jù)庫主鍵叫id如果主鍵字段叫user_id必須加TableId(user_id)注解否則插入和更新會把主鍵當(dāng)作普通字段處理導(dǎo)致 SQL 執(zhí)行失敗。這段經(jīng)驗(yàn)來自我實(shí)際調(diào)試的真實(shí)場景當(dāng)時 Orders 表主鍵是order_id實(shí)體類里對應(yīng)字段寫的orderId怎么查都查不到數(shù)據(jù)日志里打印的 SQL 是這樣的SELECT ... FROM orders WHERE id ?完全不是想要的語義。4.3 跨域請求被攔截如果是服務(wù)端渲染的模式跨域問題一般不明顯。一旦你前端頁面單獨(dú)啟動在另一個端口比如 Vue 開發(fā)服務(wù)器運(yùn)行在 5173Spring Boot 跑在 8080跨域請求就會被瀏覽器的同源策略攔截。解決方法是寫一個全局跨域配置Configuration public class CorsConfig { Bean public CorsFilter corsFilter() { CorsConfiguration config new CorsConfiguration(); config.addAllowedOriginPattern(*); config.addAllowedMethod(*); config.addAllowedHeader(*); config.setAllowCredentials(true); UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration(/**, config); return new CorsFilter(source); } }這串配置允許所有來源、方法和請求頭跨域訪問但當(dāng)allowCredentials(true)時不能允許具體的 origin 為*必須使用addAllowedOriginPattern才能配合 credentials 正常工作。這是瀏覽器規(guī)范的限制別在這里浪費(fèi)太多時間。4.4 訂單號并發(fā)重復(fù)自己實(shí)現(xiàn)電商系統(tǒng)不要用時間戳 隨機(jī)數(shù)直接拼訂單號并發(fā)高一點(diǎn)就會重復(fù)。我一開始用System.currentTimeMillis()加四位隨機(jī)數(shù)測試時連續(xù)快速下兩個訂單就撞號了。推薦幾種增強(qiáng)方案用數(shù)據(jù)庫的自增 ID 作為訂單號的一部分但這個暴露了業(yè)務(wù)量數(shù)據(jù)不適合外發(fā)給用戶用 Hutool 的IdUtil.getSnowflakeNextIdStr()生成雪花算法 ID按時間有序、全局唯一這是通用做法更保險的是在數(shù)據(jù)庫訂單表給order_no加唯一索引即使上層并發(fā)導(dǎo)致生成的訂單號重復(fù)數(shù)據(jù)庫也能兜底拒絕重復(fù)插入4.5 部署與演示常見問題速查問題現(xiàn)象可能原因解決方案啟動直接失敗端口被占用8080 被其他進(jìn)程占用netstat -ano查出 PID結(jié)束進(jìn)程或改server.port頁面能打開但樣式丟失Thymeleaf 緩存未關(guān)閉資源路徑引用錯spring.thymeleaf.cachefalse檢查th:href{/css/style.css}商品圖片 404上傳目錄和靜態(tài)資源映射不一致檢查upload目錄是否存在映射路徑是否包含日期子目錄項(xiàng)目打包后啟動報(bào)找不到主類打包配置有問題確認(rèn)spring-boot-maven-plugin的mainClass配置正確頁面顯示模板解析錯誤HTML 文件所在目錄不對Thymeleaf 默認(rèn)找templates/目錄下的.html子目錄要寫完整相對路徑5. 從這份項(xiàng)目里能拿走的東西做完這個項(xiàng)目最大的體會是“電商系統(tǒng)雖然看似到處都是 CRUD但核心難點(diǎn)其實(shí)集中在事務(wù)、并發(fā)和狀態(tài)流轉(zhuǎn)三件事上”。我實(shí)際開發(fā)時為了演示順暢給訂單狀態(tài)定義了一套完整的狀態(tài)流轉(zhuǎn)待支付、已支付、已發(fā)貨、已完成、已取消。每個狀態(tài)之間的合法跳轉(zhuǎn)我在 Service 層都做了校驗(yàn)比如已取消的訂單不能發(fā)貨已完成的訂單不能取消。這個設(shè)計(jì)在答辯時被問到“系統(tǒng)如何處理異常訂單”的時候回答起來非常加分。文檔和視頻資料的整理也是這個項(xiàng)目容易被低估的環(huán)節(jié)。運(yùn)行視頻錄一遍完整的操作流程代碼講解視頻分段錄制每段控制在 5 分鐘以內(nèi)重點(diǎn)講一個功能點(diǎn)的實(shí)現(xiàn)思路。寫文檔時把表結(jié)構(gòu)、接口清單和部署步驟分開寫明尤其是數(shù)據(jù)庫初始化腳本一定要在全新的 MySQL 實(shí)例上測試過一遍。這些看起來瑣碎但后期復(fù)盤或者給別人展示項(xiàng)目時價值不比代碼本身低。最后再分享一個小技巧項(xiàng)目里放一個README.md把啟動命令、數(shù)據(jù)庫初始化方式、默認(rèn)管理員賬號密碼都寫清楚。以后無論時隔多久回看這個項(xiàng)目或者直接把項(xiàng)目交給任何人運(yùn)行都能在五分鐘內(nèi)跑起來。這個習(xí)慣會為你省下大量不必要的時間損耗。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美少妇性乱| 青青草久草AV| 九久久九精品视频| 中文字幕日韩人妻视频| 色狠狠一区二区三区香蕉| 高树玛利亚无码流出| 日本操逼视频导航| 亚洲春色欧美激情自拍| 九九九九久久久久| 亚洲乱伦图片视频| 6080YYY午夜理论片在线观看| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲伊人久久精品影院| 欧美色图亚洲特色| 91在线丝袜视频| 99激情| 一牛影视成人片免费| 久久人| 男人的天堂久久狠| 亚洲色9| 久久99久久99久久99人受| av优播| 婷婷干黄色| 97超碰欧美中文字幕| 九九九九九九九九九九九蜜桃| 婷婷三区| 欧美日韩大陆黑人少妇99| 婷婷五月天小说| 久久久国产成人一区二区三区在线 | 91东京热男人的天堂| 日韩九九九| 久久精品日韩专区免费观看| 欧美极品少妇| 久久97精品久久久久久久不卡| 99久久99久久综合| 国产少妇与亚洲av| 欧美高清性猛交| 亚洲一二三精品久久网| 国产精品午夜成人福利| 大香蕉在线SuP| 欧美18禁91| 97久久精品亚洲| 丁香六月激情| 激情一区二区三区在线观看| 男人兔费天堂| 艳美熟妇先锋一二三区| 北京专精特新企业招聘信息| 欧亚第一综合网| 久久久久久91香蕉国产| 粉嫩AV输入| 天天操天天7| 亚洲高清少妇| 97欧美| 中英熟女操女| 肏逼福利网站| 人人摸人人叼| 久久日韩毛| 荡小穴在线观看| 人妻精品综合中文字幕在线| 人妻少妇久久中文字幕一区二区 麻豆 | 欧洲色色| 久久九七| 99色在线| 一二三区操逼国产91| 免费久久一级毛片大黄| 97欧美性爱| 激情干在线| 91 刺激在线| 91女人的网站| 亚洲图片在线| 亚洲激情视频| 日本午夜操逼| 日本在线不卡123| 东北老女人的激情视频| JuliaAnnXXX888| 亚州性色| 久久超碰日韩精品| 69一区二区三区 | 国产超碰人人爽人人做| 欲色综合| 这里只有精品视频在线观看麻豆| 九九色综合| 97se综合网| 嗯嗯啊啊的视频| 欧美天天综合在线| 蜜乳AV一区二区三区四| 久久久不能久久久久| 欧美 牲| 色香在线| 极品销魂美女一区二区| 亚洲综合中文字幕有码| 精品国产乱码久久久兰草影视| 亚欧美色图| 乱伦a片视频| 少妇一线天久久久久久| 熟女熟妇一区二区三四区| 久热精品在线国产| 女优免费一区二区永久| 国内毛片四区| 超碰在线国产| 久久精品99| 亚洲AV成人无码一二三久久| 亚洲人成色9999精品久久 | J?P?NESEHD熟女熟妇伦| 欧美 亚洲 综合 制服| 欧美超碰人妻97| av毛片aaaaa免费看| www.99色| 白丝AV| 热九九精品| 久久9精品网站| 国产极品美女高潮无套在线观看| 91劲爆| 午夜天堂精品久久久久91| 国产亚卅97| A 天堂| 亚洲精品久久久久久久久豆丁网| 啪啪视频免费在线观看| 欧美爆操91| 乱伦一二三区| 亚洲日韩久久精品一区| 91操人| 色婷婷婷五月天激情四射| 高潮9999外国| 国产女大学生AV| 一本色道综合久久欧美| 成 人 影视 一区 二区 三区 四区 | 大黄片做爱的大的| 99热免费精品| 青娱乐999| 亚洲精品性爱片| 久热无码| 人妻一区二区三区熟女| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 国产97av| 日韩人体偷拍| 伊人国产成人av网站| 日韩精品区二区三区不卡| 一本色道久久综合精品婷婷| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 欧美色图20P| 在线 制服丝袜中出 人妻| 亚洲性爱电影| 亚欧美综合网。| 正在播放国产精品一区| 91亚州欧美| 男女啪啪啪18禁网站| 成人A片男人的天堂| av绯色| 欧美少妇一区二区三区| 天天操女人| 亚洲成人精品在线一区| 日本不卡免费二区| 996热| 欧美激情区| 99爱在线视频| 无码人妻精品一区二区中文| 超碰碰小说97| 区日韩亚洲乱码av电影| 无码精品一区二区三区潘金莲| 好一吊区二区| 国产成人主播| 亚州情色j区| 伊人专区一区二区三区| 亚洲综合在线91| 国模限制级电影| 天天操天天干一区二区 | 日本 情色 1区2区3区| 五月天综合| 亚洲AV秘无码一区..| 精久久久| 男人天堂.AB| 综合久久六月久久婷婷| 日本成人免费一区二区三区| 超碰在线综合97| 超碰天天久久79| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 高清无码 国产精品| 上海一级黄片| 免费在线看黄片av| 超碰97男女| 亚洲综合性网址| 色五月综合| aⅴ日韩成人电影av在线免费看av大全| 日本欧美中文字幕| 超碰95| 欧美97免费| 日本大香蕉| 国产传媒美日韩av| 91 丝袜在线| 日韩伦理视频| 日韩成人色图| 992这里有精品| 成人片在线播放| 在线观看岛国有码| 五月综合婷婷久久网站| 国产丁香精品露脸视频| 任我爽在线视频免费观看 | 大香蕉青青9| 亚洲男人的天堂一区二区| 日本高清有码网址视频| 在线看免费无码AV天堂的| 成人一道本免费视频| 国产精品扒开腿做爽爽爽视频| 中出人妻中文字幕91在线| 啊啊啊啊啊好大好舒服想要| 啊操爽品善一区二区三区| 欧美18禁91| 97爱欧美| 日韩人人精品| 99999这里都精品| 九九九精品一区二区无码| 免费岛国一级片| 99蜜桃臀亚洲成人在线观看| 97免费免费视频网| 日韩国产九九精品一区二区三区毛片| 国产精品禁久久久精品| 老鸭窝在线视频播放| 天天日天天干天天摸天天操| 极品人妻少妇综合| 校园春色五月天| 好爽免费视频| se吧提供91精品国产91久久久久久| 久久久久久精| 日本黄色大片一级视频免费麻豆| 91人妻尻屄视频| 麻豆这里只有精品| 影音先锋乱| 五月天丁香| 五月激情综合网| 操人妻少妇中文 | 青苹果影院男人的天堂| 牛牛久久国产精品视频一二三| 亚洲综合113页| 欧洲乱码视频| 69久久| 国产后入| 久久肏大逼| 天天流夜夜操| 欧美综合在线91| 公司1区2区3区精产精| 日逼97| 韩国手机不卡无码三级视频| 五月天玖玖资源站| 男人亚洲天堂| 99re黄 | 殴美大黄片| 久久久久久午夜男人的天堂| 99久久综合| 国产精品色约约| 精…码一二三区| 亚洲精品毛片在线观看| 中出91| 亚洲一本色码中文字幕| 高清孕妇孕交 交| 日韩在线欧美精品一区二区| 成人性爱电影一区二区| 四虎国产成人精品免费一女五男| 日韩在线人妻网站| 日韩综合色图| 国模不卡| 桃色六月天| 国产中文字幕在线观看| 亚洲伊人久久综合97| 91三级理论片播放器| 日韩精品一二三四| 四虎精品一区| 日本东京热加勒比久久| 色色99| 伊香蕉综合久久久久久久噜噜噜| 美中日韩无码| 91成人在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 亚洲国产亚洲天堂| 午夜无遮挡男女啪啪视频| 天天操夜夜操| 精品人妻15区| hd成人一区二区在线| 国内黄色精品| 精品视频在线观看精品| 激情99| 国产精品在线一区二区| 开心激情站| 亚洲国内精品成人不卡| 欧美午夜视频精品久久| 天天干天天中出av| 天天日天天搞天天干| 久久久啊啊| 国产97色在线| 亚洲精品亚洲人成人网| 欧美亚洲手机在线| 天天添天天干电影| www.色吧5.com| 久久一区无码| 牛牛AV人人夜夜澡人人爽| 97超碰碰碰| 欧美综合91| 偷拍欧美综合| 久草精品国产99| 精品视频97| 日韩字幕一区| 国产25页| 亚洲精品a人片在线观看视| 91精品国久久久久久无码| 国产成人超碰在线| 91久久堂| 99色色网| 最新亚洲黄色免费电影 | 日韩欧美中文字幕搭讪巨乳美人妻视频| 欧美人妻一区| 人妻娇喘 激情视频| 色香91| 亚洲欧美人妻| 九九热超碰97亚洲最新香蕉| 精品少妇人妻av久久免费| 欧美激情色婷婷花野真衣一区二区 | 插插综合网天天影视网| 五月天综合在线| 精品综合久久久久久97| 99ri精品| 欧美成人一级麻豆| 日本精品国产视频| 另类小色呦| 91综合中文字幕| 国产亚洲欧洲在线观看| 丁香五月久久| 久热影视| 91观看 国产白丝| 情色日播放AV| 国产成人精品日本视频| 欧亚日韩一区在线| 久久久久密臀视频| 狠狠操狠狠爱| 无码丰满熟妇一区二区浪潮AV| 成人久久久精品| 免费人成?大片在线播放| 在线97在线| av操操不卡| 岛国视频一二三区| 国产97视频| 国产污视频麻豆传媒一区二区 | 久久天堂婷婷网| 日韩熟女操逼| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 欧美精品另类人妖xxxx| 欧美日韩香蕉| 欧美18老人禁| 欧美色另类| 九九九影院| 久久天堂婷婷网| 中文字幕精品一区欧美| 欧美黄色手机在线观看| 九热久| 欧美最大综合网| 看看小穴| 亚洲成人av色网| 亚洲综合中文字幕有码| 久久无码一区二区二三区性色| 人人操欧美风骚| 夜草欧美| 久草婷婷| 在线情色电影 91大| 江都AV在线| 人人射人人操人人摸| 99无码狠狠久久| 老司机福利社视频在线观看| 天天天天做夜夜夜夜做| 中文字幕在在线观看网站| 免费综合亚洲中文| 97精品视频网站| 91白虎| 青草视频人妻在线观看| 超碰性爱97| 亚洲午夜免费狠狠干| 综合欧美日韩在线观看| 青娱乐国产盛宴视频| 色婷婷六月丁香七月婷婷| 97极品无码| 大香蕉懂9| 伊人嫩草| 久久9久久| 日韩久射综合| 久久国产精品m码| 天天日天天干天天摸天天操| 97久久超碰亚洲| 99re在线视频这里只有精品| 日欧操屄视频| 高清国产成人无码| 日韩乱伦影音先锋| 男人的天堂一区三区| 日韩无码黄色片| 日韩国产乱子伦App| 欧美一级A片不卡视频。| 一级二级三级黑人无码| 97人妻免费中文字幕| 性在久久久久久| 丝袜美腿制服人妻二区中文字幕 | 自怕偷自怕亚洲精品| 超碰免费人妻人人| 国产视频一区二区三区在线免费观看 | 亚洲好看强奸乱伦| 国产精品探花视频| 婷婷在线播放| 一牛一区二区三区久久| 国产情色在线| 女人天堂av在线播放| 日韩国产精品人妻无码久久久| 国产福利电影| 尤物av网站| 欧美96在线|欧| 午夜天堂精品久久久久91| 日本色色色| 中文字幕91综合| 少妇人妻精品| 久久有码视频| 日本道不卡| 欧美中出| 亚洲精品国语在线播放| 欧美精品xxxwww| 强奸a片网| 午夜情侣自拍网站| 97欧美色综合| 亚洲激情视频| 嫩草一区二区在线观看| 人夜夜精品网站香蕉嫩草| 免费看污网站| 激情另类激情| 国产精品一区二区校花| 天天天天操| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 高清在线偷拍自拍视频| 欧美熟妇精品黑人巨大一二三区| 91老熟女91老女人| 高清有码一区二区| 久久精品性| 久久色激情一区二区三区| 亚欧美综合网。| 92久久| 色官网色综合| 蜜臀AV一区二区三区激情综合| 东京热99999| 国产一级高清免费观看| 久久久久亚洲Aⅴ无码| 午夜天天碰综合视频| 激情啪啪视频| 可以免费看黄片的视频| 丰满人妻-区二区三区免费| 亚洲一区二区 麻豆传媒| 一区二区三区看视频| 亚洲第一黄色av网站| 久久五月婷| 蜜桃久久综合视频| 日日不卡av| 国模限制级电影| 国产传媒美日韩av| 啊啊啊好想要| 亚洲精品男人的天堂| 欧洲性人爱视频| 欧美日综合| 91AV入口| 日本免费不卡二区| 久久久久亚洲Av无码专区老牛影视| 国产精选三级在线观看| 嗯~啊~快点 死我视频免费看网站| 思思久热在线精品66| 屌色在线97视频| 78m成人视线| 一本久道在线综合视频| 欧美1727免费观看视频| 亚洲情欲| 开心六月色| 网友自拍第1页 | 激情小说亚洲视频| 狠狠色噜噜狠狠狠狠狠色综合久久 | 亚洲91综合| 国产av又色又爽又黄| 妇人噜噜| 深夜国产一区二区三区在线看| 男人 天堂 日 亚洲| 免费的黄片有限公司| 91麻豆天美传媒HD| 欧美老妇曰批的视频| 好好的日:com久久九九| 黄色欧美性爱视频| 国内精品99999| 混色激情av| 日韩激情无码影院| 精品乱码在线观看| 色欲久久综合| 日产操逼| 久久人妇| 九九在线精品| 一级性爱视频免费观看 | 欧美在线视频观看一二三四区高清 | 欧美精品91| 亚洲一卡二卡在线免费| 熟女网站最新| 黄呦呦在线| 天天天肏屄欧美| 丝袜美腿诱惑亚洲欧美视频在线观看| 中文字幕一区二区三区50路| 麻豆黄四叶草网站| 最新中文字幕在线亚洲| 日本在线999| 中美日韩毛片| 亚洲AV无码乱码在线观看性色| 97视频免费播放| 人妻出轨一区二区三区| 亚洲色 国产 欧美 日韩| 天天干人人乐| 99re在线观看| 99这里只有精品| 日本性爱欧美性爱| 91高潮| 97碰碰日本乱偷人妻中文的| 91精品91久久久中77777| 久久久国产av美女私房| 人人妻人人爽人人精品| 97天天操天天干| 色网色网色网色网色网色| 五月丁香在线| 特级毛片特黄久久免费看| 久久久久久久久女黄| 狼人久草| 岛国网址国产 | 国产成人在线观看网址| 91精品免费| 区一在线观看| 亚洲午夜免费狠狠干| 亚洲系列第一页| av网站在线看| 猛猛干| 日本精品一区二区三| 久九九九九九九热| 五月丁香影院| 操逼日韩无码| 亚洲图片欧洲图片aⅴ| 色欲天天婬色婬香WWW夜色| 一本大道久| 亚洲性少妇| 久草婷婷| 大香蕉中文aV在线| 中文字幕乱码人妻一区二区三区,99精品| 日韩78m视频| 97在线免费看视频| 欧美色图自拍| 日韩大香蕉精品在线视频| 天天享受天天看| 综合日本女人伊人| 中文字幕在线播放2中文字幕在线观看2 | 手机在线播放国产福利| 97久久久久久久久久| 欧洲一区二区| 91天天c| 国产超碰在线一区| 超碰97男人| 成人日韩中文字幕| 男女激情中文字幕| 久久久久久久久久黄色网| 激情露脸爱| 亚洲人成色9999精品久久| 久久久爆乳翘臀一线天伦理视频| 99综合网| 一二三四日本视频高清| 一区二区久久天天干狠狠| 超碰久久性爱| 白丝jkav| 999九九九九国产动| 青青草国产一区二区三区| 日日玩天天干| 网友自拍第1页| 久久亚洲影院一区二区| 欧美熟妇精品黑人巨大一二三区| 天美国产精品| 超碰97在线 欧美 国产| 欧美在线55555| 精品一区二区三区四区外站| 综合性视频99| 91欧美网| 91精品人妻偷情| 老子午夜伦不卡影院| 国产一级不卡在线观看| 色色色色电影网| 精品一区二区三区蜜桃臀赵总 | 中文字幕熟女人妻丝袜丝| 97国产精品在线观看| 国产精品一区二区三区在线| 97在线免费视频| 成人av在线播放| 亚洲色 国产 欧美 日韩| 99久久9| 老熟女91av| 18禁久极品美女久久哦哟呀!| 97久久国产精品| 丝袜综合网| 久久欲| 亚洲夜夜欢无码一区二区| 亚洲中文字幕噜噜噜久久久| 丝袜无码a片| 97少妇人妻中文字幕久久| 另类图片综合| 首页中文字幕中文字幕免费| 国模一区二区三区| 亚欧美综合网。| 97在线免费看视频| 亚洲最新a在线观看| 欧美日韩超碰在线| 成人小说视频在线精品欧美| 日本一区视频在线观看| 婷婷色导航| 怡红院成人av| 欧美少妇人妻| 亚洲夜夜欢无码一区二区| 97大色网| 欧美日韩资源| 99re久久| 人人爽夜夜玩视频| 91精品久久久久五月天精品| 国产蜜臀精品一区免费尤物| 欧美女同在线| 色乱二区| 成人熟女区| av三级电影在线播放| 婷婷色中文字幕| A一级色女| 成人一道本免费视频| 日韩三级一区| 九九九久久久W精品| 成人性爱美曰韩| 久久久久七视频| 人妻精品视频一区二区三区| 丁香六月婷婷久久综合| 久久中文字幕人妻熟av女蜜柚| 国产高清免费不卡av| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 啊啊啊啊好爽好舒服一区二区易域| 久久久久久久亚洲Av无码| 亚洲精品国产精品乱码不卡| 精品一区二区三区国产 | 不卡在线观看视频| 狠狠干狠狠色| 成人青青草原伊人| 婷婷久久综合久| 抽插一区二区视频| 97天堂| 清纯唯美激情| 久久香蕉国产传媒一区剧情天美| 日韩一级二级三级| 日韩人妻资源在线看| 超碰诱惑| 爱爱动态120秒| 91快色色色色色| 日韩啪啪啪视频| 一区二区三区黄片免费观看| 亚洲天堂日本| 日韩人妻 中文字幕| 精品人妻一区二区三区夜夜| 久久精品毛片免费不卡| 久久机热| 伊人91| 91精品人| 干B| 中文字幕亚韩| 校园激情狠狠四射| 国产精品青青草| 99久久久久久亚洲精品不卡| 秋霞鲁丝午夜无码一区二区三| 操逼视频免费日韩无码| 色色97爱| 日本999精品视频| 女人 A一级| 欧美色老汉| 久久久久久久久九九久孕交| 后入美女国产| 骚女天天综合网| a级免费在线观看| 十八禁黄色成人网站观看| 性爱Av免费| 好爽要喷了| 射 色综合| 99在线免费公开视频| 九九九九九九免费视频| 大奶啊啊好爽| 一个人免费视频观看在线WWW| www.男人天堂| 丁香五月婷婷基地| 日韩免费高清大片在线| 色香伊人| 亚洲一区二区三区久久 亚洲一区二区| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 韩国手机不卡无码三级视频| 偷拍新久久| 色妹子A V| 顶级丝袜熟女一区二区三区| 2017天天操| 国产性爱欧美性爱在线| 男人的天堂2010| 人人操,操人人| 黄色无码高清黄色无码网站| 熟妇高潮二区三区| 国产超碰在线一区| 99热免费| 亚洲国产精品成人无码久久久| 97欧美精品| 蜜桃臀一区二区三区久久| 按摩中文字幕| 99精品在线| 婷婷丁香五月天亚洲天堂网| 欧美乱伦专区| 深夜视频| 少好三P| 日本A级视频| 青青网三级视频| 高清国产av无码| 中国国产精品一区视频| 成人一二| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 九一性生活免费视频| 国产精品久久久久久夜夜夜| 人人色人人操在线| 26uuu国产成人综合| 操人人| 曰韩中文人妻视频| 九九久久玖玖| 综合色欧美| 久久r精品| 男人的天堂日韩| 人妻丝袜肏逼| 久久九精品| 和协影院中文字幕三区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 偷偷人人精品女女久久| 精品美女人人干| 免费超碰97久久| 色眯眯av| 无卡一区=区| 日韩八十路老熟女| 超碰午夜| 区自美91| 日本不卡中文| 天天干夜夜鈤| 超碰97COm中文| 性色综合网| 麻豆久久一区二区三区| 七月婷婷综合| 成年人网站在线免费观看| 天美精品原创av片国产| 黄色大片视频在线免费看| 加勒比伊人| 极品销魂美女一区二区| 国产精品分类在线观看| 啪啪啪东京| AV污污污污| 亚洲一区中文字幕一区| 五月天社区| 后入美女国产| 色好看av| 加勒比av官网在线| 久久成人东京热人妻| 激情欧美97| 丁香色狠狠色综合久久小说| 黑人精品XXX一区一二区| 樱花蜜乳av| 韩国一级婬片A片AAAAA| 一区二区 韩日AV| 97在线免费看| 日韩午夜国产| 少妇蹲下买菜露大唇0| 精品九区| 99这里只有精品国产| 日韩乱伦视频| 啊啊啊不要好疼视频| 青青草在线视频人人想人人上| 亚洲男人的天堂AV| 大香蕉男人的天堂| 搡老熟女国产1000部| 欧美性夜| 国产一区二区a毛片| 韩国久久97| 99久热| 伊人大香蕉在线| 中文字幕十五区| 欧美啪啪啪91| 思思热在线视频免费| 人人看欧美性爱| 99精品视频在线观看| 欧美情色男人的天堂| 色综九九九一区| 成年人网站在线免费观看| 96久久精品一二三区色欲| 九九热在线视频| 色超碰综合| 夜夜躁狠狠躁日日躁av| 天天综合网日韩7799| 久久久蜜桃一区二区三区| 久久久久密臀视频| 91狠狠综| 99九九久久| 99综合自拍| 青娱乐妇女性生活| 97国产高清视频在线观看| 嗯嗯嗯嗯啊啊啊好紧好大| 青青草国产一区二区三区| 亚洲无码国产探花在线观看| 欧美99热| 亚洲在钱| 性爱Av免费| 亚洲综合码| 我想要 啊 啊 啊| 日本午夜久久电影| 在线情色电影 91大 | 久久婷婷一区二| 天天爽入口| 中文字幕91页| 性爱欧美五月| 色欲Av人妻精品一区二| 久久国产精品一级二级三级| 青青操在线视频| www.色婷婷色综合| 大乔未久88一区| 狠狠色噜噜狠狠狠狠2018| 黄页18禁| 91色色网站| 殴美牲| 国产深夜福利| 97天天摸天天碰| 亚洲欧美另类小说| 色综合一区二区三巨| 欧美AB在线| 国产一区96在线| 91亚州| 亚洲久草AV色图| 国产日逼视频| 91日产欧美| 日韩欧美aⅴ综合网站发布| 国产日韩人人| 青青伊人这里只有精品| 操死我了嗯嗯嗯| 18禁中文字幕| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久久久97| 美女骚尻视频| 亚洲欧美国产成人综合不卡| 69丨亚洲丨精品丨入口免费播放| 强奸乱伦Av网| 后入福利| 婷婷五月天激情小说| 蜜臀久久久99久久久久 | 亚洲天堂一区二区久久| 天天天天天天天天综合| 日韩丰满熟妇| 一本一道久久综合久久| 亚洲黄色影视| 男人的天堂2018| 久久精品免费| 国产AV色黄看到爽| 天天操天天7| 91人妻PORNY九色大屁股| 上床啊啊啊| 精品.99999| 国产一区二区三区视频在线看| 丝袜高跟澳门91视频| 久久五月视频| 天天影视色香欲综合网小说| 91国产美女丝袜足交精品视频 | 六九九九| 日韩无码一级黄色av片| 91嫩草欧美| 欧美成人黄网色网站| 欧美熟妇精品黑人巨大91| 啊啊啊啊啊操我视频| 青娱乐淫乱1314| 天操老女人| 99热综合| 国产野战露脸在线播放| 亚州欧美在线| 少妇同性| 亚洲成av人片色午夜乱码| 亚洲色欧美| 日韩97视频| 荡小穴在线观看| 国产无马视频| 97免费视频在线观看| 国产精品久久久久久久久久久久久久久久 | 久色网| 国产多人在线观看视频| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 欧美在线永久天堂| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 国产一级片| 人人干黄色| 综合色区偷拍| 伦理弟一页| 亚码激情| 色欲日韩欧美在线一区| 搡老熟女免费视频 | 在线无码视频| 97资源久久| 亚洲麻豆18发?| 亚洲、日韩、综合、另类| WWW黄片COM| 啪啪视频亚洲第一| 爱爱啊啊啊| 亚洲精品熟妇1区2区3区。| 免费网站观看www在线观| 成人欧美一区二区三区黑人一| 麻豆av一区二区| 一级A片女人高潮叫床| 色综合久久久久| 91天堂视频| 玖玖爱免费观看视频| 97免费视频在线| 欧美极品色| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 欧美A√综合网| 在现视频女上位好爽| 免费视频a级毛片免费视频| 亚洲国产ⅴ高清在线观看| 一二三区操逼国产91| 久久免费9| 加勒比99999| 91欧美少妇| 欧美日韩97在线| 精吧天堂| 综合天天。| 久久人妻少妇| 亚洲天天影视色综合| 99国产精品免费| 欧美一区二区日韩传媒搭讪精品| 久久本道| 蜜桃精品一区二区三区ww| 天天影视网综合少妇| 丁香五月社区| 东京热亚洲一区二区| 久草五月| 日本超碰在线国产一区| 夜夜嗨一区二区| 激情文学网伊人| 天综合网| 欧美亚综合色图| 91色图片| 裸体美女久久久| 亚洲凸凹超碰成人| 超碰97导航| 女人18精品一区二区三区| 后入式999| 91N综合网| 夜夜欢天天干| 亚洲天天综合| 蜜乳成人AV| 欧美性爱第一区| 国语精品内射在线观看| 综合第一页| 日日日日做夜夜夜夜做无码97| 欧洲亚洲天堂精品| 中出人妻中文字幕91在线| 999久久芭蕾| 亚洲视频精选| 一起草三级AV电影在线观看| 国产精品不卡一区二区三区av| 激情 欧美 亚洲 小说| h4610国产人妻| 日本亚洲熟女视频| 欧美性天天影视| 熟女天天干| 久久久国产护士丝袜美腿一| 一本一道久久综合久久| 奶水 人妻 哺乳 在线| 麻豆精品.欧美精品.日韩精品.| 亚洲欧美电影| 免费?级毛片无码?∨蜜芽试看| 国产高清MV操逼视频| 婷婷五月天影院| 物尤视频一区二区| 神马久久免费电影观看| 日韩成年人性爱视频| 一区二区影院| 曰韩精品九九无码| 99色骚| 日本Suv精品一区二区| 日韩精品字幕| 大屁股xxxxx| 亚洲第一页欧美| 99热线麻豆 | 亚洲性爱无码乱伦av| 97久久资源| 国产风韵犹存熟妇三区| 国产精品白丝| 在线综合色| 北条麻妃99精品青青久久| 亚洲一区制服诱惑| 色婷婷国产精品一区在线观看| 熟女精品va中文字幕| 婷婷色一区| 男人的天堂三级| 男女激烈网站最新| 免费看毛片操穴| 狠狠爱AV| 2025年A片视频精品| 91超级碰| 嗯嗯啊啊的视频| 乱伦一二三| 激情丁香五月婷婷| 中文字幕伊人| 国产在线观看91精品一区| 狠狠操天天干| 97操综合| 久久久久久电影| 91啪9色| 99热精品在线播放| 中文字幕视频2区| 蜜桃传媒视频第一区入口在线看| 婷婷在线视频在线观看| 成人欧美一区二区三区黑人一| 91精品国产乱码| 八戒午夜福利理论片| 婷婷色一区| 麻豆一区二区AV天美| 伊人久操| 偷拍2020| 一级黄色视频网| 中文字幕人妻色偷偷久久皮 | 一起草高清无码| 丁香激情网| 超碰久久.com| 黄色av一区二区在线| 午夜精品久久久99热蜜桃的功能特点| 国产最火爆久久国产网站网站| 中日无幕一二三四区| 91爱网| 日韩AV电影网站| 国产精品第一页国产大屁股视频免费区| 超碰91在线| 91成人精品| 丁香五月婷婷基地| 狠狠入| 午夜精品一区二区三区三上悠亚| 国产精品欧美在线观看| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 最新的亚洲无吗| 91影视亚洲| 欧美亚州手机在线| 久久精品—区二区三区内射| 久久黄黄| 男啪女色黄无遮挡免费观看| 嗯啊啊啊轻点视频 | 3P乱轮视频| 天天干1区2区在线| 国产免费一区在线观看| 97美日韩视频| 午夜精品久久久久久久男人的天堂| 久久精品超碰| 国内精品999| 国产兽交视频在线播放| 欧美少妇性乱| 久久久麻豆精品| 亚洲男人天堂手机版| 丁香五月天婷婷姐| 伊人五月天婷婷| 亚洲综合贴图91| 亚洲欧美国产日本一区二区三区| 在线洲亚线| 台欧久久精品视频| 翔田千里一区二区三区奶水| 蜜臀av网址| 猛交交| 三级激情网站| 国产精品一区在线播放| 久久精品欧美一区蜜桃| 国产精品久久久久久高清无码免费看| 日日日骚女人精品| 亚洲欧洲综合视频在线| 七月丁香婷婷| 夜夜 中文视频rt| 丁香五月成人| 十八禁av无码免费网站APP| 青青草在线视频美女| http://qxhbdz.com| 再深点灬舒服灬太大了添视频| 97亚洲自在精品在线观看| 有码免费观看| 亚欧高清v| 一级片视频啪啪| 精品一区二区2| 曰本精品久久久| aaa一级黄片| 大屁股人妻女教师撅着屁股| WWW美腿丝袜香蕉中文| 青娱乐av在线| 爆操无码| 久久性爱视频免费看| 春色综合免费| 熟女自慰久久久| 91超级碰碰| 欧美精品日韩久久久九| 97久久国产| 搡老女人老91妇女熟女| 婷婷国产精品九区| 日本岛国黄色网址 | 亚洲国产亚洲天堂| 欧美久久婷| 色狠狠色| 强奸乱伦Av网| 国产兽交视频在线播放| 91观看 国产白丝| 99后入| 亚洲永久永久永久永久一级一级一级精品 | 亚洲aV性爱| 免费人成在线观看网站品爱网| 日韩有码专区| 亚洲少妇自拍中文字幕懂色| 97日视频| 九九九九九九九九九九九免费国产| 第一高清av中文字幕| 操操逼操操逼操操逼逼| 久久精品 六十路 熟女 欧美| 91丰满| 亚洲中字慕不卡| 色情综合网| 蜜臀久久99精品久久久久久婷婷| 激情终合网| 老鸭窝亚洲毛片| 欧美色图天堂在线| 影音先锋中文字幕日本好一区二区| 在线有码中文字幕| 亚洲综合电影| 国产传媒av天美传媒在线| 麻豆天天躁天天揉揉AV| 欧美日韩人妻少妇 一区二区三区| 一区二区精品更新提醒| 四虎影库国产精品免费| 午夜人妻精品综合在线| 探花精品视频| 亚洲AV无码国产成人| 偷拍自拍在线视频观看| 中文字幕亚洲热播人妻| 亚洲精品国产熟女| 亚洲无无码αⅴ每日更新| 东北少妇高潮zzzz| 91 欧美| 农村女一级毛卡片| 国产白丝av| 久久久久久9| 中文字幕一区二区视频在线观看| 激情欧美97| 97综合在线| 精品人妻一区二区三区四区不卡在| 春色综合网| 青青草福利视频| 精品久久久久久久| 无码人妻一区二区三区免费九色| 啊啊啊啊好爽好舒服一区二区易域| 一区二区影视| 丰满熟女一区二区三区在线播放| 中欧人妻丝袜中文字幕 | 亚洲高清在线| 久久小视频| 日本人妻一区二区| 成人网欧美风情| 国产妇女精品视频青青草|