欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

MyBatis-Plus代碼生成器實(shí)戰(zhàn):從數(shù)據(jù)庫表到CRUD代碼一鍵生成

MyBatis-Plus代碼生成器實(shí)戰(zhàn):從數(shù)據(jù)庫表到CRUD代碼一鍵生成 前陣子幫朋友維護(hù)一個(gè)老系統(tǒng)數(shù)據(jù)庫里二十多張表業(yè)務(wù)不算復(fù)雜但每張表都得配實(shí)體類、Mapper接口、XML、Service、ServiceImpl、Controller。一開始我還挺有耐心手寫了四五張表以后實(shí)在頂不住全是機(jī)械重復(fù)的增刪改查真正要動腦子的業(yè)務(wù)邏輯反而沒時(shí)間看。后來把MyBatis-Plus 代碼生成器也就是常說的數(shù)據(jù)庫逆向工程接進(jìn)來從表結(jié)構(gòu)到可運(yùn)行的代碼一分鐘不到就能產(chǎn)出一套我把省下來的時(shí)間全花在業(yè)務(wù)優(yōu)化上。今天這篇就把我實(shí)際配置、跑通、二次改造的完整過程寫出來包括版本選擇的坑、連接串里的雷區(qū)、模板改造的細(xì)節(jié)以及生成之后必須處理的幾件收尾事。本文適合誰看如果你正在用 MyBatis-Plus 寫后端接口或者項(xiàng)目里有一堆表等待建 CRUD又或者你之前試過動軟、軟著代碼生成器這類老工具但覺得生成結(jié)果太死板、不好改這篇應(yīng)該能幫到你。我盡量把每個(gè)配置項(xiàng)背后的理由講清楚不光是給一段能跑的代碼而是讓你知道哪一項(xiàng)改了對結(jié)果有什么影響這樣你拿到自己的項(xiàng)目里也能靈活調(diào)整。1. 還在手寫CRUD的人值得重新認(rèn)識一下數(shù)據(jù)庫逆向工程1.1 從動軟到MyBatis-Plus老派生成器為什么讓人又愛又恨如果你做過一段時(shí)間的后端開發(fā)多少聽過動軟代碼生成器或者某些軟著申請配套用的代碼導(dǎo)出工具。這些工具在當(dāng)年確實(shí)解決了大批量建代碼的問題連上數(shù)據(jù)庫選擇表點(diǎn)擊生成Controller、Model、DAL 一堆文件就出來了。但用過的同學(xué)大概率有同感生成的東西太重且太老模板結(jié)構(gòu)是固定的想加個(gè) Swagger 注解、想把主鍵策略換一下、想讓實(shí)體類繼承公共父類都要去翻生成器的配置界面試半天或者生成完手動批量替換。更麻煩的是這類工具生成的代碼往往和項(xiàng)目里實(shí)際使用的框架版本脫節(jié)拿回來還要改依賴、改命名空間規(guī)模一大反而比手寫還累。MyBatis-Plus 代碼生成器是另一種思路它以依賴庫的形式直接寄生在你的項(xiàng)目里你寫一段 Java 配置去驅(qū)動它生成結(jié)果天然貼合 MyBatis-Plus 的體系——實(shí)體類帶TableName、TableIdMapper 繼承BaseMapperService 繼承IServiceController 里直接注入IService調(diào)用現(xiàn)成方法。它不追求生成一套完整的三層架構(gòu)而是生成一套能被 MyBatis-Plus 直接驅(qū)動的骨架。所以相比之下它的生成結(jié)果更輕、更貼合主流 Spring Boot 項(xiàng)目的習(xí)慣改起來也容易。1.2 逆向工程到底能替你做什么、不能替你做什么剛接觸代碼生成器的人容易把它想象成一個(gè)輸入數(shù)據(jù)庫、輸出整個(gè)項(xiàng)目的神器實(shí)際不是這樣。MyBatis-Plus 代碼生成器做的事本質(zhì)上只有一件讀取數(shù)據(jù)庫表結(jié)構(gòu)字段、類型、注釋、索引、主鍵翻譯成 Java 代碼文件。它能穩(wěn)定解決的是單表 CRUD 那 80% 的重復(fù)勞動。它能替你做的我總結(jié)下來主要有這些根據(jù)表名和字段名生成實(shí)體類自動把user_name轉(zhuǎn)成userName下劃線命名轉(zhuǎn)駝峰。根據(jù)主鍵類型生成對應(yīng)的TableId注解配置好自增或輸入型主鍵策略。生成 Mapper 接口和 XML 文件XML 里預(yù)留好ResultMap和基礎(chǔ)字段列表。生成 Service 接口與實(shí)現(xiàn)類自動繼承IService/ServiceImpl自帶save、removeById、page等通用方法。生成 Controller提供一套最基礎(chǔ)的增刪改查 REST 接口。把數(shù)據(jù)庫字段注釋同步成實(shí)體類字段的 Javadoc代碼可讀性直接從零分拉到及格線。它不能替你做的也很明顯跨表復(fù)雜查詢、業(yè)務(wù)狀態(tài)流轉(zhuǎn)、權(quán)限校驗(yàn)、數(shù)據(jù)權(quán)限過濾這些還是要自己寫。所以我的建議是把生成器當(dāng)腳手架別把它當(dāng)業(yè)務(wù)引擎。它負(fù)責(zé)把地基和承重墻搭好里面的裝修和功能分區(qū)得自己來。2. 版本與依賴先把環(huán)境里的坑填平2.1 版本矩陣主框架與生成器版本號并不總是一一對應(yīng)我第一次用 MyBatis-Plus 代碼生成器時(shí)踩的坑就是版本號配錯。項(xiàng)目里mybatis-plus-boot-starter用的是3.5.3.1我隨手找了一篇老文章把mybatis-plus-generator配成了3.5.1結(jié)果AutoGenerator類的 API 對不上編譯直接報(bào)錯。后來才知道MyBatis-Plus 的主框架版本和代碼生成器版本是從某個(gè)版本開始各自獨(dú)立演進(jìn)的生成器并不是跟著主框架的版本號走的。這里簡單梳理一下版本演變的脈絡(luò)。在3.5.1及之前大家常見到的寫法是AutoGeneratorGlobalConfigDataSourceConfigPackageConfigStrategyConfig用鏈?zhǔn)?setter 來配置。到了3.5.2之后官方主推FastAutoGenerator配置方式從先 new 對象再逐步 set變成了create lambda 回調(diào)代碼更簡潔。到我現(xiàn)在用的3.5.4/3.5.3這些版本里FastAutoGenerator已經(jīng)很穩(wěn)定了。我建議你自己項(xiàng)目里如果主框架是3.5.x直接上FastAutoGenerator別再用老的AutoGenerator。如果主框架還是3.4.x那生成器也得跟著用對應(yīng)老版本否則啟動時(shí)可能出現(xiàn)方法找不到之類的兼容問題。這里提供一個(gè)我測試過的版本組合dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.5.3.1/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-generator/artifactId version3.5.3/version /dependency dependency groupIdorg.freemarker/groupId artifactIdfreemarker/artifactId version2.3.32/version /dependency注意最后那個(gè)freemarker這是模板引擎依賴。生成器本身不內(nèi)置模板引擎官方默認(rèn)使用的是 Velocity但如果你的項(xiàng)目里沒有引入 Velocity運(yùn)行時(shí)會報(bào)找不到模板引擎相關(guān)的類。我習(xí)慣用 Freemarker因?yàn)樗哪0逭Z法我相對熟而且 Spring Boot 項(xiàng)目里很多時(shí)候已經(jīng)依賴了它不會有沖突。如果你要用 Velocity就引入velocity-engine-core用 Beetl 就引入beetl。這步最容易漏漏了之后生成器代碼本身能編譯一運(yùn)行就報(bào)錯。2.2 數(shù)據(jù)庫連接串里的隱藏雷區(qū)驅(qū)動、時(shí)區(qū)與 nullCatalogMeansCurrent搞定 Maven 依賴之后第二個(gè)大坑出現(xiàn)在數(shù)據(jù)庫連接串上。生成器要連數(shù)據(jù)庫讀表結(jié)構(gòu)這一步跑不通后面全是空談。首先要確認(rèn) MySQL 驅(qū)動版本。MySQL 5.x 用的是com.mysql.jdbc.Driver但新版 MySQL 驅(qū)動已經(jīng)把老驅(qū)動類標(biāo)記過時(shí)換個(gè) MySQL 8.x 版本就要改成com.mysql.cj.jdbc.Driver。我的習(xí)慣是直接用com.mysql.cj.jdbc.Driver配合mysql-connector-j8.x 驅(qū)動不管連 MySQL 5.7 還是 8.0 都能跑。如果你用的是連接池包驅(qū)動類名照抄就行不用額外處理。然后是連接串的 URL 參數(shù)。一個(gè)比較常規(guī)的示例是jdbc:mysql://127.0.0.1:3306/my_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghainullCatalogMeansCurrenttrue這里幾個(gè)參數(shù)缺一不可useSSLfalse不關(guān)掉 SSL 握手某些環(huán)境下連接會非常慢甚至超時(shí)。生成器本來是一次性工具能少一事是一事。serverTimezoneAsia/ShanghaiMySQL 8.x 驅(qū)動強(qiáng)制要求設(shè)置時(shí)區(qū)不設(shè)就會報(bào)The server time zone value ... is unrecognized代碼根本跑不起來。nullCatalogMeansCurrenttrue這是個(gè)冷門參數(shù)但建議從一開始就加上。它解決的是連接串里指定了數(shù)據(jù)庫名之后驅(qū)動在讀取表清單時(shí)把catalog當(dāng)成 null導(dǎo)致去讀系統(tǒng)庫比如information_schema或其它你有權(quán)限的庫的表生成出一堆莫名其妙的表。加上這個(gè)參數(shù)驅(qū)動會更嚴(yán)格地按照連接串里的庫名去讀取避免明明只想生成用戶表結(jié)果把系統(tǒng)表也掃進(jìn)來的情況。還有一個(gè)隱藏問題生成器對 MySQL 8 和 MySQL 5 的元數(shù)據(jù)讀取方式有差異如果你用的是 MySQL 5.6連接串里serverTimezone參數(shù)可能反而不被識別那就要看驅(qū)動版本必要時(shí)降級驅(qū)動??傊劝羊?qū)動和連接參數(shù)對齊再往下配生成器。3. FastAutoGenerator核心配置拆解每一項(xiàng)設(shè)置都帶著理由3.1 全局配置從代碼風(fēng)格到注釋歸屬配置代碼寫起來不復(fù)雜但每一項(xiàng)的含義和影響范圍值得逐一看清楚。我先把一個(gè)完整的FastAutoGenerator示例放出來后面再拆開講FastAutoGenerator.create( jdbc:mysql://127.0.0.1:3306/my_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghainullCatalogMeansCurrenttrue, root, 123456) .globalConfig(builder - { builder.author(shipan) // 作者名會寫到類注釋里 .enableSwagger() // 生成 Swagger 注解 .dateType(DateType.TIME_PACK) // 時(shí)間類型用 java.time 包 .commentDate(yyyy-MM-dd) // 生成注釋里的日期格式 .outputDir(System.getProperty(user.dir) /src/main/java); }) .packageConfig(builder - { builder.parent(com.example.demo) .moduleName(system) .entity(entity) .mapper(mapper) .service(service) .serviceImpl(service.impl) .controller(controller) .pathInfo(Collections.singletonMap( OutputFile.xml, System.getProperty(user.dir) /src/main/resources/mapper)); }) .strategyConfig(builder - { builder.addInclude(sys_user, sys_role, sys_user_role) .addTablePrefix(sys_) .entityBuilder() .enableLombok() .logicDeleteColumnName(deleted) .versionColumnName(version) .enableTableFieldAnnotation() .controllerBuilder() .enableRestStyle() .formatFileName(%sController); }) .execute();globalConfig里的author會直接進(jìn)到每個(gè)類的 Javadoc 注釋里團(tuán)隊(duì)協(xié)作時(shí)建議寫真實(shí)姓名或工號方便追溯。enableSwagger()開不開取決于項(xiàng)目里是否已經(jīng)集成了 Swagger/OpenAPI如果集成了就開生成的實(shí)體類字段上會自動加ApiModelPropertyController 方法上會加ApiOperation如果項(xiàng)目里沒集成 Swagger開了反而編譯不過。dateType(DateType.TIME_PACK)是我個(gè)人的偏好把Date替換成LocalDateTime現(xiàn)代項(xiàng)目基本都是這個(gè)約定避免一堆Date類型在時(shí)間格式化上反復(fù)踩坑。commentDate控制的是類注釋里since 2025-01-01這種日期的格式默認(rèn)帶時(shí)間分秒我改成純?nèi)掌诟蓛粢稽c(diǎn)。3.2 包名與模塊劃分決定代碼長在哪棵樹上packageConfig最大的作用是決定代碼生成到哪個(gè)包下面。很多人只配置了parent沒配置moduleName結(jié)果所有類都直接堆在com.example.demo下面項(xiàng)目結(jié)構(gòu)立刻變成一鍋粥。我的做法是parent寫項(xiàng)目的根包moduleName寫當(dāng)前模塊或業(yè)務(wù)域的名字比如system、order、user這樣生成的類會落在com.example.demo.system.entity、com.example.demo.system.mapper這類路徑下一個(gè)業(yè)務(wù)域一個(gè)包找代碼和做權(quán)限控制都方便。還有個(gè)細(xì)節(jié)容易忽略entity、mapper、service、serviceImpl、controller這些子包名默認(rèn)是英文如果你們團(tuán)隊(duì)有自己約定比如用model、dao、manager代替默認(rèn)名稱也可以在這里改。真正決定輸出路徑的是包名 Java 源碼目錄所以不要只改子包名而忘了確認(rèn)最后的輸出目錄是否在src/main/java下。特別要提的是pathInfo這一項(xiàng)。默認(rèn)情況下生成的 XML 文件會放在src/main/java對應(yīng)的包目錄里這不符合 Maven 工程的約定。正常的 XML 應(yīng)該放在src/main/resources/mapper下。所以必須用pathInfo把OutputFile.xml指向資源目錄否則后續(xù) MyBatis 掃描 XML 時(shí)會找不到文件。這是我每次配置必寫的一項(xiàng)而且它只影響 XML 的輸出位置不改變 Mapper 接口的包名兩者互不影響。3.3 策略配置收窄生成范圍保留擴(kuò)展余地strategyConfig是整個(gè)生成器里最需要花心思的部分。第一件事是明確要生成哪些表。addInclude就是白名單只生成指定的表。為什么不直接全庫生成因?yàn)楹芏鄻I(yè)務(wù)庫里會有各種歷史表、臨時(shí)表、統(tǒng)計(jì)表這些表根本不需要生成 CRUD 代碼全庫生成會制造一堆垃圾類。用addInclude收窄范圍每次跑生成器之前先想清楚這次要動哪些表代碼產(chǎn)出可控。特殊情況下可以用addExclude排除表但我印象里用白名單比黑名單理性因?yàn)槟阍谡f我只要這些而不是除了這些我都要。addTablePrefix(sys_)表示生成實(shí)體類時(shí)去掉sys_前綴。比如表名sys_user生成的實(shí)體類是User而不是SysUser。這個(gè)前綴設(shè)計(jì)在大型項(xiàng)目里比較常見表名用統(tǒng)一前綴做業(yè)務(wù)域隔離但 Java 類名里不需要這個(gè)前綴。如果你的表已經(jīng)叫user_info沒有多余前綴那addTablePrefix就不加讓user_info直接轉(zhuǎn)成UserInfo即可。entityBuilder下面的幾項(xiàng)也值得說說。enableLombok()開啟后生成的實(shí)體類上會加Data注解不生成一堆 getter/setter 方法代碼立刻簡潔一個(gè)量級前提是項(xiàng)目里已經(jīng)引入了 Lombok 依賴否則編譯報(bào)錯。logicDeleteColumnName(deleted)指定表里的邏輯刪除字段名生成器會在實(shí)體類對應(yīng)字段上自動加TableLogic注解這樣走 MyBatis-Plus 的通用刪除方法時(shí)就會自動改成update語句而不是delete語句這是線上系統(tǒng)不能省的安全底線。versionColumnName(version)指定樂觀鎖版本字段生成的字段上會帶Version配合后續(xù)配置的樂觀鎖插件就能實(shí)現(xiàn)并發(fā)更新的安全控制。enableTableFieldAnnotation()比較容易被忽略。開啟后實(shí)體類每個(gè)字段上都會加TableField(列名)雖然 MyBatis-Plus 默認(rèn)也能根據(jù)駝峰轉(zhuǎn)下劃線自動映射但顯式標(biāo)注可以避免字段名里出現(xiàn)特殊詞、多詞縮寫時(shí)映射錯亂。代價(jià)是代碼稍微啰嗦一點(diǎn)但穩(wěn)妥性更好。我傾向于開啟尤其是在接手老表、字段命名不規(guī)范的情況下這個(gè)注解等于一個(gè)保護(hù)罩。最后是controllerBuilder部分。enableRestStyle()讓生成的 Controller 自動加RestController而不是Controller省得每生成完一批代碼還手動改一個(gè)注解formatFileName(%sController)控制類名格式默認(rèn)就是UserController這種一般不用改但如果你不喜歡 Controller 后綴也可以改成%sApi之類。3.4 數(shù)據(jù)源配置選擇目標(biāo)庫的正確姿勢可能有人會問FastAutoGenerator.create(url, username, password)不是已經(jīng)寫了連接信息嗎為什么還要單獨(dú)配置數(shù)據(jù)源原因在于create方法接受的是最簡單的基礎(chǔ)連接參數(shù)而dataSourceConfig允許你指定更細(xì)的數(shù)據(jù)庫類型、驅(qū)動類名以及自定義數(shù)據(jù)庫類型轉(zhuǎn)換規(guī)則。對于大部分單數(shù)據(jù)源項(xiàng)目直接create(url, username, password)就夠了。但如果你連接的是 PostgreSQL、Oracle 或者 SQLServer推薦用dataSourceConfig顯式聲明FastAutoGenerator.create( new DataSourceConfig.Builder(url, username, password) .databaseQueryClass(SqlQuery.class) // 默認(rèn)根據(jù) url 判斷一般不用手動指定 .typeConvert(new MySqlTypeConvert()) .build() )實(shí)際項(xiàng)目中我用得最多的是默認(rèn)行為。只有當(dāng)數(shù)據(jù)庫驅(qū)動無法被自動識別或者字段類型映射不符合預(yù)期的時(shí)候才需要顯式去改。比如 MySQL 的tinyint(1)在某些版本里會被映射成Boolean但業(yè)務(wù)上可能希望映射成Integer這時(shí)就需要自定義typeConvert來處理。這個(gè)屬于進(jìn)階玩法新手可以先跳過等遇到具體問題再回來調(diào)。4. 從建表到出代碼一次完整逆向工程演示4.1 準(zhǔn)備一張覆蓋常見場景的業(yè)務(wù)表光講配置不落地看完還是不會用。我拿一張實(shí)際業(yè)務(wù)表跑一遍完整流程你可以照著建表、照著生成然后對比結(jié)果。假設(shè)我們要生成一個(gè)系統(tǒng)用戶相關(guān)的代碼表結(jié)構(gòu)如下CREATE TABLE sys_user ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵ID, username varchar(50) NOT NULL COMMENT 用戶名, password varchar(100) NOT NULL COMMENT 密碼, nickname varchar(50) DEFAULT NULL COMMENT 昵稱, email varchar(100) DEFAULT NULL COMMENT 郵箱, phone varchar(20) DEFAULT NULL COMMENT 手機(jī)號, status tinyint(1) DEFAULT 1 COMMENT 狀態(tài)1啟用 0禁用, deleted tinyint(1) DEFAULT 0 COMMENT 邏輯刪除標(biāo)記0未刪除 1已刪除, version int(11) DEFAULT 0 COMMENT 樂觀鎖版本號, remark varchar(500) DEFAULT NULL COMMENT 備注, 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) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT系統(tǒng)用戶表;注意我在建表時(shí)把每個(gè)字段的COMMENT都寫清楚了。這一步非常關(guān)鍵因?yàn)樯善鲿炎侄巫⑨屩苯幼兂蓪?shí)體類字段的 Javadoc。如果建表的時(shí)候圖省事不寫注釋生成的實(shí)體類是干干凈凈的后面看代碼的人只能去翻數(shù)據(jù)庫體驗(yàn)極差。好的表結(jié)構(gòu)是好代碼的第一步這句話在代碼生成器場景下體現(xiàn)得淋漓盡致。這張表里涵蓋了常用的字段類型主鍵bigint自增、字符串、整數(shù)、布爾、日期時(shí)間還有邏輯刪除字段deleted和樂觀鎖字段version生成的代碼能覆蓋絕大多數(shù)后端 CRUD 場景。4.2 運(yùn)行生成器與產(chǎn)出文件配置沿用上一節(jié)的完整示例我這里把實(shí)際跑起來的main方法貼完整方便你直接復(fù)制修改public class CodeGenerator { public static void main(String[] args) { String url jdbc:mysql://127.0.0.1:3306/my_db?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/ShanghainullCatalogMeansCurrenttrue; String username root; String password 123456; FastAutoGenerator.create(url, username, password) .globalConfig(builder - { builder.author(shipan) .enableSwagger() .dateType(DateType.TIME_PACK) .commentDate(yyyy-MM-dd) .outputDir(System.getProperty(user.dir) /src/main/java); }) .packageConfig(builder - { builder.parent(com.example.demo) .moduleName(system) .entity(entity) .mapper(mapper) .service(service) .serviceImpl(service.impl) .controller(controller) .pathInfo(Collections.singletonMap( OutputFile.xml, System.getProperty(user.dir) /src/main/resources/mapper)); }) .strategyConfig(builder - { builder.addInclude(sys_user) .addTablePrefix(sys_) .entityBuilder() .enableLombok() .logicDeleteColumnName(deleted) .versionColumnName(version) .enableTableFieldAnnotation() .controllerBuilder() .enableRestStyle() .formatFileName(%sController) .mapperBuilder() .enableBaseColumnList() .enableBaseResultMap(); }) .execute(); } }運(yùn)行后項(xiàng)目src/main/java下會多出這些文件src/main/java/com/example/demo/system/ ├── controller/ │ └── UserController.java ├── entity/ │ └── User.java ├── mapper/ │ └── UserMapper.java ├── service/ │ ├── UserService.java │ └── impl/ │ └── UserServiceImpl.java src/main/resources/mapper/ └── UserMapper.xml注意UserMapper.xml被我手動指定到了src/main/resources/mapper下而不是默認(rèn)的src/main/java。這是很多人在生成完代碼后出現(xiàn)Invalid bound statement報(bào)錯的主要原因路徑不對MyBatis 找不到對應(yīng)的 SQL 映射文件所以從配置階段就得把它掰到正確的位置。4.3 查看生成的代碼哪些直接用哪些要動手改生成完以后我們先看看實(shí)體類長什么樣。下面是生成的User.java核心內(nèi)容Data EqualsAndHashCode(callSuper false) TableName(sys_user) ApiModel(value User對象, description 系統(tǒng)用戶表) public class User implements Serializable { private static final long serialVersionUID 1L; ApiModelProperty(主鍵ID) TableId(value id, type IdType.AUTO) private Long id; ApiModelProperty(用戶名) TableField(username) private String username; ApiModelProperty(密碼) TableField(password) private String password; ApiModelProperty(狀態(tài)1啟用 0禁用) TableField(status) private Integer status; ApiModelProperty(邏輯刪除標(biāo)記0未刪除 1已刪除) TableField(deleted) TableLogic private Integer deleted; ApiModelProperty(樂觀鎖版本號) TableField(version) Version private Integer version; ApiModelProperty(創(chuàng)建時(shí)間) TableField(value create_time, fill FieldFill.INSERT) private LocalDateTime createTime; ApiModelProperty(更新時(shí)間) TableField(value update_time, fill FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; }這里有幾個(gè)點(diǎn)需要你留意。一是createTime和updateTime自動加了fill FieldFill.INSERT和fill FieldFill.INSERT_UPDATE這是 MyBatis-Plus 的自動填充注解。如果要生效你還得自己在項(xiàng)目里配置一個(gè)MetaObjectHandler實(shí)現(xiàn)類在插入和更新時(shí)統(tǒng)一填寫這兩個(gè)字段。不配置的話注解加了也白加數(shù)據(jù)庫里的時(shí)間字段如果本身有默認(rèn)值CURRENT_TIMESTAMP倒也能跑但如果你想讓代碼統(tǒng)一維護(hù)時(shí)間就得補(bǔ)上這個(gè) Handler。二是UserMapper接口里只繼承了BaseMapperUser但 XML 文件里已經(jīng)生成了ResultMap和基礎(chǔ)的selectByExample類似的結(jié)構(gòu)。這里提示你如果沒有特殊 SQLMapper 接口和 XML 其實(shí)可以精簡但因?yàn)?XML 里保存了最完整的字段列信息后續(xù)寫聯(lián)表查詢時(shí)可以直接復(fù)制字段清單所以建議保留。三是UserController生成的是一套最原始的 CRUD 接口比如RestController RequestMapping(/system/user) Api(tags 系統(tǒng)用戶表) public class UserController { Autowired private UserService userService; PostMapping public Result save(RequestBody User user) { ... } DeleteMapping(/{id}) public Result delete(PathVariable Long id) { ... } GetMapping(/{id}) public Result getUser(PathVariable Long id) { ... } GetMapping public Result list(RequestParam(defaultValue 1) Integer current, RequestParam(defaultValue 10) Integer size, User user) { ... } }這段代碼能跑但離能上線還差得遠(yuǎn)事務(wù)、數(shù)據(jù)權(quán)限、參數(shù)校驗(yàn)、日志、實(shí)際的分頁查詢條件都要自己補(bǔ)。我的定位是Controller 生成出來當(dāng)接口骨架參考或給內(nèi)部管理后臺用真正對外的業(yè)務(wù)接口還是要手工精寫。而實(shí)體類、Mapper、Service 這三層生成完成度很高基本可以原樣使用。5. 改模板比改代碼更劃算自定義生成模板的實(shí)戰(zhàn)5.1 把官方模板摳出來改成自己的代碼生成器默認(rèn)的模板功能很全但不可能滿足所有團(tuán)隊(duì)的定制需求。比如有的團(tuán)隊(duì)要求實(shí)體類必須繼承一個(gè)BaseEntity有的要求在 Controller 的每個(gè)方法上加PreAuthorize權(quán)限注解有的要求在 Mapper 接口里追加自定義查詢方法。這些需求如果生成完再手動改每張表都要改一遍太痛苦。正確做法是改模板讓生成的結(jié)果從一開始就符合團(tuán)隊(duì)規(guī)范。模板文件在哪如果你用的是 Freemarker模板文件就在mybatis-plus-generator的 jar 包里的/templates目錄下。文件命名大概是這樣entity.java.ftl、mapper.java.ftl、service.java.ftl、serviceImpl.java.ftl、controller.java.ftl、mapper.xml.ftl。你可以從本地的 Maven 倉庫把依賴 jar 解壓出來把需要的模板文件復(fù)制到項(xiàng)目src/main/resources/templates目錄下再按需修改。然后在生成器配置里加一段讓代碼生成器使用你的自定義模板.templateConfig(builder - { builder.entity(/templates/entity.java.ftl) .controller(/templates/controller.java.ftl) .mapper(/templates/mapper.java.ftl) .service(/templates/service.java.ftl) .serviceImpl(/templates/serviceImpl.java.ftl) .xml(/templates/mapper.xml.ftl); })5.2 在實(shí)體模板里埋入 Swagger 與專屬注解舉個(gè)我自己改過的例子。項(xiàng)目里實(shí)體類要統(tǒng)一加一個(gè)ApiModel注解并且要在類注釋里記錄對應(yīng)的表名和表注釋。我改entity.java.ftl模板在類定義位置加入#if swagger ApiModel(value ${entity}對象, description ${table.comment!}) /#if TableName(${table.name}) Data public class ${entity} implements Serializable { private static final long serialVersionUID 1L; #list table.fields as field #if field.comment!?length gt 0 /** * ${field.comment} */ /#if #if swagger ApiModelProperty(value ${field.comment}) /#if TableField(${field.name}) private ${field.propertyType} ${field.propertyName}; /#list }模板里用到的${entity}、${table.name}、${field.propertyName}這些變量是生成器內(nèi)部渲染模板時(shí)上下文中提供的。如果你不熟悉模板語法先大致理解成占位符 條件判斷即可改的時(shí)候主要關(guān)注 HTML 標(biāo)簽之外的那幾行 Java 結(jié)構(gòu)是否滿足需求。這里最關(guān)鍵的是模板文件的存放路徑和配置里的builder.entity(...)路徑必須一致否則會靜默使用默認(rèn)模板你改了半天的東西根本不生效。另一個(gè)常見的模板改造是把TableId的主鍵策略改成指定類型。默認(rèn)生成器會根據(jù)數(shù)據(jù)庫主鍵判斷IdType.AUTO但如果你用的是分布式 ID比如雪花算法可以在模板里強(qiáng)制寫出TableId(value id, type IdType.ASSIGN_ID)。這樣生成出來的實(shí)體類新增數(shù)據(jù)時(shí)即使不手動設(shè)置idMyBatis-Plus 也會幫你生成一個(gè)雪花 ID很省心。5.3 裁剪輸出不需要的東西不生成模板改造解決的是生成的不夠好的問題還有一類需求是生成得太多了。比如很多內(nèi)部接口根本不需要 XML 文件或者單表操作完全不需要 Service 層哪些代碼不生成可以直接在strategyConfig里關(guān)掉.strategyConfig(builder - { builder.serviceBuilder().formatServiceFileName(%sService) .controllerBuilder().enableRestStyle() .mapperBuilder().enableBaseResultMap(); })更徹底一點(diǎn)可以通過templateConfig把某個(gè)模板置空.templateConfig(builder - { builder.xml(null); })這樣生成之后 XML 文件就不會出現(xiàn)。我遇到的情況是項(xiàng)目里允許 MyBatis-Plus 的BaseMapper直接提供單表 CRUD確實(shí)沒有必要為每張表都放一個(gè) XML 文件。只有那些包含復(fù)雜 SQL 的表才需要單獨(dú)生成 XML 并手工加工。所以我在團(tuán)隊(duì)里的默認(rèn)做法是先不關(guān) XML等確認(rèn)表里不需要復(fù)雜 SQL 了再刪掉 XML避免后期排查問題少一個(gè)環(huán)節(jié)。你可以根據(jù)自己項(xiàng)目的口味來習(xí)慣極簡就關(guān)掉習(xí)慣保守就留著。6. 生成之后的必修課掃描、XML、邏輯刪除與分頁6.1 Mapper掃描與XML路徑最常見的兩個(gè)啟動報(bào)錯代碼生成完不代表項(xiàng)目能直接起來我見過太多人激動地跑main生成完代碼一啟動 Spring Boot 就報(bào)錯然后一臉懵。最典型的兩個(gè)錯誤都跟 Mapper 相關(guān)。第一個(gè)是 Mapper 接口沒被掃描到。生成出來的UserMapper只是普通接口它要實(shí)現(xiàn) MyBatis 的動態(tài)代理必須被 Spring 容器掃描到。兩種常見處理方式在啟動類上加MapperScan(com.example.demo.**.mapper)或者在每個(gè) Mapper 接口上標(biāo)Mapper。我個(gè)人推薦MapperScan因?yàn)橐粡埍硪粋€(gè)注解太啰嗦還容易漏。如果你生成的包名里有moduleName記得把掃描路徑寫對比如com.example.demo.system.mapper。第二個(gè)是 XML 文件位置不對或沒被加載。Spring Boot 項(xiàng)目里MyBatis-Plus 默認(rèn)會去classpath*:/mapper/**/*.xml找 XML 文件。如果你用上面的路徑配置生成在src/main/resources/mapper下那默認(rèn)就能被掃描到。如果你的 XML 放在別處或者明明放在resources目錄卻沒生效多半是應(yīng)用配置里缺少這一段mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml type-aliases-package: com.example.demo.system.entitytype-aliases-package配置好之后XML 里的resultType、parameterType可以用短類名不用寫全限定名是個(gè)好習(xí)慣。6.2 邏輯刪除、樂觀鎖、分頁插件不配好等于半殘生成器把TableLogic和Version寫在實(shí)體類上了但如果你沒在 MyBatis-Plus 配置里注冊對應(yīng)的攔截器這兩個(gè)注解的作用其實(shí)是部分生效。邏輯刪除比較特殊TableLogic只要在字段上標(biāo)了MyBatis-Plus 的通用刪除方法就會自動改成邏輯刪除不需要額外插件。但有個(gè)細(xì)節(jié)邏輯刪除的全局配置和字段默認(rèn)值的對齊。你在實(shí)體類上標(biāo)了TableLogic如果刪除時(shí)沒有在 SQL 里設(shè)置刪除值默認(rèn)是 1未刪除是 0數(shù)據(jù)庫里也得跟模板保持一致的約定。更穩(wěn)妥的方式是在application.yml里顯式聲明mybatis-plus: global-config: db-config: logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0這樣即使實(shí)體類忘了標(biāo)TableLogic只要字段名匹配MyBatis-Plus 也會自動識別。樂觀鎖就需要顯式注冊插件了。在配置類里加一個(gè)MybatisPlusInterceptorBeanBean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; }這里我把OptimisticLockerInnerInterceptor和PaginationInnerInterceptor放在一起注冊了。分頁插件基本是 MyBatis-Plus 項(xiàng)目的標(biāo)配生成器生成的page方法如果不配分頁插件selectPage返回的數(shù)據(jù)不會真的分頁而是查出全量數(shù)據(jù)再包裝這在數(shù)據(jù)量大時(shí)是性能隱患。所以建議一次性把這兩個(gè)攔截器都注冊上。7. 把生成器變成團(tuán)隊(duì)基建批量執(zhí)行與日常維護(hù)心得7.1 全表生成還是精確生成我的取舍原則用代碼生成器時(shí)間久了你會發(fā)現(xiàn)它不僅能提高單次開發(fā)效率還能沉淀成團(tuán)隊(duì)的基礎(chǔ)設(shè)施。但怎么用好它還是有一些原則要守住。我的取舍原則是Controller 少生成或不生成Service 和 Mapper 能生成就生成。Controller 這層代碼往往跟具體業(yè)務(wù)接口設(shè)計(jì)強(qiáng)相關(guān)用戶權(quán)限、接口命名、返回結(jié)構(gòu)、參數(shù)校驗(yàn)全是定制化的生成器給的東西只能算雛形。如果團(tuán)隊(duì)風(fēng)格是把業(yè)務(wù)寫在 Controller 里那生成器生成的 CRUD 也許勉強(qiáng)夠用但如果你們有嚴(yán)格的分層規(guī)范Controller 應(yīng)該手工控制。我在日常開發(fā)中生成器默認(rèn)只輸出entity、mapper、service、serviceImplController 開著是為了看接口結(jié)構(gòu)參考但往往生成完我會直接刪除。Service 這層是值得生成的。因?yàn)?MyBatis-Plus 的IService已經(jīng)提供了大量現(xiàn)成方法Service接口和實(shí)現(xiàn)類生成后幾乎零成本可用后續(xù)加業(yè)務(wù)邏輯就在對應(yīng)方法里擴(kuò)展不會影響整體結(jié)構(gòu)。7.2 表結(jié)構(gòu)變更后如何優(yōu)雅地重新生成數(shù)據(jù)庫表結(jié)構(gòu)不是一成不變的加了字段、改了注釋、換了索引都是家常便飯。這時(shí)候重新跑一遍生成器會遇到一個(gè)問題覆蓋還是保留我的建議是實(shí)體類、Mapper 接口、XML 這三類文件可以直接覆蓋。因?yàn)樗鼈兊暮诵膬?nèi)容來自數(shù)據(jù)庫表結(jié)構(gòu)不包含業(yè)務(wù)邏輯重新生成后只要沒有手工動過結(jié)果一定是對的。但 Service 接口和實(shí)現(xiàn)類、Controller 就不建議直接覆蓋了因?yàn)檫@里大概率已經(jīng)寫過業(yè)務(wù)方法覆蓋一次丟一大堆代碼心態(tài)直接就崩了。實(shí)際操作上我通常只讓生成器重新生成實(shí)體類和 Mapper 接口跑之前用addInclude指定變更過的表跑完之后再手動把新增字段補(bǔ)到業(yè)務(wù)代碼里。這樣可以最大程度避免生成器覆蓋手寫代碼的慘案。如果你真的希望生成器完整重新生成一套那就把項(xiàng)目里對應(yīng)的手寫類先備份生成完再對比合并。這不是最優(yōu)雅的方式但勝在可控。7.3 我遇到過的幾個(gè)冷門坑最后分享幾個(gè)我踩過的、不太容易在文檔里看到的坑。第一個(gè)是表名大小寫問題。MySQL 在 Windows 下表名大小寫不敏感但在 Linux 下敏感addInclude里寫的表名必須跟數(shù)據(jù)庫里的大小寫完全一致。比如庫里的表叫Sys_User你在addInclude里寫sys_userWindows 上能生成Linux 上就會提示找不到表。第二個(gè)是生成器連接數(shù)據(jù)庫超時(shí)。如果數(shù)據(jù)庫地址是內(nèi)網(wǎng) IP且serverTimezone沒配或者配錯連接耗時(shí)可能長達(dá)幾十秒。我遇到過一次生成器卡住不動排了半天才發(fā)現(xiàn)是時(shí)區(qū)問題驅(qū)動一直在嘗試解析本地時(shí)區(qū)。把serverTimezoneAsia/Shanghai加上之后立刻恢復(fù)正常。第三個(gè)是關(guān)于模板文件后綴。如果你用 Freemarker模板文件后綴必須是.ftl如果用 Velocity后綴是.vm。配置templateConfig時(shí)路徑對應(yīng)關(guān)系要對得上否則運(yùn)行時(shí)會直接拋模板引擎不匹配的異常。這個(gè)錯雖然好定位但第一次遇到時(shí)確實(shí)會愣一下。第四個(gè)是關(guān)于enableSwagger()的連鎖反應(yīng)。這個(gè)選項(xiàng)一旦開啟生成器不但會在實(shí)體類上加 Swagger 注解還會在 Controller 的方法上加ApiOperation、在類上加Api。如果項(xiàng)目里沒有 Swagger 依賴編譯直接失敗。所以我在生成器跑之前都會先確認(rèn)項(xiàng)目的pom.xml里有沒有springfox或springdoc相關(guān)依賴沒有就先不開生成了再手動補(bǔ)注解反而更快。用了幾年代碼生成器我最深的體會是工具解決的是重復(fù)勞動不解決設(shè)計(jì)問題。表結(jié)構(gòu)設(shè)計(jì)得亂七八糟生成器只能幫你把亂象原樣搬到 Java 世界表設(shè)計(jì)得規(guī)范清晰生成器產(chǎn)出的代碼也賞心悅目。所以每次跑生成器之前我都會先花十分鐘看一遍表的注釋、字段命名、類型選擇確認(rèn)沒問題再動手。與其說生成器提高了我的寫碼速度不如說它逼著我先想清楚數(shù)據(jù)庫設(shè)計(jì)——這大概是它在工程之外給我?guī)淼淖畲髢r(jià)值。如果你正打算把代碼生成器引入項(xiàng)目建議從一個(gè)邊界清晰的業(yè)務(wù)模塊開始小范圍試點(diǎn)跑通一條最小路徑后再鋪開會比一次性全量生成順手很多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
www.99热| 日本三级第一页| 天天干,天天舔| 99热这里有精品| 无码人妻一区| 五月丁香久久久| 亚洲乱码w在线观看| av色色国产| 欧美成人精品一区二区| 99热99精品在线观看| 99热国产婷婷| 91av无码| 91免费试看| 婷婷色色五月天| av在线色五月丁香婷区久| 色婷婷伊人| 猫咪伊人AV| 国产67194| 9九色首页| 婷婷丁香五月久久| 综合久久婷婷五月丁香| 97人人射| 热99精品视频在线观看| 婷婷五月激情热播| 六月丁香视频网站| 另类五月婷婷| 99热这里只有精品21| 97婷婷狠狠久久综合9色| 五月丁香六月婷| 久草五月婷婷| 中文字幕婷婷在线| 日本高清不卡免费一区二区三区| 婷婷5月久久综合网站| 五月天综合| 超碰免费大香蕉| 久 久9 9 热 视 频| 免费视频舔| 色5月婷婷| 亚洲人人操| 韩国不卡AC视频| 噼里啪啦完整版中文在线观看 | 婷婷综合爱| 色色永久| 色色色色色色97| 婷婷6月综合网| 热99国产精品| 婷婷六月插屄激情| 久久a热| 精品免费99| 伊人成人宗合网| www.激情在线| 丁香五月婷婷激情123| 欧美激情五月综合| 天天干肏夜夜| 深爱五月激情| 丁香五月天堂| 中文字幕丰满孑伦无码专区| 91综合网| 婷婷六月激情| 日日婷婷不卡| www,超碰| 99久久久久久www| 亚洲成人av在线观看| 九月色婷婷婷| 丁香五月婷婷色| 五月丁香猫咪久久婷婷综合视频激情四射网入口 | 99热这里只有精品首页| 99啪啪| 婷婷丁香色五月| 99久视频| 久久五月天丁香花| 欧美天天爽| 婷婷五月天亚洲色| www.色五月| 亚洲乱码w在线观看| 夜夜久久综合网| 色婷婷亚洲婷婷| 日日干天天| 99精品偷自拍| 99热精品99| 久久婷婷91| 91丨九色丨国产打屁股| 婷婷五月视屏| 日本猛少妇色XXXXX猛叫| www五月婷婷88导航| 美女xx不卡| 91干在线| 丁香五月开心婷婷| 亚洲人人操| 色婷婷小视频| 99久久黄色顶级视频| 五月天在线视频尤物视频在线看| 久久五月婷| 五月天电影网| 丁香五月综合婷婷| 综合网亚洲| 婷婷五月天视频| 无码一区精品一区视频| 99小视频| 九九99九九99九九99视频网| 婷婷五月天性爱视频| 色欲色天天香综合| 天天天干夜夜夜操| av操B网站| 婷婷综合影院| 人人爽亚洲| 国产免费AV网站| Av狠狠色丁香婷| 国产精品美女| 亚洲日日日| 六月丁香五月天| 婷婷不卡基地| 丁香色情五月综合网站| 久久精品99国产精品日本| 五月综合丁| 丁香婷婷偷拍| 99精品在线观看| 色综合色色色色| 色婷五月丁香久亚洲| 天天干,天天日| 99亚洲精品| 欧美天堂久久| 色五月综合资源推荐| 操老逼综合网| 日日激情网| 九九热超碰| 婷婷五月天丁香久久| 色婷婷五月天天天做| 99ri视频| 五月丁香美女| 色播五月婷婷| 天天操天天操综合| 亚洲在线免费成人| 开心五月丁香婷婷| 玖玖99婷婷| 十月丁香婷婷| 99免费超碰在线| 激情五月天久久丁香| 91九色无码日韩| 丁香五月婷婷激情中文| 欧美婷婷成人| 人人九色| 99re思思久久| 色情五月丁香婷婷网| 人妻AV在线观看| 色很久综合| 五月综合影院| 最新日韩久热免费视频看看| 精品99视频| 五月天丁香综合在线| 这里只有精品免费视频| 丁乡久久| 亚洲六月婷婷| 国产一区男女| 丁香五月婷婷香| 婷婷精品综合| 9有码中文| 超碰大香蕉网| 国产va在线视频| 久久激情五月| 天天干狠狠艹| 日本3级片偷拍网站| 亚洲无码播放| 天天色,天天操,天天射| 国产亚洲av片| 开心激情网在线| 九九99在线观看视频| 六月婷婷激情| 五月婷婷亚洲| 久久视网36| 色五月婷婷基地| 婷婷五月激情基地| 啪啪五月综合| 噜噜噜狠狠色综合| 婷香五月激情视频| 99热这里只有精品268| 婷婷另类小说| 五月丁香婷婷AV| 日本三级中文字幕| 四虎99热在线观看网站| 五月婷婷啪啪啪| 深爱婷婷基地| 五月天婷婷亚洲| 五月婷婷网站| 五月丁香六月| 26uuu欧美日本| 丁香五月开心亚洲| 精品一二三区久久AAA片| 99在线视频精品| 亚洲久艹| 精品一二三区久久AAA片| 久热网站| 中文人妻主播久久| 夜夜大香蕉婷婷丁香| 五月激情综合网| 色五月五月丁香| 九九九九无码| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 亚州视频九九99| 五月丁香色色色| 久久婷婷五月综合色奶水99啪| 久久这里在精品视频| 大香伊人久色| 九九av| 91午夜激情| 性五月激情| 丁香八月综合激情| 欧美性猛交99久久久久99按摩| 久久九九色| 五月天自拍网| 久久草人妻| 欧美三级大片AA在线看| 被强行糟蹋的女人A片| 九九精品视频在线观看| 色了色综合| 色综合天堂| 大香焦A∨| 五月丁香啪啪| 99久久综合| 亚洲色情在线| 亚洲激情网站| 丁香婷婷啪啪啪| 国产操碰| 五月丁香操婷逼| 人人操婷婷| 婷婷五月天AV| 九九热这里只有精品6| 激情五月色婷婷| 凹凸探花电影| 99热99热在线观看| 久久国产性爱A V| 99精品久久久久| 亚洲永远av在线播放| 91操人视频| 午夜成人天堂久久无码日韩久久| 夜色综合网| 天天摸人人摸| 第四色婷婷丁香五月| 99热在线中文字幕| 日本激情五月| 久久激情五月天| 五月综合色| 久色大| 激情五月天色婷婷| 五月色天情| 婷婷五月天成人综合网| 色五月婷婷五月天激情综合| 色色网站在线| 99无码| 精品久久久人妻| 五月丁香在线精品| 婷婷五月天六月| 亚洲久久婷婷丁香五月天| 五月天日日操夜夜操 | 婷婷六月天亚州| 美女婷婷六月色| 欧洲激情五月天婷婷| 天天操天天日天天爱| 99ri在线| 婷婷5月开心6月| 色视五月天婷婷| www。五月天。com| www激情婷婷com| 久久这里都是精品| 九一牛视频探花| 亚洲国产精品VA在线看黑人| 99ri视频在线观看| 久久久香| 色天天狠狠干| 亚洲色优| www激情| 久久精彩视频| 色情网综合| 丁香六月激情国产| 91碰碰| 天天开心婷婷丁香五月| 天天射影视综合网| 久久综合婷婷五月| 成人无码精品1区2区3区免费看| 99综合网| 日本天堂久久| 99在线er热| 五月丁香啪啪拍| 欧美久久婷婷| 日韩啪| 亚洲色五月| 人妻第九页| 五月婷婷国产| 五月天激情在线视频| 六月色丁香中文字幕| 99热最新| www.狠狠| 综合久久影院| 亚洲成人黄色网| 97热精品| 97超级碰| 久热这里只有精品性色AV| 亚洲婷婷婷| 色五月婷婷小说亚洲中文字幕组| 久久综合五月天| 20253AV| 99在线视频资源| 日韩一66精品| 亚洲五月婷| 日本操B视频在线观看| 国产a视频| 色婷婷狠狠| 日韩99色99| 激情性爱五月天| 图片区 小说区 区 亚洲五月| 综合久久综合五月天婷婷| 久久看婷婷| 激情婷婷丁香色五月综合| 伊人五月成人| 人妻熟女一区二区AV| 一级性爱大片| 成人狠狠成人狠狠成人狠狠成人狠狠 | 夜夜AVV| 淫视馆aV二区一区| 色婷婷六月天| 久久久久9久无码视频| 久久色五月天综合网| 人人爱国产| 色都都狠狠色都都色综合色| 色的色综合| 日本色99| 精品99视频| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 婷婷丁香成人在线视频| 99热婷婷| 色婷婷av在线| 日韩在线视频中文字幕| 亚洲小电影在线观看黄999| 丁香五月五婷| 欧美 色婷婷| 六月婷婷之青青草| 亚洲色婷婷| 五月丁香婷婷婷激情爱爱| 婷婷丁香五月久久| 国产成人精品一区二三区熟女在线| 91avse| 婷婷色片| 超碰猛烈的性猛交| 丁香五月激情网| 色婷婷影音| 激情五月丁香综合网站| 欧美人人草草| 天天干天干| 婷婷五月丁香色色| 婷婷五月天成人影片| 天天弄天天操| 99亚洲大片精品永久在线观看| 狠狠五月天| 久久九色| 四色永久成人网站| 五月婷成人网| 欧美成人AAA片一区国产精品| 五月婷婷新网站| 五月天久久婷婷| 开心婷婷中文字慕| 无码人妻精品一区二区蜜桃色欲| 人人做人人看人人摸| 中文字幕中文有码在线| 六月合五月婷| 日本色99| 五月丁香影院| 亚洲婷婷激情五月天| 欧美五月婷婷综合| 日韩操逼大片| 久热视频A.| 激情五月综合| 狠狠色婷婷777| 亚洲第一影院高清无码网站| 色五月婷婷综合| 五月婷久久| 丁香六月婷婷色XXXXX| 99久久免费性爱视频`| 婷婷91| 亚洲激情电影五月天色婷婷丁香一起草| 亚洲日韩一页精品发布| 五月综合无码| 五月婷婷激情刺激| 99久操视频| 综合激情视频| 丁香婷婷五月天校园春色| 国产精品久久久久久久久久免费| 五月天色婷婷成人| 丁香五月激情六月欧亚激情综合导航| A短视频免费在线观看| 天天摸人人摸| 怡红院 久久| 桃色五月婷婷| 九月丁香亭亭| 性生活久久人妻| 99九九视频| 9久精品| 婷婷五月天日本无码| 国产精品色婷婷久久久精品| 色婷婷成人做爰A片免费看网站 | 99欧州偷拍视频| 狠狠综合| 欧美影院婷婷| 五月婷婷影| 婷婷的激情五月| 五月刺激丁香月综合| 久久久ww| 岛国AV网站| 婷婷丁香成人| 六月婷婷AV| 久久538| 激情六月一二| 五月婷婷精品视频| 永久的网站AAAA| 色五月激情图片| 丁香六月啪| 五月丁香花激情综合网| 色综合爽| www久| 日本A片一区| www.91久久| 99精品在线观看视频| 六月婷婷无码| 九九精品热| 大香蕉懂9| 色欲久久综合| 一区二区传媒视频| 天天日中文| 色99在线| 国产9色在线/日韩| 婷婷五月天六月丁香| 插插干干干色| 激情丁香婷婷五月天| 天天综合网~91综合网| 久久日九九| 风流少妇A片一区二区蜜桃| 日本啪啪网| 婷婷操婷婷干婷婷射| 丁香五月日本| 五月天婷婷在线啪啪视频| 人人妻人人澡| 91丨九色丨白浆秘| 99热99久久| 五月伊人婷婷999| 婷婷操无码| 国产毛片精品一区二区色欲黄A片| 激情AV在线| 色五月丁香五月| 久狠日av| 色婷婷丁香| 婷婷四色成人综合色视| 精品怡红九九九| 乱女乱妇熟女熟妇综合网站| 色婷婷丁香六月| 亚洲综合婷婷| 天天日天天干天天爱| VA色婷婷| 开心久久五月天| 91久久99久久91熟女精品| 九色91国产| 色色丁香五月| 91婷婷色五月| 色999亚洲人成色| 国产激情AV| 五月丁香啪啪婷婷| 激情六月下句是什么| 嫩草AV久久伊人妇女超级A| 色婷婷AAA| 97操操操| 男人的天堂999| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 色亭亭五月天丁香综合AV - 百度 - 百度 | 国产精品久久久久久喷浆| 国产午夜精品AV一区二区麻豆| 久热91| 日本啪啪天堂| 色九区| 丁香五月天在线观看视频| 色婷婷五月天激情| 99视频在线观看视频| 99性爱精品| 激情五月天伊人av| 在线网黄| 亚洲第一成人无码A片| 婷婷五月丁香第四色超碰在线| 99干免费视频| 日韩一级A片黄色| 开心五月六月婷婷| 中文字幕色色| 大香蕉99| 亚洲愉拍99热成人精品| 色在线99| 婷婷 激情 五月| 久久婷婷五月天激情唯美| www.五月天婷婷| 久九色| 丰满少妇猛烈A片免费看观看 | 大香蕉九九操| 丁香六月婷婷久久综合八月| 99免费视频网| 天天日天天色| 大香蕉久久伊人网| 五月激情丁香五月| 玖玖资源在线视频| 欧美色五月| 日本全黄一级999| 黄色AV日韩| 欧美亚洲婷婷五月| 日本一级一级一级一级| 婷婷丁香五月天操逼| 国产9色在线/日韩| 五月开心深深爱激情综合| 五月丁香六月婷婷色情| 亚洲V国产V欧美V久久久久久| 七七久久婷婷| 色小说婷婷五月天天天| 99热综合在线| 婷婷五月激情视频网| 丁香五月婷婷狠狠色| 久久性爱视频这里只有精品| 色人久久| 色欲九区| 色丁香五月| 国产99久久久国产精品免费看| 久久9RE热视频精品98| 婷婷黄色五月天在线视频| www.9797国产| AV网址大全在| 色色网站免费观看| 在线不卡视频| 51成人| 久久五月天激情| 开心五月激情网| 91操片| 五月婷婷婷| 欧类av怡春院| 女人天堂av| 99热91| www.99精品视频| 色情五月天A片| 婷婷在线精品| 五月色综合网欧美网| 婷婷五月丁香五月| 888久久久| 丁香五月天综合网| 牛牛热这里只有jingpin| 色色激情| 性爱综合网| 久久久久网站| 另类 在线| 免费成人网在线观看| 这里只有精品视频在线看| 天天做天天爽| 深爱激情小说五月婷婷| 色婷婷基地 | 日日日日做夜夜夜夜无码| 亚洲成人在线播放| 这里有精品99| 日本天天色| 丁香五月在线伊人| 亚洲激情综合| 欧美色骚婷婷五月天| 伊人五月天| 激情文学 综合 色| 亚洲无码色| 国产在线6| 丁香五月天堂网| 五月天婷婷日日爱| 国产高潮A片羞羞视频涩涩| 激情综合网络插| 狠狠狠狠狠干| 思思久久96热在精品国产,| 色五月激情五月| 五月婷婷久久内射| 超碰cap| 亚洲aV写真天天综合网久久| 人妻激情网| AV性爱网| 久热伊人| 久久精品一区二区三区四区| 激情六月婷| 久婷自拍视频| 五月香婷婷| 这里只有精9| 97五月婷| 啪色综合| 欧美99热| 日本天堂久久| 色婷婷综合网| 色亚洲婷婷| 五月婷婷激情啪啪| 大香蕉五月婷婷| 美女天天艹人人爽| 91女人18毛片水多国产| 婷婷五月激情的图片| 九九黄色网| 成人精品视频99在线观看免费| 久久欧洲久久| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 激情五月婷婷老师| 天天插天天插天天插| 操逼巨乳91| 色99在线| 五月天婷婷丁香六月| 99久久97久久欧美综合网| 噜噜五月天综合| 激情网第四色| 久久香蕉福利| 大香蕉久久青青| 色色色99| 婷婷色五月综合丁香| 9 7总站超级碰免费视频| 色在线99| 色综合久久88色综合中文字幕| www.99精品视频| 五月婷婷激情网| 99久热这里只有精品| 亚洲一个色| 大香蕉伊然在亚洲90| 五月丁香黄色视频| 2025色婷婷| 79亚洲精品少妇| 久草丁香婷婷五月天婷| 亚洲日韩一页精品发布| 日韩在线99| 麻豆123区| 色婷婷欧美| 久久99草五月婷婷| 婷婷中文字幕| 91狠狠综合久久| 五月激情婷婷在线| 亚洲AAAA网| 久99| 国产婷婷五月天| 播丁香五月婷婷欧美| www.色婷婷| 婷婷久久色| A A色色| 亚洲国产精品成人免费一区久久久在线观看AAAA| 日韩一级淫乱片一区二区三区| 97色色色| 亚洲天堂热| 这里只有精品视频在线| 99热这里只有精品官网| 精品福利911| 99热思思久| 久久多色| 久久久99免费视频| 一起肏在线视频| 丁香婷婷浪潮AV久久综合| 激情99| 五月丁香六月欧美综合网站| 碰超99| 六月丁香五月婷婷| 激情综合网五月天| 婷婷亚洲欧美丁香五月| 亚洲最大五月六月丁香婷婷| 四虎婷婷五月天| 99这里有精品免费| 久热这里只有精品在线观看| 另类色网| 精品人妻伦| 99惹在线精品免费观看| 色情性爱视频网址| 、激情六月天| 婷婷,五月天,丁香,第一| 婷婷激情四射| 成人天天爽| 婷婷色五月综合丁香| wWwCom夜操wwW| 99热综合在线| 色色色视频免费无码 | 99riAV国产精品视频| 99精品无码| 综合五月天| 色婷婷激情| 黄网免费看| 99色在线观看| 丁香六月激情综合| av高清无码| 超碰cap| 青青久久91| 中文字幕五月久久婷婷| 91狠狠色色丁香婷婷综合久久| www.综合久久.com| 五月婷婷免费在线| 丁香婷婷人妻综合网| 久热中文字幕在线线观看| 丁香婷婷视频一区二区| 开心激情站| 久久激情综合| www.五月天| 五月婷婷先锋| 棕合影院色色| 日本色婷婷综合| 99热久草| 色色丁香婷婷| 一本大道熟女人妻中文字幕在线| WWW.五月com| 久久伊人9| 一夜福利不卡| 直接看的AV| 色婷婷香蕉| 一起草AV入口| 色私五月婷婷| 一个色的综合| 天天爽天天| 大香蕉九九| 日日操夜夜操中国无码| 在线播放中文字幕| 开心五月深爱激情| 九九RE视频在线精品| 老美AA片| 亚洲午夜视频| AAA亚洲AV| 丁香六月婷婷综合激情欧美| 99久久九九视频| www.婷婷.com| 天天干,噜噜色,狠狠色| 激情图片婷婷丁香五月| 99精品视频在线观看| 国产婷婷久久| 色 丁香婷婷| 色玖玖导航| 婷婷五月天性色| 999婷婷综合| 五月婷婷六月奇米网丁香| www.91操| 操日本色| 色五月婷婷开心| 国产综合色婷婷精品久久| 婷婷99狠狠躁天天久久久九九九| 日韩狠狠色| 丁香五月婷婷综合网| 五月丁香综合激情网| 狠狠色狠狠色综合日日91| 亚洲婷婷丁香五月在线| 在线观看av网站| 九月丁香很很色| 人妻性爱av网站| 色噜噜五月天| 欧美日本99| 色五月婷婷开心| 九九热超碰| 色五月欧美| 五月综合精品| 国产乱子轮XXX农村| 欧美色图天堂网| 人人爱摸视频| wwww.色婷婷| 第四色婷婷五月| 色婷婷激情| 嫩草视频在线观看| 亚洲乱码w在线观看| 欧美日韩婷婷五月天| 五月丁香六月日逼| 女人天堂AV| 激情综合五月丁香| 五月婷婷影院| 丁香五月婷婷AV| 天天色99| 欧美超级视频97| 天天狠狠六月婷丁香影院| 9热成人在线视频| 国产美女精品| ..真实国产乱子伦对白在线_欧| 人人澡天天色天天做| 任你爽免费视频| 97色婷婷五月天| 久热91精品| 久久性刺激| 另类精品视频在线观看| 欧美三级黄色片久久| 五月欧美丁香在线观看| 激情AV中文| 成功精品影院| 婷婷五月色色| 五月婷婷丁香综合| www.99色| 五月天激情四射| 开心亚洲久久开心| 99热99艹在线观看| 激情网五月婷婷| 色婷婷精品视频在线播放| 5月婷婷激情网| 99re在线免费视频| 影音先锋91资源站| 日韩不卡DvD| 婷婷六月啪啪| 天干天天干天天天天天| 中国无码av| 婷婷五月综合激情免费视频| 婷婷综合av| 人妻久热| 丁香五月婷婷性爱| 欧美黄色一级录像| se99视频| 99热在线中文字幕| 激情综合五月丁香| 色五月色综合| 婷婷亚洲久久| 亚洲午夜AV| 日本www五月婷婷| 2018夜夜草| 综合五月婷婷| 99久久久免费| 98国产精品综合一区二区三区| 26UUU精品一区二区c〇m| 五月黄色婷婷| 婷婷欧美激情综合| sS丁香五月婷婷| 91丨九色丨首页| 欧美丁香五月| 色七色九九| 色九月综合| 综合久久9| 婷婷在线操| 亚洲热久| 五月天色图| jiqingliuyuetian| 热九九精品| 超碰国产在线播放| 久久多色| 久久机只有这里精品| 五月激情婷婷国产精品久久久久久| 日本啪啪网| 99色丁香婷婷综合网| 大香蕉人人网| 99这里只有精品| 丁香五月色| 这里只精品| 玖玖爱导航| 北京熟妇搡BBBB搡BBBB| 天天操婷婷| 国产精品噜噜在线视频| 色五月婷婷AV| 黄桃AV无码免费一区二区三区| 五月丁香激情综合久久| 热99视频精品| 丁香婷婷超碰 | 丁香五月激情欧美| 婷婷五月花| 97超碰在线免费观看| 婷婷五月天色网久| 无码区婷婷五月花开| 婷婷视频在线碰| 婷婷五月天色色| 色99网| 丁香五月婷婷六月婷| 成人电影AV在线观看| 五月天操逼激情| 婷婷欧美| 色99日韩| 五月丁香六月色| 森林影视大全,最好看的2019年视频 | 九九综合88| 日本猛少妇色XXXXX猛叫| 成人色图情色成人网 www.5b5b5bcom 五月天| 欧美综合婷婷欧美综| 日本久久性| 精品一区二区三区三区| 国产熟妇的荡欲午夜视频| 婷婷在线免费| 色婷久久| 天天久| 婷婷五月激情欧美大胆视频| www.激情在线| 99久在线精品99re8热| 亚洲 欧洲 国产 伦综合| 丁香五月-激情综合| 国产成人网| 久久精品99| 91丁香五月| 丁香桃色网| 久热A| 亚洲 小说 欧美 激情 另类| 日本的α片xxxwww| 激情综合啪啪啪| 综合色播| 久久婷综合| 婷婷色五月丁香六月欧美啪| 欧美日韩国产伦精品日韩人妻一| 成人在线免费网址| 色啪久| 91av视频| 99re视频在线精品| 超级碰碰99| 91免费试看| 亚洲成人AV一区在线观看| 婷婷激情久久| 欧美性爱专区| 婷婷五月激情在线| 丁香五月婷婷亚洲天堂| 97人人操人人操人人操人人| 人人操91色| 欧美在线视频9| 久久九九精彩| 色婷天天| 任你爽视频| 欧美日本VA| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 日韩99视频| 亚洲成人av在线| 婷婷五月丁香综合| 婷婷午夜| 国产精品久久久久久久久久| 伊人在线视频| 超碰69天堂| 中文av在线观看| 五月天激情网址| 涩综合网| 人妻久久久久久久久妻久久久久久久久| www.久久| 日韩欧美四五区| 五月丁香花激情综合网| 久久偷拍综合五月天| 香焦网五月天| 99精品亚洲| 成人中文网| 超碰人人妻| 日韩在线视频网站| 欧美日本综合网| 嫩BBB槡BBBB搡BBBB视频| 99亚洲无码| 伊人网碰碰| 九九综合| 丁香婷婷五月激情四射网| 久久 无毛。| 六月丁香啪啪| 久久66精品| 婷婷激情图片| A久久| 刘玥精品一区| 久久伊人9| 中文人妻主播久久| 婷婷成年人免费视频| 99ri精品| 婷婷伊人五月天| 99碰视频| 色婷丨日丨天丨综合久久| 99在线精品视频在线观看| 久久性爱视频| 婷婷色色欧美综合网| 色婷婷久久综| 五月天激情日色在线| 色婷婷五月天| 人与禽A片啪啪| 2017人人操| 这里只有精品视频看看| 人人综合久| 欧州婷婷五月天综合| 欧美色九| 色色综合视频| 深爱激情五月网| 日本在线wwww| 五月婷婷就去色| 开心五月婷婷| 色色色激情网| 九九色中文| 激情五月天激情小说| 久久婷婷色| 91久久免费| 99亚洲大片精品永久在线观看| 96精品久久久久久久久| 婷婷五月丁香成人网| 久久色在线视频| 婷婷五月天网址| 99热爆在线| 婷婷五月天改成什么了| 五月天激情四射网站| 欧美十二区| 开心深爱五月天| 91久久| 午夜丁香 婷婷| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 婷婷六月成人| 精品国产人人爱人人| www.91在线观看| 91九九九色在| 欧美日韩大黄| 欧美精品99久久久| 久热69| 激情五月天电影| 日本久久激情| 亚洲婷婷开心五月| 色婷婷六月天| 99热偷拍| 久久 婷婷 五月天| 青青久久大香蕉| 深爱五月网| 99久久综合狠狠综合久久| 亚州欧美国产久精国产99综合视频| 久草视频一,二三四| 久久全色| 久久er99| 五月色情精品| 大地资源色婷婷视频在线| 激情婷婷丁香五月| 婷婷 激情 五月| 大学生高潮无套内谢视频| 久久99免费视屏| 99热在这里只有精品| 原琪琪色影院| 亚洲区视频| 97干免费视频| 99ri国产在线| 91超级碰| 久久99网| 婷婷5月色| 白人荫道BBWBBB大荫道| 伊人大香五月天| 婷婷色网| 六月婷伊人| 99超超碰| av免费人人| 五月色婷婷夜色| 久久六月天| 另类亚洲视频| 91婷婷色五月| 大香蕉五月天| www.色婷婷.com| 欧美久草在线日本一级特黄大片做受9在线观看韩国电影《两个女人》未删减-毛片 | 99久久国产成人精品| 色婷婷影视| 婷婷 亚洲图片 丁香| 色色色色色色综合网| 婷婷五月天激情AV影院| 丁香五月熟女| 先锋资源婷婷| 日本人妻A片成人免费看片| 性色五月天| 婷婷六月丁香久| 九月丁香很很色| 色婷婷五月天视频网站| 成人AV中文字幕| 天天干 夜夜爽| 99爱在线| 九九99九九精品视频| 先锋资源婷婷| 六月丁香激情综合网| 男同91 | 俺去也在线www色官网| 欧美日韩国产成人在线| 成人av播放| 99热 在线观看| av首页在线| 九九干视频| 五月婷婷高清| 大香蕉AV电影在线| 播播网色播播| 五月天激情小说婷婷| 久久R激情| 丁香五月天.com| 日日干日日色| 五月丁香另类网| 97久久久久| 思思热热久久| 91精品婷婷国产综合| 五月婷婷五月天| 亚洲狠狠干| 日韩色色网| 婷婷六月久久| 成年人丁香五月| 中文字幕乱轮| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | yjzz亚洲国产| 五月天婷婷色| 开心婷婷五月天激情网| 日韩人妻无码专区| 亚洲99精品九九在线| 日本熟妇精品99| 丁香欧美| 亚洲成人在线播放| 美女被肏网站在线看| 久草热在线视频| 色综合色综合色综合色综合| 99久热这里有精品| 91久久五月天| 日韩丁香涩| 99热6精品| 婷婷激情六月| 日韩av大全| 91无码视频| 色婷婷四虎| 五月天激情网图片| 亚洲乱码在线观看| 色日本网| 亚洲第一色色色色| 久操无码| 婷婷第一页| 色哟呦av| 五月丁香啪| 激情五月婷| 久久久久er热| 欧美视频在线观看噜噜| 婷婷在线视频| 99九九视频| 色五月婷婷91在线| 成人做爰A片免费看网站找不到了| 91超碰人人操| 日本爆乳片手机在线播放| 五月天婷婷成人资源站| 激情五月伊人婷婷| 国产免费AV在线| 日韩综合久| 91干网| 伊人爱爱日本| 无码少妇高潮喷水A片免费| 中文字幕成人| 99噜噜| 亚洲综合五月天婷婷丁香| 婷婷 月 丁香| 婷婷亚洲在线| 99爱最新免费视频在线观看| 婷婷激情丁香五月天综合| 五月婷婷色影院| 影音先锋毛片网站| 超碰网站在线观看| 五月天婷婷激情网| 丁香97综合| WWW色色色COM| 久久久久久9热不雅视频| 爱穴久久| 性色九九| 色色999三级片| 3p九色在线| 激情婷婷五月丁香啪啪啪| 亚洲V国产V欧美V久久久久久| 噜噜噜狠狠色综合| 亚洲无码99| 国产高潮A片羞羞视频涩涩| 性爱久久| 久草热8精品视频在线观看| 国产午夜成人AV在线播放| 午夜不卡久久精品无码免费| 99热网站| 98国产精品综合一区二区三区| 嫩草AV久久伊人妇女超级A | 五月色网| 91啪啪视频| 99爱爱| 欧美成人AAA片一区国产精品| 国产午夜精品AV一区二区麻豆| 大地9中文在线观看免费高清| 少妇性按摩无码中文A片| 日韩AV免费看| 九九中文色色| 天堂网啪啪| 成人在线不卡| 思思热闹这里只有精品| 久久精品在线| 中文字幕色色色| 色色色色热| 67194成I人在线观看线路1| 色优久久| 欧美性生交XXXXX无码小说| 婷婷五月天性色| 婷婷丁香五月天操逼| www.97碰碰com| 综合五月草 | 亚洲色色五月天| 夜夜 操无码| 99热日韩这里只有精品| 精品一区二区三区木瓜| 99re热视频这里只精品5| 欧美在线操| 狠狠色丁香99| 婷婷五月花西瓜| 中文字幕,综合,91| 九九热最新地址| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 五月婷综合| 日韩黄黄| 天天日天天久久青青| 五月丁香中文婷婷中文| 日本啪啪天堂| 99成人精品| 丁香婷婷性久久| 色婷婷激情| 狠狠色综合图片| 91婷婷在线| 六月婷婷狠狠做| 婷婷五月天网址| 疯狂做受XXXX高潮A片| 日本一区二区三区精品视频| 婷婷九月丁香| 五月亭亭综合五码| 久久婷婷色色| 欧美五月停| 99久久久久久| 激情开心五月亚洲| 99热在线观看精品| av在线播放网站| 97干视频| 五月天深爱激情网| 亚州色色色| 色播色丁香五月| 思思热国产视频| 99久在线精品99re8热| 9久久精品| 丁香五月婷婷天堂大香蕉| 丁香婷婷五月天色播| 久久人人九九| 久久久高清| 激情丁香久久| 亚洲99在线| 伊人婷婷99热精品| 久热无码| 五月丁香六月婷婷成人电影| 4399无码视频| 综合色播| 亚洲丁香婷婷丁香五月天激情| 大学生高潮无套内谢视频| 国产激情在线| 欧美狠狠地| 日本乱子人伦在线视频| YJLZZJLZZ亚洲乱熟无码| 色五月丁香五月婷婷五月成人网 | 另类A片| 五月综合婷婷五月| 久久人妻少妇嫩草AV| 丁香五月激情宗合网| 激情五月天视频| 九日日夜夜69| 五月天激情网址| 丁香婷婷深情五月亚洲| 丁香五月先锋| 激情www| 久99久视频精品| 色五月丁香一区在线| 激情五月天婷婷五月天| 色婷婷色情| 婷婷五月天伊人| 97操碰在线97| 五月丁香婷在线| 亚洲性爱AV在线| 99热精品10| 丁香五月欧美| 婷婷五月天在线看| 操操天堂| 全高清无码视頻| 99久精品视频| 色色色在线观看| 五月丁香免费看| 五月天丁香啪啪啪啪| 亚洲最大五月六月丁香婷婷| 色综啪啪网| 另类激情五月| 黄桃AV无码免费一区二区三区 | 91丨九色丨国产| 欧美视频在线观看噜噜| 国产美女无遮挡裸体毛片A片| 亚洲日本激情| 大香蕉久| 日本的α片xxxwww| 色播五月丁香| 欧美性丁香色色五月天综合爱爱| 丁香六月激情| 久久黄色网扯| 99ER热精品视频| 79色色免费| 九九色网专区| 久久婷婷五月天亚洲欧美| 嫩草视频| 99综合| 五月丁香婷中文| 色无码|