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

精通Hibernate:對象關系映射基礎

開發 后端
本文通過三個方面介紹了對象關系映射基礎,分別為持久化類的屬性和訪問方法、創建命名策略以及實例。詳細請看下文。

 1、持久化類的屬性和訪問方法
(1)持久化類簡介

 

在Hibernate中持久化類的訪問方法有兩個調用者,一個是Java應用程序,一個是Hibernate。值得注意的是,Java應用程序不能訪問持久化類的private類型的getXXX()、setXXX(),而Hibernate沒有這樣的限制。

(2)基本類型屬性和包裝類型屬性

Java有8種基本類型:byte,short,char,int,long,float,double,boolean;與之對應的Java提供了8種包裝類型:Byte,Short,Character,Integer,Long,Float,Double,Boolean。基本類型與包裝類型之間可以如下簡單轉換:

  1. double prD=1;  
  2. //把double基本類型轉換成Double包裝類型  
  3. Double wrD=new Double(prD);  
  4. //把Double包裝類型轉換成double基本類型  
  5. prD=wrD.doubleValue(); 

Hibernate兩種類型都是支持的。

(3)在持久化類的訪問方法中加入程序邏輯

(a)在Customer類的getName()和setName()方法中加入程序邏輯

假如在Customer類中有firstname屬性和lastname屬性,但是沒有name屬性,而數據庫CUSTOMERS表中只有NAME字段。當Hibernate從數據庫中取得了CUSTOMERS表的NAME字段值后,會調用setName()方法,此時應該讓Hibernate通過setName()方法來自動設置firstname屬性和lastname。故要在setName()方法中加入額外的程序邏輯。

  1.  public String getName(){  
  2.    return firstname+ " "+lastname;  
  3. }  
  4.  
  5. public void setName(String name){  
  6.   StringTokenizer t=new StringTokenizer(name);  
  7.   firstname=t.nextToken();  
  8.   lastname=t.nextToken();  

在映射文件中此時直接映射name即可,無需映射firstname等。

  1. <property name="name" column="NAME"

盡管在Customer類中沒有定義name屬性,由于Hibernate并不會直接訪問name屬性,而是通過getName()和setName()方法。只要在Customer.hbm.xml文件中映射了name屬性,HQL語句就能訪問:

  1. Query query=seesion.createQuery("from Customer as c where c.name='Tom'"); 

但是如果把Customer.hbm.xml文件中name屬性配置為:

  1. <property name="name" column="NAME" access="field"

程序會直接去訪問Customer實例中的name屬性,就會出現異常。

(b)在Customer類的setOrders()方法中加入程序邏輯

假定Customer類中有一個avgPrice屬性,表示訂單的平均價格,取值為它所關聯Order對象的price的平均值。在CUSTOMERS表中沒有AVG_PRICE字段。可以如下操作:

  1. public Double getAvgPrice(){  
  2.      return this.avgPrice;  
  3.  }  
  4.  private void setAvgPrice( Double avgPrice ){  
  5.      this.avgPrice = avgPrice;  
  6.  }  
  7.  public Double getTotalPrice(){  
  8.      return this.totalPrice;  
  9.  }  
  10.  private void setTotalPrice( Double totalPrice ){  
  11.      this.totalPrice = totalPrice;  
  12.  }  
  13.  
  14.  public void setOrders( Set orders ){  
  15.    this.orders = orders;  
  16.    calculatePrice();  
  17.  }  
  18.  public Set getOrders(){  
  19.    return orders;  
  20.  }//定義為一個Set  
  21.  private void calculatePrice(){  
  22.      double avgPrice = 0.0;  
  23.      double totalPrice = 0.0;  
  24.      int count=0;  
  25. /迭代計算orders里面所有price  
  26.      if ( getOrders() != null ){  
  27.        Iterator iter = getOrders().iterator();  
  28.        while( iter.hasNext() ){  
  29.          double orderPrice = ((Order)iter.next()).getPrice();  
  30.          totalPrice += orderPrice;  
  31.          count++;  
  32.        }  
  33.        // Set the price for the order from the calcualted value  
  34.        avgPrice=totalPrice/count;  
  35.        setAvgPrice( new Double(avgPrice) );  
  36.      }  
  37.  } 

在Customer.hbm.xml文件不用映射avgPrice,因為Hibernate不會直接訪問avgPrice屬性,也不會調用getavgPrice()和setavgPrice().

 

(c)在Customer類的setSex()方法中加入數據驗證邏輯

在持久化類的訪問方法中,還可以加入數據驗證邏輯。

  1. public char getSex(){  
  2.    return this.sex;  
  3.  }  
  4.  public void setSex(char sex){  
  5.      if(sex!='F' && sex!='M'){  
  6.        throw new IllegalArgumentException("Invalid Sex");  
  7.      }  
  8.      this.sex =sex ;  
  9.  } 

(4)設置派生屬性
持久化類并非所有屬性都直接和表的字段匹配,持久化類的有些屬性是可以在運行的時候得出的,這些稱作派生屬性。正如之前的avgPrice屬性,該方案包括兩個步驟:

  • 在映射文件中不映射avgPrice屬性
  • 在Customer類的setOrders()方法中加入程序邏輯,自動為avgPrice屬性賦值。

除了這種方法來設置派生屬性,還可以如下解決:

利用<property>元素的formula屬性。formula屬性用來設置一個SQL表達式,Hibernate將根據它來計算派生屬性的值。以Customer類的totalPrice屬性為例:

  1. <property name="totalPrice" formula="(select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=ID)"/> 

在Hibernate從數據庫中查詢Customer對象時,若查詢totalPrice,即:

  1. select totalPrice from CUSTOMERS; 

使用formula屬性后,上面的查詢語句就會自動地被替代成:

  1. select (select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=1) from CUSTOMERS; 

如果子句的查詢結果為空,那么上述的語句就會出現異常。解決方法是:將totalPrice的屬性定義為Double包裝類型。

(5)控制insert和update語句

Hibernate在初始化階段,就會根據映射文件的映射信息,為所有的持久化類定義以下的SQL語句。

以上SQL語句中的“?”代表JDBC PreparedStatement中的參數。這些SQL語句都存放在SessionFactory的內置緩存中,當執行Session的save()、update()、delete() 、load()和get()方法的時候,將從緩存中找到對應預定義的SQL語句,再把具體的參數值綁定到該SQL語句中。

#p#

2、創建命名策略

還有一直一種方法是實現Hibernate的org.hibernate.cfg.NamingStrategy接口,對于這個接口Hibernate提供了兩種參考實現類:org.hibernate.cfg.defaultNamingStrategy和org.hibernate.cfg.ImprovedNamingStrategy類。

MyNamingStrategy.java

  1. package mypack;  
  2. import org.hibernate.cfg.ImprovedNamingStrategy;  
  3. import org.hibernate.util.StringHelper;  
  4. public class MyNamingStrategy extends ImprovedNamingStrategy {  
  5.    public String classToTableName(String className) {  
  6.         return  StringHelper.unqualify(className).toUpperCase()+'S';//classname轉化成大寫字母+S就是對應的表名  
  7.    }  
  8.    public String propertyToColumnName(String propertyName) {  
  9.        return propertyName.toUpperCase();  
  10.    }  
  11.    public String tableName(String tableName) {  
  12.        return tableName;  
  13.    }  
  14.    public String columnName(String columnName) {  
  15.        return columnName;  
  16.    }  
  17.    public String propertyToTableName(String className, String propertyName) {  
  18.        return classToTableName(className) + '_' +  
  19.             propertyToColumnName(propertyName);  
  20.    }  

 

 

 

使用命名策略后可以更好的將數據庫中表名、列名對象化成類中的對象。

#p#

3、實例

本節的代碼下載地址:http://down.51cto.com/data/326754

主要的BusinessService.java

  1. package mypack;  
  2.  
  3. import org.hibernate.*;  
  4. import org.hibernate.cfg.Configuration;  
  5. import java.util.*;  
  6.  
  7. public class BusinessService{  
  8.   public static SessionFactory sessionFactory;  
  9.   static{  
  10.      try{  
  11.        Configuration config = new Configuration()  
  12.              .setNamingStrategy( new MyNamingStrategy() )  
  13.              .configure();       //加載hibernate.cfg.xml文件中配置的信息  
  14.       sessionFactory = config.buildSessionFactory();  
  15.     }catch(RuntimeException e){e.printStackTrace();throw e;}  
  16.   }  
  17.  
  18.   public Customer loadCustomer(long customer_id){  
  19.     Session session = sessionFactory.openSession();  
  20.     Transaction tx = null;  
  21.     try {  
  22.       tx = session.beginTransaction();  
  23.       Customer customer=(Customer)session.get(Customer.class,new Long(customer_id));  
  24.       tx.commit();  
  25.       return customer;  
  26.     }catch (RuntimeException e) {  
  27.       if (tx != null) {  
  28.          tx.rollback();  
  29.       }  
  30.       throw e;  
  31.     } finally {  
  32.        session.close();  
  33.     }  
  34.   }  
  35.  
  36.   public void saveCustomer(Customer customer){  
  37.     Session session = sessionFactory.openSession();  
  38.     Transaction tx = null;  
  39.     try {  
  40.       tx = session.beginTransaction();  
  41.       session.save(customer);  
  42.       tx.commit();  
  43.  
  44.     }catch (RuntimeException e) {  
  45.       if (tx != null) {  
  46.          tx.rollback();  
  47.       }  
  48.       throw e;  
  49.     } finally {  
  50.        session.close();  
  51.     }  
  52.   }  
  53.  
  54.     public void loadAndUpdateCustomer(long customerId) {  
  55.       Session session = sessionFactory.openSession();  
  56.       Transaction tx = null;  
  57.       try {  
  58.         tx = session.beginTransaction();  
  59.         Customer customer=(Customer)session.get(Customer.class,new Long(customerId));  
  60.         customer.setDescription("A lovely customer!");  
  61.         tx.commit();  
  62.  
  63.     }catch (RuntimeException e) {  
  64.       if (tx != null) {  
  65.         tx.rollback();  
  66.       }  
  67.       throw e;  
  68.     } finally {  
  69.       session.close();  
  70.     }  
  71.   }  
  72.  
  73.   public void updateCustomer(Customer customer){  
  74.     Session session = sessionFactory.openSession();  
  75.     Transaction tx = null;  
  76.     try {  
  77.       tx = session.beginTransaction();  
  78.       session.update(customer);  
  79.       tx.commit();  
  80.  
  81.     }catch (RuntimeException e) {  
  82.       if (tx != null) {  
  83.          tx.rollback();  
  84.       }  
  85.       throw e;  
  86.     } finally {  
  87.        session.close();  
  88.     }  
  89.   }  
  90.  
  91.   public void saveDictionary(Dictionary dictionary) {  
  92.     Session session = sessionFactory.openSession();  
  93.     Transaction tx = null;  
  94.     try {  
  95.       tx = session.beginTransaction();  
  96.       session.save(dictionary);  
  97.       tx.commit();  
  98.  
  99.     }catch (RuntimeException e) {  
  100.       if (tx != null) {  
  101.         tx.rollback();  
  102.       }  
  103.       throw e;  
  104.     } finally {  
  105.       session.close();  
  106.     }  
  107.   }  
  108.  
  109.  public void updateDictionary(Dictionary dictionary){  
  110.     Session session = sessionFactory.openSession();  
  111.     Transaction tx = null;  
  112.     try {  
  113.       tx = session.beginTransaction();  
  114.       session.update(dictionary);  
  115.       tx.commit();  
  116.  
  117.     }catch (RuntimeException e) {  
  118.       if (tx != null) {  
  119.         tx.rollback();  
  120.       }  
  121.       throw e;  
  122.     } finally {  
  123.       session.close();  
  124.     }  
  125.   }  
  126.   public Dictionary loadDictionary(long dictionary_id) {  
  127.     Session session = sessionFactory.openSession();  
  128.     Transaction tx = null;  
  129.     try {  
  130.       tx = session.beginTransaction();  
  131.       Dictionary dictionary=(Dictionary)session.get(Dictionary.class,new Long(dictionary_id));  
  132.       tx.commit();  
  133.       return dictionary;  
  134.     }catch (RuntimeException e) {  
  135.       if (tx != null) {  
  136.         tx.rollback();  
  137.       }  
  138.       throw e;  
  139.     } finally {  
  140.       session.close();  
  141.     }  
  142.   }  
  143.  
  144.   public void printCustomer(Customer customer){  
  145.       System.out.println("name:"+customer.getName());  
  146.       System.out.println("sex:"+customer.getSex());  
  147.       System.out.println("description:"+customer.getDescription());  
  148.       System.out.println("avgPrice:"+customer.getAvgPrice());  
  149.       System.out.println("totalPrice:"+customer.getTotalPrice());  
  150.   }  
  151.  
  152.   public void printDictionary(Dictionary dictionary){  
  153.       System.out.println("type:"+dictionary.getType());  
  154.       System.out.println("key:"+dictionary.getKey());  
  155.       System.out.println("value:"+dictionary.getValue());  
  156.   }  
  157.    public void test(){  
  158.       Customer customer=new Customer("Laosan","Zhang",'M',new HashSet(),"A good citizen!");  
  159.       Order order1=new Order("Order001",new Double(100),customer);  
  160.       Order order2=new Order("Order002",new Double(200),customer);  
  161.       customer.getOrders().add(order1);  
  162.       customer.getOrders().add(order2);  
  163.  
  164.       saveCustomer(customer);  
  165.  
  166.       customer=new Customer("Laowu","Wang",'M',new HashSet(),null);  
  167.       saveCustomer(customer);  
  168.  
  169.       customer=loadCustomer(1);  
  170.       printCustomer(customer);  
  171.  
  172.       customer.setDescription("An honest customer!");  
  173.       updateCustomer(customer);  
  174.  
  175.       loadAndUpdateCustomer(1);  
  176.  
  177.       Dictionary dictionary=new Dictionary("SEX","M","MALE");  
  178.       saveDictionary(dictionary);  
  179.  
  180.       dictionary=loadDictionary(1);  
  181.       dictionary.setValue("MAN");  
  182.       updateDictionary(dictionary);  
  183.  
  184.       dictionary=loadDictionary(1);  
  185.       printDictionary(dictionary);  
  186.  
  187.    }  
  188.  
  189.   public static void main(String args[]) {  
  190.     new BusinessService().test();  
  191.     sessionFactory.close();  
  192.   }  

原文鏈接:http://blog.csdn.net/yu422560654/article/details/7047661

【編輯推薦】

  1. 精通Hibernate:第一個Hibernate應用
  2. Hibernate緩存何時使用和如何使用
  3. Hibernate連接Mysql中文亂碼處理
  4. Hibernate配置要點詳談
  5. Hibernate配置文件和映射元素解釋
責任編輯:林師授 來源: yu422560654的博客
相關推薦

2009-09-23 13:26:10

Hibernate對象

2012-02-08 14:01:18

HibernateJava

2012-02-08 13:34:08

HibernateJava

2012-02-08 14:24:35

HibernateJava

2012-05-30 15:03:43

ibmdw

2009-09-25 12:59:52

Hibernate映射

2009-06-02 14:46:26

Hibernate關系映射教程

2009-06-18 14:22:06

Hibernate多對Hibernate

2012-05-10 09:44:39

MongoDBJava

2012-02-02 16:13:29

HibernateJava

2009-09-25 10:25:54

Hibernate緩存

2009-09-25 14:12:16

Hibernate繼承

2021-09-03 15:27:17

鴻蒙HarmonyOS應用

2012-02-03 10:07:04

HibernateJava

2009-09-25 10:00:47

Hibernate映射

2012-02-03 11:17:33

HibernateJava

2009-09-22 15:10:22

Hibernate映射

2009-09-23 17:34:18

Hibernate映射

2009-09-21 17:33:50

Hibernate基礎

2012-02-08 11:15:38

HibernateJava
點贊
收藏

51CTO技術棧公眾號

97免费在线观看视频| 奇米影音第四色| 天天干视频在线观看| 免费永久网站黄欧美| 夜夜嗨av色综合久久久综合网| 日本在线一二三区| 国产黄色大片在线观看| 国产丝袜美腿一区二区三区| 91久久国产婷婷一区二区 | 中文字幕巨乱亚洲| 98国产高清一区| 久操视频在线免费观看| 欧美日本免费| 最近2019中文字幕一页二页| 亚洲美女精品视频| 国产精品久久久久久吹潮| 亚洲一区二区三区在线看| 午夜精品一区二区三区四区| 亚洲精品成av人片天堂无码| 秋霞国产午夜精品免费视频| 午夜精品久久久久久99热| 人人干在线观看| 亚洲ab电影| 日韩欧美亚洲国产另类| 2025韩国理伦片在线观看| 欧美gv在线| 一区二区三区免费网站| 中文字幕欧美日韩一区二区三区| 婷婷五月综合激情| 丁香一区二区三区| 成人久久一区二区| 懂色av蜜臀av粉嫩av喷吹| 一区二区三区福利| 久久久噜噜噜久久中文字免| av成人免费网站| 91亚洲国产成人久久精品| 日韩av在线天堂网| 麻豆精品国产传媒av| 亚洲视频国产精品| 欧美精品一级二级| 午夜精品中文字幕| 日本一道高清亚洲日美韩| 日韩欧美国产成人| 少妇高清精品毛片在线视频 | 亚洲av成人精品毛片| 国产+成+人+亚洲欧洲自线| 91亚洲va在线va天堂va国| 一本到在线视频| 久久国产精品72免费观看| 国产精品久久久久久久久久| 丰满人妻老熟妇伦人精品| 国产视频亚洲| 欧美在线一区二区三区四| 亚洲欧美在线视频免费| 欧美精品激情| 欧美日本中文字幕| 欧美日韩国产精品一区二区三区| 欧美91视频| 欧美国产日本在线| 国产稀缺真实呦乱在线| 亚洲高清av| 欧美一区二三区| 99久久久久久久久| 日本欧美一区二区| 国产欧美日韩高清| 99久久久无码国产精品免费| 国产美女av一区二区三区| 51国偷自产一区二区三区 | 亚洲欧美制服中文字幕| 国产中年熟女高潮大集合| 欧洲杯半决赛直播| 日韩在线观看免费| 加勒比av在线播放| 国产亚洲精品v| 国产成人在线一区二区| 中文字幕精品一区二区精| 国产专区综合网| 国产精品免费一区二区三区在线观看| 无码精品人妻一区二区| 国产亚洲欧美日韩俺去了| 亚洲va韩国va欧美va精四季| 麻豆视频在线观看免费网站| 艳妇臀荡乳欲伦亚洲一区| 欧美三级一级片| 国产一区一一区高清不卡| 欧美精品三级日韩久久| 国产十八熟妇av成人一区| 亚洲盗摄视频| 久久视频中文字幕| 一级片中文字幕| 免费在线视频一区| 高清视频一区二区三区| 国产98在线| 亚洲精品五月天| 少妇高清精品毛片在线视频| 精品国产乱码久久久久久樱花| 亚洲国产高清福利视频| av在线播放中文字幕| 国产精品久久| 国产精品亚洲美女av网站| 丰满人妻一区二区三区四区53| 久久久美女毛片| 色哟哟免费网站| 精品91久久| 91精品国产品国语在线不卡| 捆绑裸体绳奴bdsm亚洲| 亚洲电影影音先锋| 日韩av电影在线播放| 成人午夜福利视频| 国产精品国产馆在线真实露脸| av日韩一区二区三区| 亚洲综合伊人| 亚洲天堂开心观看| 日韩精品在线免费看| 国内精品视频一区二区三区八戒| 久久综合九色综合久99| 欧美hdxxxxx| 欧美日本在线视频| 亚洲精品午夜视频| 亚洲人成免费| 99在线高清视频在线播放| yw在线观看| 黑人巨大精品欧美一区免费视频 | 一级特黄aaa大片| 972aa.com艺术欧美| 成年丰满熟妇午夜免费视频| 国产激情欧美| 亚洲欧洲午夜一线一品| 国产成人无码精品久久久久| 国产福利一区二区| 在线视频不卡国产| 99欧美精品| 亚洲天堂av网| 亚洲国产精品无码久久久| 2欧美一区二区三区在线观看视频| 粉嫩av一区二区三区天美传媒| 国产精品伊人| 国产亚洲视频中文字幕视频| 五月天婷婷激情| 99精品在线免费| 国产h视频在线播放| 97精品久久| 精品中文字幕在线2019| 国产婷婷一区二区三区久久| 国产精品美女久久久久久2018| 国产精品wwwww| 亚洲欧美tv| 欧日韩在线观看| 日韩资源在线| 色先锋aa成人| 妺妺窝人体色WWW精品| 日韩主播视频在线| 热re99久久精品国99热蜜月| 美女网站视频一区| 中文日韩在线观看| 中文字幕一二三四| 成人欧美一区二区三区| 人人爽人人爽av| 欧美一区91| http;//www.99re视频| bl在线肉h视频大尺度| 精品成人一区二区三区四区| 69精品久久久| 91丝袜美腿高跟国产极品老师 | 日本中文在线视频| 国产一区二区免费看| 久久免费一级片| 98视频精品全部国产| 性日韩欧美在线视频| 全色精品综合影院| 欧美日韩国产综合久久| 日本在线一级片| 成人a免费在线看| 岳毛多又紧做起爽| 日韩精品水蜜桃| 超碰97在线资源| 欧美日韩在线观看首页| 少妇av一区二区三区| 国产农村老头老太视频| 亚洲国产另类av| 日本少妇xxxxx| 国产在线观看免费一区| 蜜桃传媒一区二区三区| 亚州国产精品| 成人黄色在线播放| 国产高清视频色在线www| 国产亚洲精品久久久久久777| 97人妻一区二区精品免费视频| 亚洲人成网站在线| 国产精品九九九九九| 韩国一区二区在线观看| 男人用嘴添女人下身免费视频| blacked蜜桃精品一区| 亚洲aaaaaa| 网友自拍亚洲| 欧美激情一级欧美精品| 国产免费视频在线| 精品三级在线看| 最近国语视频在线观看免费播放| 亚洲一区在线电影| 卡一卡二卡三在线观看| 99综合电影在线视频| 九九九九九九九九| 视频精品一区二区| 精品无码国产一区二区三区av| 日本久久综合| 久久爱av电影| 视频在线观看免费影院欧美meiju| 日本在线精品视频| 日韩精品卡一| 日韩亚洲国产中文字幕| 涩爱av在线播放一区二区| 欧美一区二区三区人| 成人a v视频| 午夜精品久久久久久| 欧美人禽zoz0强交| 国产精品素人视频| 亚洲性猛交xxxx乱大交| fc2成人免费人成在线观看播放| 91小视频在线播放| 日韩在线观看一区二区| 人妻激情另类乱人伦人妻| 色爱综合网欧美| 日本一区视频在线| 亚洲动漫精品| 国产精品加勒比| 欧美日韩午夜电影网| 成人激情春色网| 国产91在线播放精品| 欧美中文字幕在线观看| 97蜜桃久久| 久久免费视频在线观看| av网站导航在线观看免费| 中文字幕日韩在线观看| 激情综合闲人网| 精品亚洲一区二区三区四区五区| 囯产精品一品二区三区| 欧美mv日韩mv| 国产高清在线观看视频| 制服丝袜一区二区三区| 91国内精品视频| 欧美日韩一区成人| 在线视频欧美亚洲| 欧美色图天堂网| 伊人22222| 欧美日韩国产片| 国产精品怡红院| 91精品免费在线观看| 99久久精品无免国产免费| 91精品国产综合久久精品app| 国产精品自产拍| 欧美一区二区三区在线视频| 国产丝袜在线视频| 精品国产凹凸成av人导航| 亚洲精品网站在线| 亚洲成人精品久久| 五月婷在线视频| 亚洲免费视频网站| 国产黄在线观看| 三级精品视频久久久久| 成人日韩欧美| 欧美极品少妇xxxxⅹ免费视频| 欧美aaaxxxx做受视频| 91精品国产91久久久久久| 午夜影视一区二区三区| 国产成人精品在线播放| 久久精品嫩草影院| 亚洲精品日韩激情在线电影| 91综合久久爱com| 欧美一区二区在线| 久久精品国产68国产精品亚洲| 最新欧美日韩亚洲| 亚洲欧洲一区| 88av.com| 国产麻豆精品95视频| 你懂的在线观看网站| 国产欧美精品一区二区色综合 | 国产精品综合不卡av| 精品欧美视频| 久久精品综合一区| 日韩国产综合| av在线观看地址| 青青青爽久久午夜综合久久午夜| 在线播放免费视频| aaa亚洲精品| 肉色超薄丝袜脚交69xx图片| 亚洲综合丝袜美腿| 凹凸精品一区二区三区| 日韩欧美另类在线| 国产在线观看高清视频| 欧美成aaa人片免费看| 午夜激情电影在线播放| 91美女高潮出水| 美女毛片一区二区三区四区最新中文字幕亚洲| 亚洲第一导航| 亚洲国产网站| 中文字幕精品一区二区三区在线| 成人激情免费电影网址| 青青操在线播放| 午夜精品久久久久久久99樱桃| 狠狠躁夜夜躁人人爽视频| 亚洲精品一区二区三区在线观看| 国产在线观看高清视频| 欧美插天视频在线播放| 欧美性片在线观看| 久久久7777| 国产综合网站| 欧美日韩精品区别| 2017欧美狠狠色| 精品一区二区三区人妻| 欧美老人xxxx18| 狠狠v欧美ⅴ日韩v亚洲v大胸| 久久99热这里只有精品国产| 精品久久99| 日本视频一区二区在线观看| 亚洲二区免费| 自拍偷拍激情视频| 亚洲欧美日韩一区| 久久久久精彩视频| 亚洲美女动态图120秒| 黄页在线观看免费| 91免费视频网站| 日韩综合一区| 天堂中文视频在线| 久久综合久久综合久久综合| 国产一级生活片| 日韩欧美精品在线| а√资源新版在线天堂| 国产美女久久精品| 成人激情电影在线| 日韩欧美在线免费观看视频| 91视频观看视频| 日韩三级免费看| 精品人在线二区三区| 香蕉成人app免费看片| 成人中文字幕在线观看| 成人同人动漫免费观看 | 国产性一乱一性一伧一色| 欧美一级艳片视频免费观看| 男人影院在线观看| 91精品久久久久久久久久久久久久| 你微笑时很美电视剧整集高清不卡| 男人和女人啪啪网站| 97久久精品人人爽人人爽蜜臀| 国产精品不卡av| 亚洲激情视频在线播放| 国产精品xx| 欧美亚洲免费高清在线观看| 久久久久.com| 成人黄色a级片| 欧美日韩国产免费一区二区 | 亚洲视频1区2区| 国产剧情精品在线| 九九九久久国产免费| 国产精品美女在线观看直播| 国产3p露脸普通话对白| 91丨porny丨蝌蚪视频| 日韩一级在线视频| 中文字幕一精品亚洲无线一区 | 久久中文欧美| 91麻豆制片厂| 91麻豆精品国产| 秋霞在线视频| 久久艳妇乳肉豪妇荡乳av| 久久欧美肥婆一二区| 制服丨自拍丨欧美丨动漫丨| 91精品国产91综合久久蜜臀| 国产美女一区视频| 蜜桃臀一区二区三区| 美女在线视频一区| 青青草国产在线观看| 亚洲激情成人网| 中文另类视频| 久久亚洲a v| 26uuu国产一区二区三区| 中文字幕av在线免费观看| 欧美精品在线网站| 日韩高清在线免费观看| www.com黄色片| 亚洲成人av在线电影| 成人18在线| 成人免费视频观看视频| 久久av一区| 丝袜美腿小色网| 日韩精品亚洲视频| 欧美爱爱视频| 国精产品一区一区三区视频| 国产精品丝袜一区| 免费国产精品视频| 国产欧美在线看| 亚洲视频播放| 情侣偷拍对白清晰饥渴难耐| 亚洲国产精久久久久久久| 国产成人精品一区二区三区免费| 国产精品videossex国产高清| 久久久久国产精品麻豆ai换脸| aaa国产视频| 国产精品成人v| 亚洲国产三级| 日本精品人妻无码77777|