精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

91免费看蜜桃| 精品国产乱码久久久久久免费| 欧美在线一区二区三区四区| 中文字幕永久在线| 热久久天天拍国产| 欧美女孩性生活视频| 人妻av无码专区| 你懂的视频在线免费| 美女视频一区在线观看| 欧美黑人xxxx| 国产毛片欧美毛片久久久| 亚洲色图综合| 性久久久久久久| 亚洲欧洲久久| 亚洲 美腿 欧美 偷拍| 亚洲国产精彩视频| 欧美xxxxx视频| 日韩成人在线视频观看| 日韩在线一区视频| 一区二区三区短视频| 一区二区三区久久| 日韩免费一区二区三区| 亚洲欧美黄色片| 久久99精品久久久久久久久久久久 | 日韩少妇与小伙激情| bl动漫在线观看| 高清一区二区| 欧美午夜片在线看| 国产最新免费视频| 丝袜在线观看| 中文字幕一区二区三区在线观看| 欧美精品欧美精品系列c| 国产黄色一级大片| 精品一区二区影视| 国产精自产拍久久久久久| 可以免费在线观看的av| 欧美特黄视频| 久久精品亚洲热| 亚洲天堂av中文字幕| 五月激激激综合网色播| 亚洲第一页在线| 国产香蕉精品视频| 日韩免费一级| 欧美一区二区成人6969| 亚洲精品国产一区二区三区| 国产中年熟女高潮大集合| 91caoporm在线视频| 91视频免费观看| 国产69精品久久久久9999apgf| 一区二区三区亚洲视频| 日本成人中文字幕在线视频| 日本精品性网站在线观看| 二区视频在线观看| 久久国产精品亚洲77777| 欧美精品www| **亚洲第一综合导航网站| 久草网视频在线观看| 综合一区av| 九九热精品在线| 国产亚洲色婷婷久久99精品| 精品999日本| 久久久久久久色| 日韩欧美亚洲视频| 国产亚洲毛片| 日本久久久久久久| 波多野结衣爱爱| 男女视频一区二区| 国产视频观看一区| 国产高清第一页| 成人精品在线视频观看| 国产伦精品一区二区三区高清| 日本人妻丰满熟妇久久久久久| 99天天综合性| 欧美自拍资源在线| 日本不卡在线| 亚洲一区二区四区蜜桃| 国产精品12345| 国产寡妇亲子伦一区二区三区四区| 好看的日韩av电影| 欧美一级淫片videoshd| a片在线免费观看| 黄网站免费久久| 成人免费观看网站| 日本中文字幕电影在线观看 | 国产一区二区三区色淫影院| 色在线免费视频| 精品欧美色视频网站在线观看| 日韩欧美一区二区三区免费看| 日韩亚洲一区二区| 国产盗摄x88av| 一区二区三区福利| 国产精品久久婷婷六月丁香| 国产精品久久久久久免费播放| 亚洲欧洲视频在线观看| 九九久久精品视频| 高清av免费一区中文字幕| 亚洲色图21p| 国产精品美女久久久久高潮| 99国产精品白浆在线观看免费| 都市激情亚洲综合| 欧美精品久久久久久久多人混战 | 在线视频福利一区| a'aaa级片在线观看| 在线视频综合导航| 91成人在线观看喷潮蘑菇| 国产欧美日韩精品一区二区三区| 欧美老女人xx| 日本三级一区二区三区| 成人午夜大片免费观看| 亚洲精品一卡二卡三卡四卡| 国产啊啊啊视频在线观看| 亚洲国产精品综合久久久| 日韩精品视频在线观看免费| 精品一区二区在线观看视频| 国产精品久久国产愉拍| 91视频8mav| 岛国视频免费在线观看| 亚洲国产综合视频在线观看| 超碰在线播放91| 欧美精品密入口播放| 欧美成人第一页| 天天天天天天天干| 9人人澡人人爽人人精品| 中文字幕久精品免| 国产精品亚洲成在人线| 精品视频久久久久久久| 日本一区二区网站| 国产福利一区在线| 中文字幕一区二区三区最新| japanese23hdxxxx日韩| 日韩高清a**址| 久久精品国产亚洲av高清色欲| 麻豆精品在线观看| 日韩精品成人一区二区在线观看| 麻豆免费在线| 亚洲国产精彩中文乱码av| 九九免费精品视频| 国产一区999| 在线观看成人av| 国产激情欧美| 色777狠狠狠综合伊人| 久久久av一区| 亚洲熟妇av乱码在线观看| 国产日韩欧美在线一区| 中文字幕无码不卡免费视频| 亚洲激情77| 日韩av观看网址| 精品美女视频在线观看免费软件| 精品色蜜蜜精品视频在线观看| 亚洲熟女一区二区| 在线观看一区视频| 国产一区二区高清视频| 青青青免费在线视频| 日韩精品免费在线视频| 成人av网站在线播放| 国产婷婷一区二区| 日本a√在线观看| 日韩精品免费| 91精品视频专区| 2021国产在线| 精品动漫一区二区三区在线观看| 国产在线拍揄自揄拍| 粉嫩高潮美女一区二区三区 | 九九九九九精品| 久久男人天堂| 亚洲一级片在线看| 一级黄色片在线| 亚洲精品自拍动漫在线| 日本50路肥熟bbw| 亚洲综合二区| 亚洲精品视频一二三| 精品一区二区三区四区五区| 欧美精品videos性欧美| 飘雪影院手机免费高清版在线观看 | 成人51免费| 欧美激情网站在线观看| 日韩毛片在线一区二区毛片| 欧美在线免费播放| 少妇被躁爽到高潮无码文| 国产91在线观看丝袜| 俄罗斯av网站| 欧美色图在线播放| 亚洲自拍在线观看| 自拍网站在线观看| xxav国产精品美女主播| 乱精品一区字幕二区| 少妇高潮一区二区三区99| 精品处破学生在线二十三| 日韩一区二区视频在线| 国产精品久久久久久久久久久免费看 | 国产成人一区在线| 北条麻妃在线视频观看| 日韩欧美一区免费| 国产精品一区在线观看| 懂色aⅴ精品一区二区三区| 色综合老司机第九色激情| 你懂的在线播放| 日韩欧美你懂的| 国产日韩久久久| 亚洲大型综合色站| 一级片黄色录像| 99在线精品观看| 亚洲免费成人在线视频| 国产精品入口| av动漫在线播放| 青青草综合网| 国产在线欧美日韩| 豆花视频一区| 国产精品久久久久久久久久新婚| 亚洲视频免费播放| 久久综合狠狠综合久久激情 | k8久久久一区二区三区| 成人信息集中地欧美| 久草在线资源站资源站| 红桃av永久久久| 你懂得视频在线观看| 成人aa视频在线观看| 亚洲三级在线观看视频| 日本福利在线| 玉米视频成人免费看| 都市激情久久久久久久久久久| 国产jizz18女人高潮| 国产91在线看| 激情视频一区二区| 日本国产在线| 久久99精品久久久久久久久久久久 | 色婷婷综合久久久中文字幕| 懂色av懂色av粉嫩av| 国产精品理论片在线观看| 丰满圆润老女人hd| 91一区一区三区| 天堂www中文在线资源| 国产成人亚洲综合a∨婷婷图片| 婷婷六月天在线| 男女精品网站| 男人天堂1024| 男人的天堂亚洲| 欧美性大战久久久久xxx| 亚洲视频一区| av一区二区三区免费观看| 中文字幕日韩一区二区不卡| 椎名由奈jux491在线播放| 成人免费a**址| 丝袜足脚交91精品| 日韩电影免费网址| 亚洲乱码国产乱码精品天美传媒| 欧美三级三级| 亚洲高清视频一区二区| 第一社区sis001原创亚洲| 亚洲欧洲免费无码| 亚洲成人精品| 手机看片日韩国产| 欧美a级片一区| 欧美一级爱爱视频| 国产一区二区三区四区三区四| 亚洲激情免费视频| 欧美午夜电影在线观看 | 成人在线观看小视频| 亚洲欧洲性图库| 成年人午夜剧场| 亚洲一区二区在线播放相泽| 日韩精品视频免费看| 日韩欧美中文字幕在线播放| 99久久精品国产亚洲| 欧洲精品在线观看| 99这里有精品视频| 亚洲国产精品免费| 黄色片在线免费看| 精品国产欧美一区二区三区成人| 成人毛片av在线| 午夜美女久久久久爽久久| 亚洲美女久久精品| 国产欧美韩国高清| 99精品中文字幕在线不卡| 久久久久久久久久久一区| 精品国产aⅴ| 国产四区在线观看| 日韩一级免费| 欧美三级理论片| 高清国产一区二区| 在线观看日本中文字幕| 亚洲视频小说图片| 亚洲日本韩国在线| 7777精品伊人久久久大香线蕉的 | 91精品国产高清一区二区三密臀| 欧美亚洲动漫制服丝袜| 亚洲第一视频在线| 亚洲欧美制服综合另类| 手机免费看av片| 久久在线免费| 少妇高潮毛片色欲ava片| 日韩成人一级大片| 少妇伦子伦精品无吗| 久久精品亚洲乱码伦伦中文| 国产67194| 欧洲国产伦久久久久久久| 亚洲成人一级片| 色妞色视频一区二区三区四区| 波多野结衣在线播放| 国产精品一区二区三区免费视频| 岛国av一区| 在线免费一区| 日韩在线卡一卡二| 亚洲乱妇老熟女爽到高潮的片 | 麻豆天美蜜桃91| 一本色道久久综合精品竹菊| 精品国产18久久久久久| 一区二区三区精品99久久| 成入视频在线观看| 成人啪啪免费看| av中文字幕一区二区| 日韩精品 欧美| 国产在线精品一区在线观看麻豆| 高潮毛片无遮挡| 亚洲成人在线免费| 国产精品女同一区二区| 永久555www成人免费| 亚洲涩涩在线| 国产伦精品一区二区三区视频黑人| 国产精品99久久| 久久午夜夜伦鲁鲁一区二区| 99精品在线免费| 国产一级视频在线| 91精品国产欧美一区二区成人| 北岛玲一区二区三区| 奇门遁甲1982国语版免费观看高清| 国产成人澳门| a级免费在线观看| 国产成人免费在线| 日韩欧美国产成人精品免费| 欧美日韩国产片| 69视频在线| 国产精品久久一| 成人在线免费小视频| 日韩手机在线观看视频| 久久亚洲精精品中文字幕早川悠里 | 欧美日韩国产综合视频在线观看中文| 不卡视频免费在线观看| 欧美成人精品xxx| 精品国产乱码久久久久久樱花| 国产免费色视频| 国内外成人在线| 日韩一区二区不卡视频| 欧美一区二区三区视频| 激情影院在线观看| 亚洲xxxx做受欧美| 国产在线不卡| a天堂视频在线观看| 亚洲a一区二区| 香蕉久久国产av一区二区| 日本久久亚洲电影| 欧洲成人av| 亚洲视频在线一区观看| 精品欧美一区二区三区免费观看 | 91福利在线导航| 国产免费av高清在线| 日韩av手机在线看| 精品国产一区二区三区噜噜噜 | 大白屁股一区二区视频| 精品一区二区三区四| 欧美精品一区二区久久婷婷| free性m.freesex欧美| 蜜桃传媒视频麻豆第一区免费观看 | 亚洲特黄一级片| www.com欧美| 欧美性资源免费| 精品理论电影在线| 成人亚洲免费视频| 一区二区在线观看视频在线观看| 国产91绿帽单男绿奴| 欧洲中文字幕国产精品| 97精品一区| 亚洲性图第一页| 欧美特级www| 欧美私人网站| 国产不卡一区二区在线观看| 午夜一区在线| 四季av中文字幕| 日韩视频永久免费| 色是在线视频| 这里只有精品66| 成人av资源站| 中文字幕 国产精品| 美女福利精品视频| 色先锋久久影院av| 在线不卡一区二区三区| 香蕉av福利精品导航| 国产黄色在线播放| 亚洲一区精品电影| 欧美亚洲视频| 国产一二三区精品| 亚洲精品中文字幕女同| 日本久久久久| 国产午夜伦鲁鲁| 亚洲精品免费在线观看| 五月婷在线视频| 亚洲影视中文字幕| 日韩成人一区二区三区在线观看| 久久av高潮av无码av喷吹| 曰本色欧美视频在线|