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

Java EE 6引入的JPA 2.0四大新特性詳解

原創
開發 后端
JPA 2.0是在Java EE 6當中新引入的Java持久化API。JPA 2.0帶來了許多新特性和增強,其中包括對象/關系映射增強,Java持久化查詢語言增強,一種新的基于標準的查詢API,以及對悲觀鎖的支持。

【51CTO精選譯文】Java EE 5平臺引入了Java持久化API(Java Persistence API,JPA),它為Java EE和Java SE應用程序提供了一個基于POJO的持久化模塊。JPA處理關系數據與Java對象之間的映射,它使對象/關系(O/R)映射標準化,JPA已經被廣泛采用,已經成為事實上的O/R持久化企業標準。

Java EE 6帶來了JPA的最新版本 — JSR 317:Java持久化2.0,JPA 2.0帶來了許多新特性和增強,包括:

1、對象/關系映射增強;

2、Java持久化查詢語言增強;

3、一種新的基于標準的查詢API;

4、支持悲觀鎖定。

對象/關系映射增強

JPA 1.0支持集合的映射,但這些集合只能包含實體,JPA 2.0增加了集合映射的基礎數據類型,如String和Integer,以及嵌入式對象的集合。JPA中的嵌入式對象是一個不能存在于它自身的對象,而是作為父對象的一部分存在,即它的數據不是存在于它自己的表中,而是嵌入在父對象的表中。

JPA 2.0增加了兩個支持新的集合映射的注解:@ElementCollection 和 @CollectionTable。使用@ElementCollection注解指定集合的嵌入式對象,這些集合是獨立存儲在集合表中的,使用@CollectionTable注解指定集合表的詳細信息,如它包含的列。

下面是一個嵌入式類,表示了車輛的訪問服務,它存儲了訪問的日期,描述和費用,此外,車輛可以配備一或多個可選功能,每個功能是FeatureType類型的一個枚舉值。

  1. public enum FeatureType { AC, CRUISE, PWR, BLUETOOTH, TV, ... }  
  2.  
  3.    @Embeddable 
  4.    public class ServiceVisit {  
  5.        @Temporal(DATE)  
  6.        @Column(name="SVC_DATE")  
  7.        Date serviceDate;  
  8.  
  9.        String workDesc;  
  10.        int cost;  
  11.    }  

枚舉值和嵌入式對象可以在一個表示車輛服務歷史的實體中使用,如:

  1. @Entity 
  2.    public class Vehicle {  
  3.  
  4.        @Id int vin;  
  5.  
  6.        @ElementCollection 
  7.        @CollectionTable(name="VEH_OPTNS")  
  8.   .    @Column(name="FEAT")  
  9.        Set<FeatureType> optionalFeatures;  
  10.  
  11.        @ElementCollection 
  12.        @CollectionTable(name="VEH_SVC")  
  13.        @OrderBy("serviceDate")  
  14.        List<ServiceVisit> serviceHistory;  
  15.        ...  
  16.    }  

#t#Vehicle實體中的第一對注解@ElementCollection 和 @CollectionTable指定FeatureType值存儲在VEH_OPTNS集合表中,第二對注解@ElementCollection 和 @CollectionTable指定ServiceVisit嵌入式對象存儲在VEH_SVC集合表中。

雖然在例子中沒有顯示,@ElementCollection注解有兩個屬性:targetClass 和 fetch。targetClass屬性指定基礎類或嵌入式類的類名,如果字段或屬性是使用泛型定義的,那這兩個屬性是可選的,上面這個例子就是這樣。Fetch屬性是可選的,它指定集合是延后檢索還是立即檢索,使用javax.persistence.FetchType常量,值分別用LAZY和EAGER,默認情況下,集合是延后匹配的。

JPA 2.0中還有其它許多關于對象/關系映射的增強,例如,JPA 2.0支持嵌套式嵌入,關系嵌入和有序列表,也增加了新的注解增強映射功能,通過@Access注解更靈活地支持特定的訪問類型,更多用于實體關系的映射選項,如對單向一對多關系的外鍵映射支持,通過@MapsId注解支持派生身份,支持孤體刪除。

#p#

Java持久化查詢語言增強

JPA 1.0定義了一個廣泛的Java持久化查詢語言(非正式簡稱為JPQL。有關JPQL查詢的缺陷,可參考51CTO之前發布的這篇文章),使用它你可以查詢實體和它們的持久化狀態。JPA 2.0對JPQL做了大量改進,如現在可以在查詢中使用case表達式。在下面的查詢中,如果雇員的評分為1,則通過乘以1.1對雇員的薪水進行了增長,如果評分為2,則乘以1.05,其它評分則乘以1.01。

  1. UPDATE Employee e  
  2.    SET e.salary =  
  3.       CASE WHEN e.rating = 1 THEN e.salary * 1.1  
  4.            WHEN e.rating = 2 THEN e.salary * 1.05  
  5.            ELSE e.salary * 1.01  
  6.       END 

JPA 2.0也為JPQL增加了大量新的運算符,如NULLIF和COALESCE,當數據庫使用其它非空數據解碼時,NULLIF運算符是非常有用的,使用NULLIF,你可以在查詢中將這些值轉換為空值,如果參數等于NULLIF,NULLIF會返回空值,否則返回第一個參數的值。

假設薪水數據保存在employee表中,數據類型為整數,卻掉的薪水解碼為-9999,下面的查詢返回薪水的平均值,為了正確地忽略卻掉的薪水,查詢使用NULLIF將-9999轉換為空值。

  1. SELECT AVG(NULLIF(e.salary, -99999))  
  2.    FROM Employee e  

COALESCE運算符接收一串參數,從列表中返回第一個非空值,相當于下面的case表達式:

  1. CASE WHEN value1 IS NOT NULL THEN value1  
  2.         WHEN value2 IS NOT NULL THEN value2  
  3.         WHEN value3 IS NOT NULL THEN value3  
  4.         ...  
  5.         ELSE NULL 
  6.    END 

假設employee表包括一個辦公電話號碼和家庭電話號碼列,無電話號碼的列使用空值表示。下面的查詢返回每個雇員的姓名和電話號碼,COALESCE運算符指定查詢返回辦公電話號碼,但如果為空,則返回家庭電話號碼,如果兩者都為空,則返回一個空值。

  1. SELECT NameCOALESCE(e.work_phone, e.home_phone) phone  
  2.    FROM Employee e  

#t#JPA 2.0向JPQL增加的其它運算符是INDEX,TYPE,KEY,VALUE和ENTRY。INDEX運算符指定查詢時的排序順序,TYPE運算符選擇一個實體的類型,將查詢限制到一或多個實體類型,KEY,VALUE和ENTRY運算符是JPA 2.0中的泛化映射功能的一部分。使用KEY運算符提取映射鍵,VALUE運算符提取映射值,ENTRY運算符選擇一個映射實體。

此外,JPA 2.0增加了選擇列表、以及集合值參數和非多態查詢中運算符的支持。

#p#

標準的API

JPA 2.0中引入的另一個重要特性是標準的API,利用這個API可以動態地構建基于對象的查詢,本質上,這個標準API等價于面向對象的JPQL,使用它,你可以使用基于對象的方法創建查詢,不再需要JPQL使用的字符串操作。

標準API是基于元模型的,元模型是一個提供了架構級關于持久化單元托管類的元數據的抽象模型, 元模型讓你構建強類型的查詢,它也允許你瀏覽持久化單元的邏輯結構。

通常,一個注解處理器使用元模型生成靜態元模型類,這些類提供持久化狀態和持久化單元托管類的關系,但你可以對靜態元模型類編碼。下面是一個實體實例:

  1. @Entity public class Employee {  
  2.      @Id Long Id;  
  3.      String firstName;  
  4.      String lastName;  
  5.      Department dept;  
  6.    }  

下面是對應的靜態元模型類:

  1. import javax.persistence.meta,model.SingularAttribute;  
  2.    import javax.persistence.meta,model.StaticMetamodel;  
  3.  
  4.  
  5.    @Generated("EclipseLink JPA 2.0 Canonical Model Generation" 
  6.    @StaticMetamodel(Employee.class)  
  7.    public class Employee_ {  
  8.      public static volatile SingularAttribute<Employee, Long> id;  
  9.      public static volatile SingularAttribute<Employee, String> firstName;  
  10.      public static volatile SingularAttribute<Employee, String> lastName;  
  11.      public static volatile SingularAttribute<Employee, Department> dept;  
  12.  
  13.    }  

此外,JPA 2.0元模型API允許你動態訪問元模型,因此當你使用標準API時,既可以靜態訪問元模型類,也可以動態訪問元模型類。標準API提供了更好的靈活性,既可以使用基于對象的方法,又可以使用基于字符串的方法導航元模型,這意味著你有四種使用標準API的方法:

1、靜態使用元模型類

2、靜態使用字符串

3、動態使用元模型

4、動態使用字符串

無論你使用哪種方法,通過構造一個CriteriaQuery對象定義一個基于標準API的查詢時,使用一個工廠對象CriteriaBuilder構造CriteriaQuery,可以從EntityManager 或 EntityManagerFactory類中獲得CriteriaBuilder。下面的代碼構造一個CriteriaQuery對象:

  1. EntityManager em = ... ;  
  2.    CriteriaBuilder cb = em.getCriteriaBuilder();  
  3.    CriteriaQuery<Customer> cq = cb.createQuery(Customer.class);  

注意CriteriaQuery對象是泛型類型,使用CriteriaBuilder 的createQuery方法創建一個CriteriaQuery,并為查詢結果指定類型。在這個例子中,createQuery 方法的Employee.class參數指定查詢結果類型是Employee。CriteriaQuery對象和創建它們的方法是強類型的。

接下來,為CriteriaQuery對象指定一個或多個查詢源,查詢源表示查詢基于的實體。你創建一個查詢源,然后使用AbstractQuery接口的from()方法將其添加到查詢。AbstractQuery接口是眾多接口中的一員,如CriteriaQuery,From和root,它們都定義在標準API中。CriteriaQuery接口繼承AbstractQuery接口的屬性。

from()方法的參數是實體類或EntityType實體的實例,from()方法的結果是一個Root對象,Root接口擴展From接口,它表示某個查詢的from子句中可能出現的對象。

下面的代碼增加一個查詢源到CriteriaQuery對象:

  1. CriteriaBuilder cb = em.getCriteriaBuilder();  
  2.    CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);  
  3.    Root<Employee> emp = cq.from(Employee.class);  

當你向CriteriaQuery對象添加一個或多個查詢源后,你訪問元模型,然后構造一個查詢表達式,你如何做取決于你是以靜態方式提交查詢還是以動態方式提交查詢,以及是使用元模型還是字符串導航元模型。下面是一個使用元模型類靜態查詢的例子:

  1. cq.select(emp);  
  2.    cq.where(cb.equal(emp.get(Employee_.lastName), "Smith"));  
  3.    TypedQuery<Employee> query = em.createQuery(cq);  
  4.    List<Employee> rows = query.getResultList();  

CriteriaQuery接口的select() 和 where()方法指定查詢結果返回的選擇項目。

注意,你使用EntityManager創建查詢時,可以在輸入中指定一個CriteriaQuery對象,它返回一個TypedQuery,它是JPA 2.0引入javax.persistence.Query接口的一個擴展,TypedQuery接口知道它返回的類型。

在元模型術語中,Employee_是對應于Employee實體類的規范化元模型類,一個規范化元模型類遵循JPA 2.0規范中描述的某些規則。例如,元模型類的名字來源于托管類,一般都是在托管類名字后面追加一個下劃線“_”。一個規范化元模型是一個包含靜態元模型類的元模型,這個靜態元模型對應于實體,映射的超類,以及持久化單元中的嵌入式類。實際上,這個查詢使用了規范化元模型。下面是一個完整的查詢:

  1. EntityManager em = ... ;  
  2.    CriteriaBuilder cb = em.getCriteriaBuilder();  
  3.    CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);  
  4.    Root<Employee> emp = cq.from(Employee.class);  
  5.    cq.select(emp);  
  6.    cq.where(cb.equal(emp.get(Employee_.lastName), "Smith"));  
  7.    TypedQuery<Employee> query = em.createQuery(cq);  
  8.    List<Employee> rows = query.getResultList();  

下面是使用元模型API查詢的動態版本:

  1. EntityManager em = ... ;  
  2.    CriteriaBuilder cb = em.getCriteriaBuilder();  
  3.    CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);  
  4.    Root<Employee> emp = cq.from(Employee.class);  
  5.    EntityType<Employee> emp_ = emp.getModel();  
  6.    cq.select(emp);  
  7.    cq.where(cb.equal(emp.get(emp_.getSingularAttribute("lastName", String.class)),"Smith"));  
  8.    TypedQuery<Employee> query=em.createQuery(cq);  
  9.    List<Employee> rows=query.getResultList();  

#t#使用元模型API的標準查詢提供了與使用規范化元模型相同的類型,但它比基于規范化元模型的查詢更冗長。

Root的getModel()方法返回根對應的元模型實體,它也允許運行時訪問在Employee實體中聲明的持久化屬性。

getSingularAttribute()方法是一個元模型API方法,它返回一個持久化的單值屬性或字段,在這個例子中,它返回值為Smith 的lastName屬性。下面是使用字符串的元數據導航查詢的靜態版本:

  1. EntityManager em = ... ;  
  2.    CriteriaBuilder cb = em.getCriteriaBuilder();  
  3.    CriteriaQuery<Employee> cq = cb.createQuery(Employee.class);  
  4.    Root<Employee> emp = cq.from(Employee.class);  
  5.    cq.select(emp);  
  6.    cq.where(cb.equal(emp.get("lastName"), "Smith"));  
  7.    TypedQuery query = em.createQuery(cq);  
  8.    List <Employee>rows = query.getResultList();  

這個基于字符串的方法要相對容易使用些,但卻失去了元模型具有的類型安全。

#p#

支持悲觀鎖

鎖是處理數據庫事務并發的一種技術,當兩個或更多數據庫事務并發地訪問相同數據時,鎖可以保證同一時間只有一個事務可以修改數據。

鎖的方法通常有兩種:樂觀鎖和悲觀鎖。樂觀鎖認為多個并發事務之間很少出現沖突,也就是說不會經常出現同一時間讀取或修改相同數據,在樂觀鎖中,其目標是讓并發事務自由地同時得到處理,而不是發現或預防沖突。兩個事務在同一時刻可以訪問相同的數據,但為了預防沖突,需要對數據執行一次檢查,檢查自上次讀取數據以來發生的任何變化。

悲觀鎖認為事務會經常發生沖突,在悲觀鎖中,讀取數據的事務會鎖定數據,在前面的事務提交之前,其它事務都不能修改數據。

JPA 1.0只支持樂觀鎖,你可以使用EntityManager類的lock()方法指定鎖模式的值,可以是READ或WRITE,如:

  1. EntityManager em = ... ;  
  2.    em.lock (p1, READ);  

對于READ鎖模式,JPA實體管理器在事務提交前都會鎖定實體,檢查實體的版本屬性確定實體自上次被讀取以來是否有更新,如果版本屬性被更新了,實體管理器會拋出一個OptimisticLockException異常,并回滾事務。

對于WRITE鎖模式,實體管理器執行和READ鎖模式相同的樂觀鎖操作,但它也會更新實體的版本列。

JPA 2.0增加了6種新的鎖模式,其中兩個是樂觀鎖。JPA 2.0也允許悲觀鎖,并增加了3種悲觀鎖,第6種鎖模式是無鎖。

下面是新增的兩個樂觀鎖模式:

1、OPTIMISTIC:它和READ鎖模式相同,JPA 2.0仍然支持READ鎖模式,但明確指出在新應用程序中推薦使用OPTIMISTIC。

2、OPTIMISTIC_FORCE_INCREMENT:它和WRITE鎖模式相同,JPA 2.0仍然支持WRITE鎖模式,但明確指出在新應用程序中推薦使用OPTIMISTIC_FORCE_INCREMENT。

下面是新增的三個悲觀鎖模式:

1、PESSIMISTIC_READ:只要事務讀實體,實體管理器就鎖定實體,直到事務完成鎖才會解開,當你想使用重復讀語義查詢數據時使用這種鎖模式,換句話說就是,當你想確保數據在連續讀期間不被修改,這種鎖模式不會阻礙其它事務讀取數據。

2、PESSIMISTIC_WRITE:只要事務更新實體,實體管理器就會鎖定實體,這種鎖模式強制嘗試修改實體數據的事務串行化,當多個并發更新事務出現更新失敗幾率較高時使用這種鎖模式。

3、PESSIMISTIC_FORCE_INCREMENT:當事務讀實體時,實體管理器就鎖定實體,當事務結束時會增加實體的版本屬性,即使實體沒有修改。

你也可以指定新的鎖模式NONE,在這種情況下表示沒有鎖發生。

JPA 2.0也提供了多種方法為實體指定鎖模式,你可以使用EntityManager的lock() 和 find()方法指定鎖模式。此外,EntityManager.refresh()方法可以恢復實體實例的狀態。

下面的代碼顯示了使用PESSIMISTIC_WRITE鎖模式的悲觀鎖:

  1. // read  
  2.    Part p = em.find(Part.class, pId);  
  3.  
  4.    // lock and refresh before update  
  5.    em.refresh(p, PESSIMISTIC_WRITE);  
  6.    int pAmount = p.getAmount();  
  7.    p.setAmount(pAmount - uCount);  

在這個例子中,它首先讀取一些數據,然后應用PESSIMISTIC_WRITE鎖,在更新數據之前調用EntityManager.refresh()方法,當事務更新實體時,PESSIMISTIC_WRITE鎖鎖定實體,其它事務就不能更新相同的實體,直到前面的事務提交。

更多JPA 2.0的新特性

除了前面描述的增強和新特性外,JPA 2.0可以使用Bean驗證自動驗證實體,這意味著你可以在實體上指定一個約束,例如,實體中字段的最大長度為15,當實體持久化,更新或移除時自動驗證字段,你可以在persistence.xml配置文件中使用<validation-mode>元素指定自動驗證生效的周期。

【51CTO.com譯稿,非經授權請勿轉載。合作站點轉載請注明原文譯者和出處為51CTO.com,且不得修改原文內容。】

原文:A More Complete Java Persistence API  作者:Ed Ort

責任編輯:yangsai 來源: 51CTO.com
相關推薦

2009-12-22 09:57:36

Java EE 6RESTfulJAX-RS

2011-04-02 09:45:00

Ubuntu 11.0特性

2010-09-03 08:47:51

2010-05-25 08:34:10

C# 4.0

2009-07-03 17:40:35

JSP2.0

2010-06-09 10:48:55

F#Silverlight

2012-11-16 11:11:06

深度影音Linux Deepi

2020-01-10 15:44:50

編程語言C++Java

2010-09-15 13:35:25

SwingHibernateStruts

2010-03-26 14:37:57

Visual Stud

2010-06-03 09:09:10

Hadoop

2019-10-15 08:00:00

HTTP2HTTP前端

2010-11-19 10:36:17

RHEL 6

2020-09-21 18:44:35

MySQL

2015-10-26 09:04:21

PHP7新特性

2009-07-07 12:30:38

JDK1.6

2010-09-29 14:08:31

2011-06-22 08:38:35

Java EE

2009-08-28 10:47:46

Java EE容器

2010-01-14 09:15:07

Java EE 6Servlet 3.0異步處理
點贊
收藏

51CTO技術棧公眾號

韩国中文字幕2020精品| 国精品无码一区二区三区| 乡村艳史在线观看| 国产日产精品一区| 91网免费观看| 国产精品99无码一区二区| 国产探花在线精品| 日韩欧美国产高清| 成人在线免费播放视频| av免费网站在线| 91网上在线视频| 91视频九色网站| 在线免费观看国产精品| 欧美伊人久久| 一区二区三区四区精品| xxxxwww一片| 成人亚洲网站| 一区二区三区在线视频观看 | 亚洲精华一区二区三区| 欧美一区二区福利视频| 精品久久久久久久无码| 国产91足控脚交在线观看| 国产精品欧美久久久久一区二区| 国产精品国产精品国产专区蜜臀ah| 最近中文字幕在线观看| 一本色道久久综合亚洲精品高清| 久久精品国产电影| 国产精品天天干| 欧美电影在线观看免费| 欧美成人综合网站| 潘金莲激情呻吟欲求不满视频| 波多野结衣亚洲一二三| 亚洲专区一二三| 国产在线拍揄自揄拍无码| 国产一区电影| 91蜜桃视频在线| 国产精品毛片va一区二区三区| 中日韩av在线| 日韩精品一级中文字幕精品视频免费观看 | 色婷婷久久久久swag精品| 免费人成在线观看视频播放| 黄av在线播放| 亚洲视频免费看| 亚洲一区二区三区精品视频| 玖玖综合伊人| 久久久亚洲国产美女国产盗摄| 久久精品aaaaaa毛片| 成人毛片视频免费看| 国产精品一区二区果冻传媒| 91亚洲国产成人精品性色| 一级成人免费视频| 精品一区免费av| 成人黄色大片在线免费观看| 中文字幕永久免费视频| 男人的天堂久久精品| 国产精品久久久久久久久免费看| 无码免费一区二区三区| 日韩在线卡一卡二| 国产一区二区在线免费| 一区二区日韩视频| 国产一区二区三区四区五区入口| 97在线电影| 国产91免费看| 久久嫩草精品久久久精品一| 日本一区二区在线| 亚洲第一级黄色片| 亚洲综合网在线观看| 精品国产一区二区三区四区 | 伦理在线一区| 午夜欧美一区二区三区在线播放| 草草视频在线免费观看| 女海盗2成人h版中文字幕| 色综合天天综合网国产成人综合天 | 一本久道久久综合狠狠爱| 97香蕉久久超级碰碰高清版| 日韩在线播放中文字幕| 麻豆高清免费国产一区| 亚洲伊人成综合成人网| 天天射天天操天天干| 久久蜜桃香蕉精品一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4| aaa在线免费观看| 一区二区三区精品视频在线| 久久成人免费观看| 日本精品另类| 日韩三级在线观看| 日韩一级视频在线观看| 欧美激情电影| 久久久久亚洲精品国产| 波多野结衣一区二区三区在线| 久久精品国内一区二区三区| 国产精品日韩欧美一区二区三区| 欧美扣逼视频| 亚洲乱码国产乱码精品精的特点| 99热在线这里只有精品| 欧美视频第一| 亚洲精品av在线播放| 少妇视频在线播放| 激情视频一区| 国产精品一区二区久久久久| 日本精品一二区| 欧美国产一区视频在线观看| 欧美中文字幕在线观看视频| 久久天堂av| 精品国产区一区| 懂色av蜜桃av| 在线亚洲欧美| 97超碰资源| 91caoporn在线| 精品日韩视频在线观看| 香蕉视频色在线观看| 国产麻豆精品久久| 羞羞色国产精品| 国产成人久久精品77777综合| 久久久午夜精品| 男人天堂手机在线视频| 亚洲国产91视频| 亚洲色图美腿丝袜| 国产一级做a爱片久久毛片a| 国产伦理精品不卡| 奇米视频888战线精品播放| 欧美xxxbbb| 3atv在线一区二区三区| 99久久精品免费视频 | 久久综合伊人77777麻豆最新章节| 日韩欧美中文字幕在线视频 | 韩国欧美国产1区| 日本免费高清一区二区| 欧美gv在线| 亚洲高清福利视频| 国产性猛交普通话对白| 国产精品一区二区你懂的| 尤物国产精品| 欧美爱爱视频| 自拍偷拍免费精品| 中国黄色一级视频| 国产欧美一区二区三区在线看蜜臀 | 青青青视频在线免费观看| 美日韩精品视频| 久久精品99久久| 中国字幕a在线看韩国电影| 亚洲国产成人爱av在线播放| 国产无码精品视频| 成人看片黄a免费看在线| 久青草视频在线播放| 亚洲一区二区电影| 欧美二区在线播放| 亚洲精品国产suv一区| 亚洲另类春色国产| 免费黄色在线播放| 好吊视频一区二区三区四区| 国产高清一区二区三区| 金瓶狂野欧美性猛交xxxx| 欧美精品一区二区三区在线播放| 久久久久久久9999| 99视频精品全部免费在线| 午夜精品久久久久久久无码| 欧美丝袜美腿| 国产成人精品视| av在线电影免费观看| 欧美日韩不卡一区| 久久久久久视频| 成人性生交大合| 日韩国产欧美亚洲| 精品国产乱码久久久久久果冻传媒 | 国产精品久久亚洲不卡| 色婷婷久久一区二区| 国产精品伊人久久 | 精品视频在线观看一区| 亚洲动漫在线观看| 成人黄色av免费在线观看| 国产美女福利在线观看| 亚洲精品国产精品国自产观看浪潮| 日本韩国欧美中文字幕| 欧美韩国日本不卡| 久久久久国产免费| 噜噜噜91成人网| 四虎永久免费网站| 久久久久97| 国产精品美女久久| 色www永久免费视频首页在线 | 男人的天堂在线视频免费观看| 欧美一区午夜视频在线观看| 国产情侣在线视频| 国产精品少妇自拍| 国产a√精品区二区三区四区| 老司机一区二区三区| 欧美三级午夜理伦三级老人| 麻豆精品99| 国产精品尤物福利片在线观看| 97caopron在线视频| 亚洲女人天堂网| 国产三级按摩推拿按摩| 岛国av一区二区三区| 亚洲AV成人无码精电影在线| 不卡视频一二三| 一道本在线免费视频| 亚洲激情国产| 手机看片日韩国产| 国产精品三级| 成人欧美一区二区三区视频 | 亚洲自拍小视频| 欧美性xxx| 久久久久久伊人| 蜜桃视频在线观看www社区| 日韩精品欧美国产精品忘忧草| 在线观看免费黄色小视频| 欧美日韩国产丝袜另类| 国精产品一区一区二区三区mba| 久久亚洲精品国产精品紫薇| 亚洲精品无码久久久久久久| 日本少妇一区二区| 精品欧美一区免费观看α√| 极品尤物久久久av免费看| 亚洲欧洲日韩精品| 经典一区二区| 久久99精品国产99久久| 在线播放一区二区精品视频| 国产精自产拍久久久久久| 欧美xxxxxx| 91高清视频免费| 2021中文字幕在线| 欧美黑人国产人伦爽爽爽| 免费观看在线黄色网| 永久免费看mv网站入口亚洲| 欧美xxx.com| 亚洲国产成人91精品| 免费a级片在线观看| 日韩免费电影一区| 精品黑人一区二区三区在线观看| 欧美日韩精品欧美日韩精品 | 手机在线观看av| 国内精品久久久久伊人av| bt在线麻豆视频| 操91在线视频| 国产盗摄在线观看| 不卡毛片在线看| 影音先锋男人在线资源| 欧美日韩成人在线观看| 青青青国内视频在线观看软件| 久久精品99国产精品酒店日本| 91亚洲精选| 中文字幕在线观看亚洲| 在线观看免费黄色| 最近2019中文字幕mv免费看 | 日本一区二区不卡| 免费成人动漫| 国产成人一区二区三区电影| 97久久香蕉国产线看观看| 国产成人久久久精品一区| 影视一区二区三区| 国产精品久久久久久久久久三级| 欧美与亚洲与日本直播| 国产精品永久免费在线| www久久久| 国产成人精品一区二区三区福利| 成人看片黄a免费看视频| 国产精品青青草| 亚洲欧洲av| 亚洲精品久久区二区三区蜜桃臀 | 大型av综合网站| 国内精品视频在线播放| 色综合综合网| 伊人av成人| 国产精品porn| 国产深夜男女无套内射| 久色成人在线| 午夜精品久久久久久久99热影院| 国产美女av一区二区三区| 中文字幕无人区二| 久久综合久久鬼色| 日本在线观看网址| 亚洲资源在线观看| 69xxxx国产| 91精品国产综合久久久久久久| 性欧美videos另类hd| 精品香蕉在线观看视频一| av男人的天堂在线| 欧美激情在线一区| 欧美影视资讯| 2022国产精品| 少妇高潮一区二区三区| 亚洲一区二区三区免费看| 午夜性色一区二区三区免费视频| 日本网站免费在线观看| 麻豆久久久久久| 超碰caoprom| 国产精品麻豆一区二区| 精品处破女学生| 欧美色图12p| 色综合视频在线| 日韩视频在线观看免费| 538在线精品| 成人性生交大片免费观看嘿嘿视频 | 欧美日韩一区二区三区在线看| 精品免费久久久| 国产午夜精品一区二区三区| a视频在线免费看| 国产精品黄色影片导航在线观看| 日韩成人在线观看视频| 日韩精品不卡| av不卡在线看| 色黄视频免费看| 中文一区在线播放 | 欧美精品久久久久久久多人混战| 内射无码专区久久亚洲| 日韩视频免费大全中文字幕| 欧美亚洲韩国| 精品免费视频123区| 欧美黄色大片网站| 欧美男女交配视频| 91捆绑美女网站| 日本熟妇色xxxxx日本免费看| 欧美日韩黄色影视| 国产最新视频在线| 97视频在线播放| silk一区二区三区精品视频 | 在线看片一区| 欧美人与性动交α欧美精品| 国产精品免费久久| 亚洲va在线观看| 日韩成人在线视频网站| 美女91在线| 国产精品免费一区二区| 国产精品v亚洲精品v日韩精品 | 91av在线精品| 激情亚洲另类图片区小说区| 日韩一级特黄毛片| 狠狠色狠狠色综合日日91app| www.99热| 在线视频综合导航| 激情视频在线观看免费| 青草青草久热精品视频在线观看| 久久男人av| 欧美 国产 综合| 久久婷婷国产综合精品青草| 天天操中文字幕| 精品一区二区亚洲| 亚洲福利影院| 欧美一级二级三级| 久久一区欧美| 女人黄色一级片| 欧美日韩在线免费视频| 视频免费一区| 91精品视频在线| 欧美 日韩 国产一区二区在线视频| 五月天婷婷亚洲| 一区二区在线免费观看| 欧美一级特黄aaaaaa| 97激碰免费视频| 亚洲区小说区图片区qvod| 50路60路老熟妇啪啪| 国产片一区二区| 国产精品欧美亚洲| 久久亚洲精品中文字幕冲田杏梨| 亚洲一区二区三区中文字幕在线观看 | 亚洲综合av影视| 激情亚洲网站| 亚洲国产欧美视频| 欧美最新大片在线看| 一级毛片视频在线| 亚洲最大成人免费视频| 狠狠入ady亚洲精品| 99久久人妻无码中文字幕系列| 欧美性开放视频| 日本中文字幕在线观看| 亚洲在线观看视频| 国产精品久久国产愉拍| 国产精品成人无码免费| 69堂国产成人免费视频| 超免费在线视频| 日韩国产欧美精品| 免费亚洲电影在线| 校园春色 亚洲| 亚洲精品网站在线播放gif| av成人在线看| 中文精品无码中文字幕无码专区| 91小视频在线| 91影院在线播放| 91po在线观看91精品国产性色| 狠狠做六月爱婷婷综合aⅴ| 小早川怜子一区二区三区| 亚洲va欧美va天堂v国产综合| 国产二区视频在线观看| 亚洲伊人一本大道中文字幕| 久久精品系列| 欧美日韩精品在线观看视频 | 日韩精品乱码av一区二区| 麻豆网址在线观看| 日韩黄色在线免费观看| 99视频这里有精品| 欧美日韩亚洲一| 亚洲欧美日韩小说| 免费人成黄页在线观看忧物| 91在线视频精品| 久久久久久9| 国产在线视频99| 日韩视频一区在线| 国产中文精品久高清在线不| 国产精品久久久久野外|