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

Kotlin + Spring Boot服務端開發(fā)

開發(fā) 后端
Kotlin能與Java混合使用,并且直接復用Java的生態(tài)系統(tǒng)(庫、框架、工具)。一個已有的Java項目,只需引用Kotlin的Maven/Gradle插件,以及引用Kotlin標準庫的依賴,就可以逐漸摻入Kotlin代碼。你完全可以當它是a better Java。Spring Boot是流行的Web快速開發(fā)框架,使基于Spring的開發(fā)更便捷。

[[175220]]

Kotlin是什么?

著名IDE廠商JetBrains開發(fā)的基于JVM的靜態(tài)類型編程語言,聲稱100% interoperable with Java。Kotlin是由工程師設計的,各種細節(jié)設計非常切合工程師的需要。語法近似Java和Scala,且已活躍在Android開發(fā)領域,被譽為Android平臺的Swift。

Kotlin能與Java混合使用,并且直接復用Java的生態(tài)系統(tǒng)(庫、框架、工具)。一個已有的Java項目,只需引用Kotlin的Maven/Gradle插件,以及引用Kotlin標準庫的依賴,就可以逐漸摻入Kotlin代碼。你完全可以當它是a better Java。

Kotlin的學習曲線極其平緩,學習量相當于一個框架。有經(jīng)驗的程序員閱讀了文檔就能立刻用起來了。不信你看:

舉幾個例子來說明Kotlin的優(yōu)點吧,上代碼:

  1. //句尾不用寫分號 
  2.  
  3. // 自動推導變量類型,無需聲明 
  4. val a = "Hello" 
  5.  
  6. // 簡單的println 
  7. println(a.length() == 5) 
  8.  
  9. // 不用寫new, 直接調(diào)構造函數(shù) 
  10. val b = String("Hello"
  11.  
  12. // 字符串插值 
  13. "$a $b" == "Hello Hello" 
  14.  
  15. // if-else是表達式, 真方便! 
  16. // ==相當于equals, 再也不怕忘寫equals了! 
  17. val oneOrTwo = if (a == "Hello") 1 else 2 
  18.  
  19. // ===相當于Java的== 
  20. (a === b) == false 
  21.  
  22. // Lambda用{}包起來,若有唯一參數(shù),參數(shù)名默認為it 
  23. // 集合的函數(shù)式操作, 無需Java 8繁瑣的stream.collect(Collectors.toList()) 
  24. listOf(-1, 0, 1).map{it + 1}.filter{it > 0}) == listOf(1, 2) 
  25.  
  26. // 用一個默認值給null兜底 
  27. val number = getNumberOrNull() ?: 0 
  28.  
  29. // 自動關閉的資源 
  30. FileInputStream("MyFile").use { stream -> // 可指定參數(shù)名為stream, 取代默認的it 
  31.   val firstByte = stream.read() 
  32.  
  33. // 可以更簡單,一行 
  34. val fileContent = File("MyFile").readText() 
  35.  
  36. // lazy, 延遲初始化 
  37. class CPU { 
  38.   val cpuCores by lazy { Runtime.getRuntime().availableProcessors() } 
  39.  

Kotlin為厭煩Java而疑慮Scala的人提供了避風港,為喜歡Groovy而想要靜態(tài)類型的人提供了避風港。啊!生活。

Spring Boot是什么?

Spring Boot是流行的Web快速開發(fā)框架,使基于Spring的開發(fā)更便捷。我們已經(jīng)知道Spring很好用,而Spring Boot的設計目標是:

  • 為一切Spring開發(fā)提供極速、通用的上手體驗
  • 開箱即用,但是當默認值不適合需求時不會妨礙你做改變
  • 提供一組適用于各種項目類型的非功能性特性(如內(nèi)嵌服務器、安全、度量、健康檢查、外部配置)
  • 完全不需要代碼生成和XML配置

Kotlin + Spring Boot

Kotlin能輕松集成Spring Boot,用Java怎么寫,用Kotlin基本上也怎么寫。

Spring能在線生成項目,免去創(chuàng)建項目的煩惱,請猛擊鏈接http://start.spring.io/ 。

我們用Gradle構建,寫一個build.gradle文件:

  1. buildscript { 
  2.   ext { 
  3.     springBootVersion = '1.3.5.RELEASE' 
  4.     kotlinVersion = '1.0.4' 
  5.   } 
  6.   repositories { 
  7.     mavenCentral() 
  8.   } 
  9.   dependencies { 
  10.     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
  11.     classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
  12.   } 
  13.  
  14. apply plugin: 'kotlin' 
  15. apply plugin: 'spring-boot' 
  16.  
  17. jar { 
  18.   baseName = 'myapp' 
  19.   version = '0.1-SNAPSHOT' 
  20. sourceCompatibility = 1.8 
  21. targetCompatibility = 1.8 
  22. // class文件保留參數(shù)名稱 
  23. compileJava.options.compilerArgs.add '-parameters' 
  24. compileTestJava.options.compilerArgs.add '-parameters' 
  25. springBoot { 
  26.   mainClass = 'myapp.ApplicationKt' 
  27.  
  28. dependencies { 
  29.   compile 'org.springframework.boot:spring-boot-starter-aop' 
  30.   compile 'org.springframework.boot:spring-boot-starter-web' 
  31.   compile "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}" 
  32.  

先寫一個主類Application.kt,放在src/main/kotlin目錄下(自己想一個包名哈),來啟動整個應用:

  1. @SpringBootApplication 
  2. open class Application { 
  3.  
  4.   @Bean 
  5.   open fun json(): MappingJackson2JsonView { 
  6.     return MappingJackson2JsonView(ObjectMapper()) 
  7.   } 
  8.  
  9. fun main(args: Array<String>) { 
  10.   SpringApplication.run(Application::class.java, *args) 
  11.  

Kotlin的函數(shù)可定義在類外面,而特殊的main函數(shù)要么放在外面,要么放在伴生對象(companion object)里面。這里就放在外面吧!

你會發(fā)現(xiàn)class和fun前面有open修飾符,它的意思是非final,Kotlin默認一切都是final的,如果不想要final救要加上open。由于Spring有時要創(chuàng)建代理,要求類和方法不能為final,因此我們每一處都寫上open,以免忘記。

這里只有一個json()方法,用來在Spring中初始化Jackson,這樣我們就能使用JSON了。

現(xiàn)在來寫一個RestController,提供RESTful API吧:

  1. @RestController 
  2. @RequestMapping("/api/users"
  3. open class UserApi { 
  4.     @RequestMapping("/{id}",  method = arrayOf(RequestMethod.GET)) 
  5.       open fun get(@PathVariable id: Long) = "User(id=$id, name=admin, password=123)" 
  6.  

好簡單啊!現(xiàn)在,在IDE中運行Application.kt文件,就開始運行了!用瀏覽器打開http://localhost:8080/api/use...

現(xiàn)在要把數(shù)據(jù)保存到數(shù)據(jù)庫了:

Spring Boot使用JPA非常簡單(照著官網(wǎng)的getting started學吧),但我要介紹另一種ORM框架——Ebean,它模仿了Rails的Active Record,支持常用的JPA注解。值得一提的是,Ebean的作者也喜歡Kotlin。

需要一個配置文件src/main/resources/ebean.properties :

  1. # 是否生成建表SQL 
  2. ebean.db.ddl.generate=true 
  3. # 是否執(zhí)行建表SQL 
  4. ebean.db.ddl.run=false 
  5.  
  6. datasource.db.username=DB用戶名 
  7. datasource.db.password=DB密碼 
  8. datasource.db.databaseUrl=jdbc:mysql://localhost:3306/你的database名稱 
  9. datasource.db.databaseDriver=com.mysql.jdbc.Driver  

我們對ebean.db.ddl.run(是否執(zhí)行建表SQL)選擇了false。因為Ebean會生成建表SQL,我們可以手動執(zhí)行,避免每次都重新建表,把數(shù)據(jù)丟棄了。編寫實體類后再運行,SQL會生成在項目目錄下,手動執(zhí)行一下吧!(亦可在***啟動前把ebean.db.ddl.run改成true)

然后在Spring中初始化Ebean吧:

  1. // 把這個方法添加到Application類 
  2.   @Bean(autowire = Autowire.BY_TYPE) 
  3.   open fun getEbeanServer(): EbeanServer { 
  4.     val config = ServerConfig() 
  5.     config.name = "db" 
  6.     config.loadFromProperties() 
  7.     config.isDefaultServer = true 
  8.     return EbeanServerFactory.create(config) 
  9.   }  

然后要修改main方法,在Spring之前先執(zhí)行Ebean的agent,改寫實體類的字節(jié)碼:

  1. fun main(args: Array<String>) { 
  2.   val packageName = "com.iostate.**" // 改成你自己的包名,實體類要放在這個包里面 
  3.   if (!AgentLoader.loadAgentFromClasspath("avaje-ebeanorm-agent"
  4.                                           "debug=1;packages=$packageName")) { 
  5.     System.err.println( 
  6.       "avaje-ebeanorm-agent not found in classpath - not dynamically loaded"
  7.   } 
  8.   SpringApplication.run(Application::class.java, *args) 
  9.  

Ebean需要執(zhí)行agent來改寫字節(jié)碼(instrumenation),而Hibernate則選擇了給實體對象創(chuàng)建動態(tài)代理(dynamic proxy),都是為了能對實體進行AOP操作。

instrumenation使用復雜,調(diào)試簡單;dynamic proxy使用簡單,調(diào)試復雜。各有千秋,我更認同改寫字節(jié)碼。

編寫實體類:

  1. import javax.persistence.* 
  2.  
  3. import com.avaje.ebean.Model 
  4. import com.avaje.ebean.annotation.WhenCreated 
  5. import com.avaje.ebean.annotation.WhenModified 
  6. import java.sql.Timestamp 
  7.  
  8. import com.avaje.ebean.annotation.SoftDelete 
  9. import com.fasterxml.jackson.annotation.JsonIgnore 
  10.  
  11. @MappedSuperclass 
  12. abstract class BaseModel : Model() { 
  13.  
  14.   @Id @GeneratedValue 
  15.   var id: Long = 0 
  16.  
  17.   @Version 
  18.   var version: Long = 0 
  19.  
  20.   @WhenCreated 
  21.   var whenCreated: Timestamp? = null 
  22.  
  23.   @WhenModified 
  24.   var whenModified: Timestamp? = null 
  25.  
  26.  
  27. @Entity 
  28. class User ( 
  29.     var name: String = ""
  30.     @JsonIgnore 
  31.     var password: String = "" 
  32.     @SoftDelete 
  33.     var deleted: Boolean = false 
  34. ) : BaseModel() { 
  35.   companion object find : Find<Long, User>() 
  36.  

***個類是所有實體模型的基類,提供一些通用字段。id是自增主鍵,version是樂觀鎖的標志,whenCreated是創(chuàng)建時間,whenModified是修改時間。有的變量類型以問號結尾,這個跟Swift語言是一樣的,表示可為null(默認是非null的)。

第二類是User,行數(shù)很少,沒有繁瑣的getter/setter。@JsonIgnore的作用是防止敏感字段被泄露到JSON中,@SoftDelete的作用是軟刪除(數(shù)據(jù)不可見,但沒有真的刪除)。companion object find : Find<Long, User>()提供了一組快捷查詢方法,如byId(id)all() 。

現(xiàn)在把UserApi修改如下:

  1. @RestController 
  2. @RequestMapping("/api/users"
  3. open class UserApi { 
  4.   @RequestMapping("/{id}",  method = arrayOf(RequestMethod.GET)) 
  5.   open fun get(@PathVariable id: Long) = User.byId(id) 
  6.  
  7.   @RequestMapping("/new", method = arrayOf(RequestMethod.POST)) 
  8.   open fun create(@RequestParam name: String, @RequestParam password: String): User { 
  9.     return User(namepassword).apply { 
  10.       save() 
  11.     } 
  12.   } 
  13.  

get方法真正向數(shù)據(jù)庫做查詢了!增加了create方法來創(chuàng)建用戶!如果想用瀏覽器快速測試,把RequestMethod.POST改成GET,輸入鏈接http://localhost:8080/api/use... 試試!

一個注意事項

Spring Boot能把程序打包成jar直接運行,這是很方便群眾的!但是JSP和Ebean在jar模式都無法工作。

那么在生產(chǎn)環(huán)境要怎么解決呢?可以把jar解壓運行!

參考文檔的exploded archives: http://docs.spring.io/spring-...

  1. # 解壓 
  2. unzip -q myapp.jar 
  3. # 運行 
  4. java org.springframework.boot.loader.JarLauncher 
  5. # 生產(chǎn)模式用以下的nohup方式,以防程序隨著shell一起關閉 
  6. nohup java org.springframework.boot.loader.JarLauncher &  

我自己用的命令不一樣:

  1. unzip -q myapp.jar 
  2. nohup java -cp '.:./lib/*' com.myapp.ApplicationKt &  

注意當前所在的工作目錄,日志目錄/logs會創(chuàng)建在當前工作目錄下。

收工

我提供了一個示例項目,比較粗糙,請多多包涵 https://github.com/sorra/bms

老外也有幾個示例項目,可供參考:

Spring Boot Kotlin project with a REST Webservice and Spring Data: https://github.com/sdeleuze/s...

Demo Webapp using SpringBoot, Kotlin and React.js: https://github.com/winterbe/s...

順帶一提,輕境界就是用Kotlin + Spring Boot構建的!

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2013-03-25 10:08:44

PHPWeb

2025-07-24 00:45:00

AIMCP服務端

2016-08-04 14:41:21

架構java服務端開發(fā)

2016-03-18 09:04:42

swift服務端

2012-03-02 10:38:33

MySQL

2010-08-03 09:59:30

NFS服務

2021-05-25 08:20:37

編程技能開發(fā)

2015-11-09 17:51:12

服務器端開發(fā)

2010-02-24 15:42:03

WCF服務端安全

2022-12-29 08:56:30

監(jiān)控服務平臺

2009-08-21 15:22:56

端口偵聽

2010-03-19 18:17:17

Java Server

2010-03-18 18:09:36

Java Socket

2021-04-26 13:20:06

Vue服務端渲染前端

2023-08-08 08:17:23

VasDolly服務端參數(shù)

2009-08-21 16:14:52

服務端與客戶端通信

2011-09-09 09:44:23

WCF

2009-08-21 15:59:22

服務端與客戶端通信

2018-05-04 15:27:22

Spring Boo Web開發(fā)

2022-05-18 08:32:05

服務監(jiān)控Prometheus開源
點贊
收藏

51CTO技術棧公眾號

欧美xxxhd| 99热这里只有精品在线观看| 网友自拍区视频精品| 午夜精品久久久久久久久| 国产亚洲欧美一区二区三区| 国产又大又粗又爽| 婷婷综合五月| 日韩激情视频在线| 欧美一级黄色影院| 黄色网页在线播放| av男人天堂一区| 国产精品久久久久久久久久99| 一本色道久久88| 国产精品白丝av嫩草影院| 午夜不卡在线视频| 亚洲a∨一区二区三区| 国产又大又粗又长| 国产精品久久久久久模特| 亚洲精品国产成人| 久久久久久久久久一区| 色老头在线一区二区三区| 日韩毛片视频在线看| 久久99精品久久久久久青青日本 | 天天射综合影视| 亚洲欧美成人一区| 欧美日韩激情视频一区二区三区| 国产一区日韩二区欧美三区| 97婷婷涩涩精品一区| av黄色免费在线观看| 秋霞午夜一区二区三区视频| 色94色欧美sute亚洲13| 精品成在人线av无码免费看| 免费在线观看黄色网| 久久久99精品免费观看不卡| 国产乱人伦精品一区二区| 中文字幕无码乱码人妻日韩精品| 国产精品久久久一区二区| 久久免费视频网| 麻豆明星ai换脸视频| 欧美色婷婷久久99精品红桃| 日韩电影中文 亚洲精品乱码| 97人人模人人爽人人澡| 欧美videos粗暴| 欧美亚洲丝袜传媒另类| 日本精品免费在线观看| free性欧美| 亚洲一区二区美女| 热久久最新地址| 在线欧美三级| 亚洲精品菠萝久久久久久久| 成年人黄色在线观看| 日本中文字幕伦在线观看| 亚洲国产精品ⅴa在线观看| 欧洲精品码一区二区三区免费看| 国产精品呻吟| 午夜福利视频一区二区| 黄色精品视频| 亚洲一级电影视频| 国产又黄又爽免费视频| 秋霞成人影院| 国产精品不卡在线| 亚洲一卡二卡三卡| 日本在线观看视频| 国产精品福利在线播放| 一区二区不卡在线观看| 日本在线天堂| 一区二区三区影院| 日韩欧美不卡在线| 色多多在线观看| 日韩欧美有码在线| 妺妺窝人体色www在线观看| sese综合| 欧美三级资源在线| 亚洲精品性视频| 亚洲a成人v| 日韩欧美一区二区在线视频| 亚洲欧美日韩色| 日本亚洲不卡| 一本大道亚洲视频| 手机av在线看| 亚洲黄色毛片| 国产精品福利在线| 国产伦精品一区二区三区四区| 国内精品免费在线观看| 成人免费视频观看视频| 色视频免费在线观看| 中文字幕精品在线不卡| 最近中文字幕免费mv| 黄色在线看片| 日韩欧美国产网站| av在线免费看片| 秋霞影院一区二区三区| 在线日韩av观看| 免费中文字幕在线观看| 亚洲永久网站| 亚洲va男人天堂| 奇米影视888狠狠狠777不卡| 国产精品福利一区二区| 国产一线二线三线女| 亚洲精品一级二级| 日韩一级精品视频在线观看| 黑人巨大精品欧美| 在线观看日韩| 日本道色综合久久影院| 国产免费福利视频| 97久久超碰国产精品| 伊人久久大香线蕉综合75| 黄色污网站在线观看| 欧美日本视频在线| 在线免费播放av| 亚洲精品a级片| 人人爽久久涩噜噜噜网站| 国产叼嘿视频在线观看| 久久久激情视频| 一卡二卡三卡视频| 日本亚洲欧洲无免费码在线| 日韩精品在线观看一区| 欧美黄色免费看| 麻豆成人免费电影| 欧美精品免费观看二区| 黄色在线看片| 欧美一区二区久久| 欧美人与性囗牲恔配| 精品91视频| 国产欧美韩国高清| 国产污视频在线| 亚洲1区2区3区4区| 下面一进一出好爽视频| 色偷偷综合网| 国产精品video| 日韩有码电影| 婷婷久久综合九色国产成人| 91精品国产高清91久久久久久 | 韩日午夜在线资源一区二区 | 国产欧美一区二区三区鸳鸯浴| 国产成a人亚洲精v品在线观看| 农村妇女一区二区| 中文日韩电影网站| 波多野结衣一区二区三区在线| 99在线精品观看| 国产精彩视频一区二区| 91精品短视频| 欧美国产日韩在线| 精品人妻av一区二区三区| 亚洲欧洲日产国产综合网| 日韩精品一区二区三区不卡| 另类尿喷潮videofree| 久久久久久久久久亚洲| 亚洲毛片欧洲毛片国产一品色| 亚洲欧洲中文日韩久久av乱码| 依人在线免费视频| 久久国产亚洲精品| 国产视频999| 韩国av网站在线| 欧美一级久久久| 欧美被狂躁喷白浆精品| 国产伦理精品不卡| 欧美精品在欧美一区二区| 亚洲福利合集| 性色av一区二区三区免费| 亚洲人成色777777老人头| 欧美日韩免费一区| 波多野结衣a v在线| 日韩激情视频网站| 一区二区三区在线视频111| 日韩欧国产精品一区综合无码| 久久精品国产电影| 国产情侣av在线| 亚洲国产欧美在线人成| 无码国产精品一区二区免费式直播 | 精品国产乱码久久久久久老虎| 精品无码人妻一区二区三区品| 国产精品一区二区男女羞羞无遮挡| 欧洲美女和动交zoz0z| 伊色综合久久之综合久久| 午夜精品久久久久久久白皮肤| 亚洲av毛片成人精品| 欧美午夜寂寞影院| 神马久久精品综合| 成人一区二区三区| 成人三级视频在线播放| 国产高清一区| 国产精品我不卡| 成人看片在线观看| 久久这里有精品视频| 手机在线观看免费av| 91精品福利视频| 午夜写真片福利电影网| 26uuu精品一区二区| 小明看看成人免费视频| 影音先锋国产精品| 亚洲国产精品毛片| 成人看片黄a免费看视频| 国产成人啪精品视频免费网| 国产乱色在线观看| 亚洲欧美制服另类日韩| 国产福利资源在线| 一本到不卡精品视频在线观看| 婷婷国产成人精品视频| gogo大胆日本视频一区| 日本不卡一区在线| 一区二区高清| 男人的天堂成人| 国产最新精品| 国产精品区二区三区日本| 久久亚洲资源中文字| 69久久夜色精品国产69| 免费av不卡| 亚洲欧美精品一区| 亚洲AV无码国产精品午夜字幕| 在线观看亚洲精品| 日韩精品一区三区| 中文字幕欧美一区| 日本少妇高潮喷水xxxxxxx| 国产91精品一区二区| 中文字幕亚洲乱码| 性欧美xxxx大乳国产app| 91国在线高清视频| 欧美gvvideo网站| 女人一区二区三区| 99久热这里只有精品视频免费观看| 国产噜噜噜噜久久久久久久久| av女在线播放| 久久99热精品这里久久精品| 天堂а√在线官网| 亚洲视频视频在线| 性感美女视频一二三| 日韩精品中午字幕| 国产精品久久久久毛片| 欧美日韩在线综合| 国产一卡二卡三卡| 色综合天天综合在线视频| 日本少妇xxxx动漫| 亚洲一区二区三区四区中文字幕| 性欧美疯狂猛交69hd| 国产精品乱码久久久久久| 中文字幕 自拍| 久久亚洲一级片| 五月婷婷综合在线观看| 97久久精品人人澡人人爽| 中文字幕a在线观看| 懂色av一区二区三区蜜臀| 青娱乐国产精品视频| 国产精品一二三区在线| 想看黄色一级片| 美日韩一级片在线观看| 日日摸天天爽天天爽视频| 久久久久中文| 青青在线免费观看视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 一区中文字幕在线观看| 久久香蕉国产| 亚洲激情一区二区三区| 日本在线电影一区二区三区| 亚洲成人自拍视频| 久久久综合色| 国产树林野战在线播放| 欧美成人中文| 免费拍拍拍网站| 日韩视频一区二区三区在线播放免费观看| 久久99久久久久久| 好看的日韩av电影| 国产伦精品一区二区三区四区视频_| 亚洲国产激情| 亚洲人成色77777| 日韩精品一二区| 最新av免费在线观看| 国产麻豆9l精品三级站| 91九色蝌蚪porny| 91毛片在线观看| 正在播放国产对白害羞| 亚洲欧美日韩国产中文在线| 久久久一二三区| 欧美视频在线免费看| 中文字幕在线观看1| 欧美一卡二卡三卡四卡| 天天操天天干天天操| 国产亚洲精品va在线观看| 免费看a在线观看| 久久免费成人精品视频| 欧美日韩视频免费观看| 国产一区二区丝袜高跟鞋图片| 精品成人18| 精品国产免费一区二区三区| 日本电影一区二区| 成人午夜视频免费观看| 久久久夜夜夜| 国产男女无遮挡猛进猛出| 久久久精品欧美丰满| 人妻久久一区二区| 欧美色欧美亚洲高清在线视频| 136福利视频导航| 亚洲精品美女视频| 日本中文字幕在线看| 81精品国产乱码久久久久久| 精品国产美女a久久9999| 国产女人水真多18毛片18精品| 成人无号精品一区二区三区| 人人妻人人澡人人爽欧美一区双 | 国产精品九九久久久久久久| 中文字幕一区日韩精品| 日本不卡一区二区三区视频| 欧美精品自拍| 在线观看免费污视频| 成人av网站免费观看| 国产精品久久国产精麻豆96堂| 亚洲成人动漫一区| 91麻豆一区二区| 亚洲欧美日韩国产成人| 久久五月精品中文字幕| 国产日韩精品在线| 丝袜av一区| 欧美a级免费视频| 麻豆国产一区二区| 少妇真人直播免费视频| 一级做a爱片久久| 一区二区www| 国产午夜精品视频| 日本片在线观看| 国产精品xxx视频| 天堂网av成人| 国产曰肥老太婆无遮挡| 国产精品一区二区久久精品爱涩 | 亚洲影视资源网| 国产又爽又黄又嫩又猛又粗| 亚洲人午夜精品| 成人性生交大片免费网站| 国产精品综合久久久久久| 欧美99久久| 樱花草www在线| 成人欧美一区二区三区白人| 国产情侣免费视频| 亚洲欧美日韩国产成人| 中文字幕在线中文字幕在线中三区| 99久久久久国产精品免费| 一级毛片免费高清中文字幕久久网| 牛夜精品久久久久久久| 国产色91在线| 91丨九色丨海角社区| 亚洲欧美变态国产另类| 综合日韩av| 欧美精品一区二区三区在线看午夜 | 试看120秒一区二区三区| 欧美性视频在线播放| 蜜臀av国产精品久久久久| wwwww黄色| 精品视频免费看| 麻豆影视在线观看_| 成人免费淫片aa视频免费| 国产精品久久占久久| 91pony九色| 一区二区三区色| 亚洲奶汁xxxx哺乳期| 午夜精品一区二区三区在线视| 国产精品极品在线观看| 97干在线视频| 97久久超碰精品国产| 精品成人av一区二区在线播放| 亚洲精品一区av在线播放| xx欧美视频| 亚洲国产婷婷香蕉久久久久久99| 美女视频一区在线观看| 老熟妇高潮一区二区三区| 日韩欧美中文字幕制服| 91禁在线看| 欧美激情论坛| 久久99蜜桃精品| 欧美精品色哟哟| 亚洲高清在线观看| 欧美色网一区| 中文字幕成人一区| 粉嫩av一区二区三区| 日本午夜视频在线观看| 国产性色av一区二区| 国产区一区二| 秋霞无码一区二区| 久久精品网站免费观看| 亚洲图片欧美在线| 欧美激情亚洲激情| 神马久久影院| 国产又粗又长又爽又黄的视频| 亚洲aaa精品| 99riav在线| 国产伦精品一区二区三区视频免费| 亚洲一级在线| 欧美色图一区二区| 亚洲人在线视频| 一区二区中文字幕在线观看| 美女福利视频在线| 亚洲免费观看高清完整版在线 | 91精品国产乱码久久| 久久琪琪电影院| 欧美独立站高清久久| 成人性生活免费看| 欧美日韩第一区日日骚| 都市激情国产精品| 色撸撸在线观看| 久久夜色精品国产欧美乱极品| 国产乱淫a∨片免费视频| 69视频在线免费观看|