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

91精品啪在线观看国产爱臀| 国产资源在线看| 国产综合精品| 亚洲国产精品热久久| 成 年 人 黄 色 大 片大 全| 天天操天天射天天| 麻豆极品一区二区三区| 国产69精品久久久久9| 夜夜春很很躁夜夜躁| 亚洲国产中文在线| 欧美在线视频不卡| 成年人网站国产| а√天堂中文在线资源bt在线| 国产成都精品91一区二区三| 日韩av免费一区| 黄色一级视频免费| 精品一区二区三区的国产在线观看| 欧美一二三四区在线| 成人在线观看a| 黄色的视频在线观看| 国产精品网站在线| 久久婷婷人人澡人人喊人人爽| 在线视频 中文字幕| 国产欧美另类| 欧美激情亚洲综合一区| 亚洲区一区二区三| 日韩精品看片| 国产亚洲欧美另类中文| www.男人天堂| 午夜视频一区二区在线观看| 免费看a级黄色片| 日本国产欧美一区二区三区| 免费黄在线观看| 欧美亚洲国产日韩| 日韩精品一区二区三区老鸭窝| 国产成人精品无码播放| 无码人妻一区二区三区免费n鬼沢| 色偷偷偷在线视频播放| 一区二区三区在线免费视频| 亚洲欧美日韩国产yyy| 日本成人一区| 99re8在线精品视频免费播放| 99蜜桃在线观看免费视频网站| 亚洲一区二区人妻| 青青草国产成人av片免费| 日韩女优在线播放| 999视频在线| 久久国产精品毛片| 日韩av电影院| 久久久久久无码午夜精品直播| 久久国产精品久久久久久电车| 2019中文在线观看| 久久久久久少妇| 亚洲综合三区| 国产成人精品免费视频| av手机天堂网| 蜜桃视频第一区免费观看| 国产精品wwwwww| 中文有码在线播放| 激情五月婷婷综合网| 国产免费一区视频观看免费| 国产一区二区波多野结衣| 精品一区二区三区视频在线观看 | 久久久人人人| 欧美一级大胆视频| 无码人妻丰满熟妇区bbbbxxxx| 视频在线观看一区二区三区| 国产精品va在线播放我和闺蜜| 久久精品99北条麻妃| 久久精品国产一区二区| 亚洲一区二区少妇| 少妇喷水在线观看| 久久亚洲精华国产精华液 | 一区二区三区网站| 欧美高清在线视频观看不卡| 激情五月色婷婷| 亚洲综合日韩| 国产在线视频2019最新视频| 朝桐光av在线一区二区三区| a级高清视频欧美日韩| 茄子视频成人在线观看| 免费网站看v片在线a| 亚洲综合在线视频| 欧美日韩第二页| 91精品亚洲一区在线观看| 精品国产乱码久久久久久久| 亚洲AV无码国产成人久久| 97精品97| 1769国产精品| 在线观看亚洲一区二区| 丁香另类激情小说| 日韩视频专区| 第一中文字幕在线| 精品视频色一区| 日本一二三四区视频| 欧美三级午夜理伦三级小说| 色系列之999| 精品久久免费视频| 久久99热99| 美国av一区二区三区| 黄色精品在线观看| 欧美午夜丰满在线18影院| 亚洲免费黄色录像| 一区二区三区四区在线看| 久久五月天综合| 成人毛片在线播放| 国产成人精品免费在线| 亚洲欧洲一区二区在线观看| 国产网站在线| 91精品国产一区二区| 自拍偷拍亚洲天堂| 在线观看不卡| 成人欧美一区二区三区在线| 欧美视频综合| 亚洲一区在线免费观看| 欧美美女性视频| 亚洲另类春色校园小说| 欧美日韩高清在线观看| 一本一道精品欧美中文字幕| 久久亚洲欧美国产精品乐播 | 一级性生活免费视频| 免费一区视频| 国产一区精品视频| 牛牛精品在线| 这里只有精品免费| 蜜桃av免费观看| 日韩经典中文字幕一区| 久久国产一区| 精精国产xxxx视频在线野外 | 99久久久无码国产精品性波多| 欧美国产小视频| 国产精品激情自拍| 黄网在线免费| 色综合一区二区| 中文字幕av观看| 99国产精品久久久久久久成人热 | 国产伦精品一区二区三区千人斩 | 337p粉嫩色噜噜噜大肥臀| 成人av动漫在线| 国产aaa免费视频| 日韩精品中文字幕吗一区二区| 久久亚洲精品一区二区| 97精品人妻一区二区三区香蕉| 国产精品护士白丝一区av| 亚洲一级片免费| 色婷婷热久久| 成人久久精品视频| 国产在线高清视频| 91精品国产综合久久久久| 尤物在线免费视频| 国产一区高清在线| 欧美xxxx吸乳| 亚洲国产欧美在线观看| 韩国欧美亚洲国产| 全色精品综合影院| 91成人网在线| 国产又粗又长又硬| 国产成人免费视| 婷婷无套内射影院| 蜜桃一区二区| 国产精品揄拍一区二区| 免费黄色网页在线观看| 日韩视频免费观看高清在线视频| 免费在线观看av网址| 成人av中文字幕| 无码人妻丰满熟妇区毛片18| 欧美在线色图| 91在线视频导航| 成人影院在线播放| 日韩精品在线看| 久久精品国产亚洲av麻豆蜜芽| 中文字幕一区二区三区四区不卡| 免费观看黄网站| 99国产精品视频免费观看一公开| 欧美日韩在线播放一区二区| 成人日韩av| 欧美精品videossex88| 午夜视频在线免费播放| 精品视频1区2区3区| 麻豆视频在线观看| 久久尤物电影视频在线观看| 亚洲欧美国产日韩综合| 欧美日韩99| 日韩欧美在线电影| 1313精品午夜理伦电影| 国产精品aaa| 日本电影在线观看| 亚洲色图日韩av| 午夜精品久久久久久久第一页按摩| 香蕉av福利精品导航| 欧美精品日韩在线| 99久精品国产| 国产无遮挡猛进猛出免费软件 | 国产精品美女久久久久久免费| 国产在线1区| 亚洲区免费影片| 性色av蜜臀av| 欧美偷拍一区二区| 国产主播在线播放| 日韩一区中文字幕| 女尊高h男高潮呻吟| 国产精品一区二区男女羞羞无遮挡 | 毛茸茸多毛bbb毛多视频| 久久91精品久久久久久秒播| 黄色动漫网站入口| 国产精品mm| 在线免费一区| 国产一区国产二区国产三区| 国产精品swag| 天天综合在线观看| 国产91色在线|| 国产ktv在线视频| 久久亚洲精品一区二区| av大片在线看| 亚洲人成绝费网站色www| 亚洲国产精品久久久久久久 | 日韩中文字幕影院| 欧美一区二区在线不卡| 最好看的日本字幕mv视频大全| 激情av一区二区| 国产亚洲自拍av| 最新国产の精品合集bt伙计| 亚洲AV无码成人精品区明星换面 | а√天堂8资源在线| zzjj国产精品一区二区| 搞黄视频在线观看| 亚洲人成啪啪网站| 爽爽视频在线观看| 日韩av一区在线| 手机看片福利在线| 亚洲精品720p| 全国男人的天堂网| 欧美mv日韩mv国产| 亚洲精品国产精| 欧美成人r级一区二区三区| 99草在线视频| 日韩免费视频一区| www.看毛片| 欧美成人一区二区三区| 亚洲av无码乱码国产精品久久| 555www色欧美视频| 国产三级漂亮女教师| 91麻豆精品国产91久久久资源速度 | 无码人妻精品一区二区| 色综合天天做天天爱| 日本中文字幕在线| 91福利小视频| 最新中文字幕在线观看视频| 欧美午夜一区二区| 91国偷自产中文字幕久久| 欧美日本一区二区三区四区| 国产精品天天操| 91精品久久久久久久久99蜜臂| 国产女无套免费视频| 日韩精品一区二区在线| 女人18毛片一区二区三区| 亚洲国产一区二区三区在线观看| 天堂中文资源在线| 国产一区二区免费| 美女羞羞视频在线观看| 欧美日本精品在线| 男人天堂视频在线观看| 国产不卡在线观看| 日韩欧美激情| 99久久伊人精品影院| 欧美国产不卡| 日韩精品资源| 亚洲色图二区| 久久精品国产sm调教网站演员| 亚洲一区国产| 精品亚洲一区二区三区四区| 国产精品一区二区在线观看不卡| 9191在线视频| 久久人人爽爽爽人久久久| 战狼4完整免费观看在线播放版| 亚洲色图清纯唯美| 国产成人无码精品亚洲| 在线观看国产精品网站| 国产特级黄色片| 亚洲毛茸茸少妇高潮呻吟| 在线观看美女网站大全免费| 欧美国产日本高清在线| 网友自拍亚洲| 91黄在线观看| 神马午夜久久| 欧美xxxx吸乳| 久久伊人亚洲| 欧美一级片在线免费观看| 久久久国产午夜精品| 懂色av懂色av粉嫩av| 一本高清dvd不卡在线观看| 国产乱人乱偷精品视频a人人澡| 亚洲激情电影中文字幕| 欧美三级电影一区二区三区| 97视频在线播放| 一区二区三区| 欧美久久久久久久| 欧美日本一区| 污污网站在线观看视频| 91日韩一区二区三区| 天天综合天天做| 在线免费视频一区二区| 日韩一区免费视频| 久久伊人色综合| 国产精品久久亚洲不卡| 黄色小网站91| 国产精品大片| www.成人黄色| 久久久久久黄色| 国产网址在线观看| 欧美久久久久免费| 国产在线中文字幕| 97在线免费观看| 欧美久久亚洲| 在线视频不卡一区二区| 久久尤物视频| 国产精品三级在线观看无码| 一区二区三区久久| 国产精品美女一区| 自拍偷拍亚洲区| 台湾佬成人网| 精品一区久久久| 亚洲精品色图| 久久久精品人妻一区二区三区| 中文字幕欧美一| 国产一区免费看| 亚洲欧洲日本专区| 九色porny丨国产首页在线| 成人欧美一区二区| 中文在线日韩| 欧美国产在线一区| 亚洲视频你懂的| 国产伦精品一区二区三区视频痴汉| 在线观看精品自拍私拍| 91国拍精品国产粉嫩亚洲一区 | 伊人久久大香线| www.色就是色.com| 国产精品国产三级国产普通话蜜臀| 日韩免费av网站| 伊人久久五月天| 亚洲精品555| 亚洲高清乱码| 久久99精品久久久久久| 黄色激情小视频| 91精品欧美一区二区三区综合在 | 香蕉视频在线观看黄| 亚洲精品高清视频在线观看| av片免费播放| 欧美人与物videos| 精品综合久久88少妇激情| 欧美不卡在线播放| 久久综合九色欧美综合狠狠| 天天干天天干天天操| 亚洲欧美视频在线| 电影天堂国产精品| 一区二区三区偷拍| 国产一区二区三区黄视频| 午夜少妇久久久久久久久| 精品少妇一区二区三区| 老色鬼在线视频| 欧美在线播放一区| 老司机免费视频一区二区| 蜜臀av午夜精品久久| 欧美大片日本大片免费观看| 7777kkk亚洲综合欧美网站| 精品国产一二| 日韩精品一卡二卡三卡四卡无卡| 91视频免费在观看| 91精品麻豆日日躁夜夜躁| yellow字幕网在线| 日韩精品欧美一区二区三区| 国内精品伊人久久久久av影院| 久久综合综合久久| 亚洲男人第一av网站| 亚洲高清国产拍精品26u| 欧美乱大交xxxxx潮喷l头像| 久久久综合九色合综国产精品| 夜夜爽8888| 91精品国产乱码久久久久久久久| 欧美伦理影院| 久久黄色一级视频| 色噜噜狠狠成人中文综合| 精品国产99久久久久久| 韩国成人av| 九九热在线视频观看这里只有精品| 久久久久香蕉视频| 亚洲性生活视频在线观看| 欧美久久一区二区三区| www.xxx亚洲| 亚洲午夜激情av| 日韩三级影院| 精品国产一区二区三区四区精华| 免费在线成人网| 日韩成人免费在线视频| 搡老女人一区二区三区视频tv| 成功精品影院| 久热精品在线观看视频| 岛国精品视频在线播放| 黄色一级片在线观看| 欧美在线播放一区二区|