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

詳解Hibernate攔截器與事件監聽器

開發 后端
Hibernate 為我們提供了實現攔截器的接口org.hibernate.Interceptor,它里面提供了許多攔截事件。通常不需要實現這個接口,因為我們實現自己的攔截器不可能每一個事件都是必須的。

攔截器(Intercept):與Struts2的攔截器機制基本一樣,都是一個操作穿過一層層攔截器,每穿過一個攔截器就會觸發相應攔截器的事件做預處理或善后處理。

監聽器(Listener):其實功能與攔截器是相似的,但它實現原理不同,它是為每一個事件注冊一個或多個監聽器,一旦事件發生,則事件源通知所有監聽該事件的監聽器,然后監聽器處理通知(觀察者模式)。

攔截器

Hibernate 為我們提供了實現攔截器的接口org.hibernate.Interceptor,它里面提供了許多攔截事件。通常不需要實現這個接口,因為我們實現自己的攔截器不可能每一個事件都是必須的。所以Hibernate為我們提供了org.hibernate.Interceptor接口的一個空實現類 org.hibernate.EmptyIntercept,通常情況下我們只需繼承這個空實現類,Override需要的事件方法即可。

攔截器的工作原理簡易示意圖:

設置攔截器后,相應的操作都會先穿過一層層相應的攔截器,讓攔截器執行預處理或善后處理。

攔截器使用實例:

創建攔截器:

  1. public class AutoUpdateTimeInterceptor extends EmptyInterceptor  
  2. {  
  3.     private static final long serialVersionUID = -8597658125309889388L;  
  4.       
  5.     /*  
  6.      * entity - POJO對象  
  7.      * id - POJO對象的主鍵  
  8.      * state - POJO對象的每一個屬性所組成的集合(除了ID)  
  9.      * propertyNames - POJO對象的每一個屬性名字組成的集合(除了ID)  
  10.      * types - POJO對象的每一個屬性類型所對應的Hibernate類型組成的集合(除了ID)  
  11.      */ 
  12.     @Override 
  13.     public boolean onSave(Object entity, Serializable id, Object[] state,  
  14.             String[] propertyNames, Type[] types)  
  15.     {      
  16.         if (entity instanceof People)  
  17.         {  
  18.             for (int index=0;index<propertyNames.length;index++)  
  19.             {  
  20.                 /*找到名為"checkinTime"的屬性*/ 
  21.                 if ("checkinTime".equals(propertyNames[index]))  
  22.                 {  
  23.                     /*使用攔截器將People對象的"checkinTime"屬性賦上值*/ 
  24.                     state[index] = new Timestamp(new Date().getTime());  
  25.                     return true;  
  26.                 }  
  27.             }  
  28.         }  
  29.  
  30.         return false;  
  31.     }  
  32. }  

場景類

  1. public class Client  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         /*為Session添加攔截器*/ 
  6.         Session session = HibernateUtil.getSessionFactory().openSession(new AutoUpdateTimeInterceptor());  
  7.         Transaction tx = null;  
  8.         try 
  9.         {  
  10.             tx = session.beginTransaction();  
  11.               
  12.             People people = new People();  
  13.             people.setName("zhangsan");  
  14.               
  15.             session.save(people);  
  16.               
  17.             tx.commit();  
  18.         }  
  19.         catch (Exception e)  
  20.         {  
  21.             if(tx!=null)  
  22.             {  
  23.                 tx.rollback();  
  24.             }  
  25.               
  26.             e.printStackTrace();  
  27.         }  
  28.         finally 
  29.         {  
  30.             session.close();  
  31.         }  
  32.     }  

場景類中并沒有顯示的設置了people對象的"checkinTime"的屬性值,啟動該場景類代碼,現在來查看數據庫信息:

可以看到checkin_time這列屬性依然被賦值了,說明該賦值操作是攔截器幫助我們完成的。使用攔截器的時候需要注意攔截器的返回值,我以前一直以為攔截器的返回值會控制一個操作是否可以繼續,通過實驗發現,即使返回false操作也會繼續執行的,只是返回false的話,攔截器的所有設置都是無效的,不會反應到數據庫中。

返回false:

  1. public class AutoUpdateTimeInterceptor extends EmptyInterceptor  
  2. {  
  3.     private static final long serialVersionUID = -8597658125309889388L;  
  4.       
  5.     /*  
  6.      * entity - POJO對象  
  7.      * id - POJO對象的主鍵  
  8.      * state - POJO對象的每一個屬性所組成的集合(除了ID)  
  9.      * propertyNames - POJO對象的每一個屬性名字組成的集合(除了ID)  
  10.      * types - POJO對象的每一個屬性類型所對應的Hibernate類型組成的集合(除了ID)  
  11.      */ 
  12.     @Override 
  13.     public boolean onSave(Object entity, Serializable id, Object[] state,  
  14.             String[] propertyNames, Type[] types)  
  15.     {      
  16.         if (entity instanceof People)  
  17.         {  
  18.             for (int index=0;index<propertyNames.length;index++)  
  19.             {  
  20.                 /*找到名為"checkinTime"的屬性*/ 
  21.                 if ("checkinTime".equals(propertyNames[index]))  
  22.                 {  
  23.                     /*使用攔截器將People對象的"checkinTime"屬性賦上值*/ 
  24.                     state[index] = new Timestamp(new Date().getTime());  
  25. //                  return true;  
  26.                 }  
  27.             }  
  28.         }  
  29.  
  30.         return false;  
  31.     }  

查看插入的數據:

可以看到數據依然保存到數據庫中了,但攔截器的操作并沒有反映到數據庫中,攔截器的操作是無效的。

但是比較奇怪的是Console輸出的SQL語句:

  1. Hibernate:   
  2.     insert   
  3.     into  
  4.         people  
  5.         (name, checkin_time, id)   
  6.     values  
  7.         (?, ?, ?)  
  8. Hibernate:   
  9.     update  
  10.         people   
  11.     set  
  12.         name=?,  
  13.         checkin_time=?   
  14.     where  
  15.         id=? 

居然多了一條Update語句,我使用了p6spy顯示了這兩條SQL語句的綁定值:

  1. 1327304507491|0|0|statement|insert into people (name, checkin_time, id) values (?, ?, ?)|insert into people (name, checkin_time, id) values ('zhangsan''2012-01-23 15:41:47.45''402881e53509837f0135098380370001')  
  2. 1327304507491|0|0|statement|update people set name=?, checkin_time=? where id=?|update people set name='zhangsan', checkin_time='' where id='402881e53509837f0135098380370001' 

可以看到,攔截器的操作會直接反映到數據庫中的,但是如果返回值是false的話,Hibernate會產生一條Update SQL語句將攔截器的操作結果取消了。

最后,Hibernate的攔截器有兩種設置方式,一種是使用sessionFactory.openSession(Interceptor interceptor),這樣的攔截器只會針對該session有效,又叫做局部攔截器。另一種是使用Configuration的setInterceptor(Interceptor interceptor)方法設置,這樣的攔截器對每一個session都有效,又稱之為全局攔截器。

事件監聽器

基本上,Session接口的每個方法都有相對應的事件。比如 LoadEvent,FlushEvent,等等(查閱XML配置文件的DTD,以及org.hibernate.event包來獲得所有已定義的事件的列表)。當某個方法被調用時,Hibernate Session會生成一個相對應的事件并激活所有配置好的事件監聽器。系統預設的監聽器實現的處理過程就是被監聽的方法要做的(被監聽的方法所做的其實僅僅是激活監聽器, “實際”的工作是由監聽器完成的)。不過,你可以自由地選擇實現一個自己定制的監聽器(比如,實現并注冊用來處理處理LoadEvent的 LoadEventListener接口), 來負責處理所有的調用Session的load()方法的請求。

在定義自己的事件監聽器時,其實不需要實現XXXListener接口,Hibernate為了方便我們定義事件監聽器,已經為每個事件監聽器接口實提供了一個默認的實現。在org.hibernate.event.def包下面可以找到Hibernate為我們提供的默認實現,我們只需要繼承這些默認實現,在其基礎上添加我們自定義的功能即可。

事件監聽器的簡單示意圖:

 

當某個方法被調用時,Hibernate Session會生成一個相對應的事件并激活所有配置好的事件監聽器。

事件監聽器使用:

創建事件監聽器:

  1. public class SaveOrUpdateListener extends DefaultSaveOrUpdateEventListener  
  2. {  
  3.     private static final long serialVersionUID = 7496518453770213930L;  
  4.  
  5.     /*監聽保存或更新事件*/ 
  6.     @Override 
  7.     public void onSaveOrUpdate(SaveOrUpdateEvent event)  
  8.     {  
  9.         People people = null;  
  10.           
  11.         if(event.getObject() instanceof People)  
  12.         {  
  13.             people = (People)event.getObject();  
  14.         }  
  15.           
  16.         people.setCheckinTime(new Timestamp(new Date().getTime()));  
  17.           
  18.         System.out.println("invoke!");  
  19.           
  20.         /*一定要調用父類提供的功能,不然就和繼承接口一樣了*/ 
  21.         super.onSaveOrUpdate(event);  
  22.     }  

通過hibernate.cfg.xml配置文件將事件監聽器配置到Hibernate中:

第一種配置方式:

  1. <event type="save-update"> 
  2.     <listener class="com.suxiaolei.hibernate.listener.SaveOrUpdateListener"/> 
  3. </event> 

第二種配置方式:

  1. <listener class="com.suxiaolei.hibernate.listener.SaveOrUpdateListener" type="save-update"/> 

兩種配置方式產生的效果都是一樣的。只是一個以"事件"為主,一個以"監聽器"為主。type是指定監聽事件的類型,class指定監聽器的實現類,一個事件可以有多個監聽器。type有許多取值,下表列出了所有type的值:

上面列表每一個選項對應著一個特定的事件。

場景類:

  1. public class Client  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         Session session = HibernateUtil.getSessionFactory().openSession();  
  6.         Transaction tx = null;  
  7.         try 
  8.         {  
  9.             tx = session.beginTransaction();  
  10.               
  11.             People people = new People();  
  12.             people.setName("lisi");  
  13.               
  14.             session.saveOrUpdate(people);  
  15.               
  16.             tx.commit();  
  17.         }  
  18.         catch (Exception e)  
  19.         {  
  20.             if(tx!=null)  
  21.             {  
  22.                 tx.rollback();  
  23.             }  
  24.               
  25.             e.printStackTrace();  
  26.         }  
  27.         finally 
  28.         {  
  29.             session.close();  
  30.         }  
  31.     }  

people對象依然沒有設置checkinTime屬性,運行程序后,查看數據庫:

可以看到,checkin_time字段的依然賦值了,說明我們配置的事件監聽器生效了。

使用事件監聽器我發現需要注意父類行為的順序,例如:

  1. public void onSaveOrUpdate(SaveOrUpdateEvent event)  
  2. {  
  3.         People people = null;  
  4.           
  5.         if(event.getObject() instanceof People)  
  6.         {  
  7.             people = (People)event.getObject();  
  8.         }  
  9.           
  10.         people.setCheckinTime(new Timestamp(new Date().getTime()));  
  11.           
  12.         System.out.println("invoke!");  
  13.           
  14.         /*一定要調用父類提供的功能,不然就和繼承接口一樣了*/ 
  15.         super.onSaveOrUpdate(event);  
  1. public void onSaveOrUpdate(SaveOrUpdateEvent event)  
  2. {  
  3.         /*一定要調用父類提供的功能,不然就和繼承接口一樣了*/ 
  4.         super.onSaveOrUpdate(event);  
  5.           
  6.         People people = null;  
  7.           
  8.         if(event.getObject() instanceof People)  
  9.         {  
  10.             people = (People)event.getObject();  
  11.         }  
  12.           
  13.         people.setCheckinTime(new Timestamp(new Date().getTime()));  
  14.           
  15.         System.out.println("invoke!");  

例如上面的順序,雖然最后產生的效果一致,但是第二種順序會多產生一條update語句,有可能會產生性能問題,所以在使用事件監聽器的時候需要多加注意。

原文鏈接:http://www.cnblogs.com/otomedaybreak/archive/2012/01/23/2328980.html

【編輯推薦】

  1. Hibernate的緩存解讀
  2. Hibernate的集合映射
  3. Hibernate關聯關系配置
  4. Hibernate復合主鍵映射
  5. Hibernate繼承映射
責任編輯:林師授 來源: 音①曉的博客
相關推薦

2011-05-16 10:14:11

Hibernate

2009-09-27 17:46:22

Hibernate監聽

2009-09-27 17:37:32

Hibernate攔截

2025-02-28 08:14:53

2023-11-01 07:55:03

事件監聽器傳遞數據

2010-08-09 11:06:01

Flex事件機制

2009-01-03 13:37:26

Oracle監聽器Oracle服務器Oracle網絡配置

2009-07-08 17:39:23

Servlet監聽器

2011-03-21 16:21:49

Oracle監聽口令監聽器

2010-08-09 09:47:34

Flex事件機制

2009-07-17 09:55:02

事件監聽器SWT和SwingAWT

2009-06-22 09:23:18

事件監聽器

2020-12-15 10:46:29

事件監聽器Spring Boot

2009-06-24 16:00:00

2020-04-20 11:09:49

過濾器監聽器 Web

2021-07-08 07:52:49

容器監聽器Event

2023-09-05 08:58:07

2025-08-01 07:07:18

2010-01-13 09:49:09

注釋監聽器Listener

2011-06-01 14:55:24

Android Service 監聽器
點贊
收藏

51CTO技術棧公眾號

日韩一区二区三区高清| 久久久久久国产免费| 超碰在线公开97| 麻豆电影在线播放| 国产成人午夜精品5599| 97久久久免费福利网址| 手机免费看av| 精品一区二区三区亚洲| 黄网站色欧美视频| 在线视频福利一区| 四虎在线免费看| 久久成人综合网| 亚洲91精品在线| 久久一级免费视频| 欧美a级网站| 51精品秘密在线观看| 91成人在线观看喷潮教学| 91在线网址| av电影天堂一区二区在线| 国产精品自产拍在线观| 69精品久久久| 99久久综合狠狠综合久久aⅴ| 亚洲第一av网| 中文字幕在线视频精品| 在线观看爽视频| 亚洲欧洲美洲综合色网| 麻豆av一区二区三区久久| 国产av无码专区亚洲av麻豆| 麻豆九一精品爱看视频在线观看免费| 免费av一区二区| jizz18女人高潮| 婷婷综合电影| 精品处破学生在线二十三| 亚洲综合欧美激情| 在线观看精品| 黑人巨大精品欧美一区二区三区| 福利网在线观看| 国产私人尤物无码不卡| 99久久国产综合精品色伊| 成人高h视频在线| 成人免费视频国产免费| 99亚洲一区二区| 欧美精品在线免费| 日韩三级在线观看视频| 不卡在线一区二区| 亚洲欧美一区二区三区情侣bbw| 久久久久亚洲av成人网人人软件| 粉嫩一区二区三区在线观看| 欧美午夜一区二区三区| www日韩视频| 嗯啊主人调教在线播放视频| 香蕉加勒比综合久久| youjizz.com在线观看| 羞羞视频在线观看免费| 亚洲欧洲综合另类在线| 在线观看免费91| 伊人在线视频| 国产精品理论在线观看| 亚洲资源视频| 久cao在线| 亚洲少妇30p| 手机在线视频你懂的| 免费av毛片在线看| 国产亚洲一区二区三区在线观看| 久久久人人爽| 蜜桃成人在线视频| 中文字幕成人网| 亚洲一区二区高清视频| 成人免费网址| 亚洲一区二区精品3399| www插插插无码视频网站| 九色porny丨首页入口在线| 天天影视涩香欲综合网| 日韩毛片在线免费看| 99久久er| 日韩情涩欧美日韩视频| 性农村xxxxx小树林| 欧美在线导航| 中文日韩在线视频| 污污的视频在线免费观看| 国产精品xvideos88| 午夜免费在线观看精品视频| 亚洲va在线观看| 秋霞午夜av一区二区三区| 国产伦精品一区二区三区精品视频| 91久久久久久久久久久久| 国产激情一区二区三区| 国产欧美日韩一区二区三区| 欧美3p视频在线观看| 国产精品乱码一区二三区小蝌蚪| 永久免费看av| 色黄视频在线观看| 欧美日韩久久一区| 国产精品久久久久久在线观看| 亚洲国产合集| 久久国产色av| 国产一级片毛片| 久久精品国产第一区二区三区| 91在线播放视频| 男人天堂资源在线| 亚洲欧美激情一区二区| 精品国产免费av| 精品久久免费| 亚洲精品中文字幕有码专区| 欧美特黄一级片| 亚洲伊人网站| 成人久久精品视频| 美女做暖暖视频免费在线观看全部网址91 | 国产免费观看高清视频| 免费一区二区三区四区| 亚洲精品久久久久中文字幕二区| 五月天免费网站| 午夜亚洲影视| 成人三级在线| av在线电影免费观看| 偷拍亚洲欧洲综合| 午夜免费福利网站| 国产成人三级| 国外色69视频在线观看| 国产乱淫a∨片免费观看| 久久只精品国产| 精品人妻大屁股白浆无码| av免费在线一区| 日韩av在线影院| 久久久久久久福利| 激情欧美日韩一区二区| 日韩福利影院| 不卡av播放| 亚洲国产91色在线| 久一区二区三区| 国产一区不卡精品| 在线观看一区二区三区三州| 怡红院成人在线| 日韩经典中文字幕| 伊人365影院| 成人午夜视频网站| 99热这里只有精品免费| 国产精品欧美一区二区三区不卡| 在线观看欧美成人| 国产精品欧美综合| 国产日韩欧美精品在线| www黄色在线| 国产调教一区二区三区| 欧洲一区二区视频| 久久久pmvav| 欧美日韩国产影院| 色天使在线视频| 国产欧美一区二区色老头| 国产综合精品一区二区三区| 高h视频在线播放| 精品国产乱码久久久久久闺蜜| 精品欧美一区二区久久久久| 国产高清无密码一区二区三区| 中文字幕黄色大片| 免费欧美网站| 欧美俄罗斯乱妇| 丰满人妻熟女aⅴ一区| 亚洲自拍偷拍九九九| 国产伦精品一区二区三区88av| 欧美日韩三级电影在线| 99re视频在线| www.综合网.com| 亚洲精品国精品久久99热一| av大片在线免费观看| 久久久久高清精品| 牛夜精品久久久久久久| 99久久夜色精品国产亚洲96| 亚洲va电影大全| 国产极品人妖在线观看| 日韩精品免费在线视频观看| 无码人妻丰满熟妇区bbbbxxxx| 欧美国产一区视频在线观看| 97超碰成人在线| 一区二区三区午夜探花| 成人区精品一区二区| 欧美大片1688| 少妇av一区二区三区| 国产av无码专区亚洲av| 精品久久久久久| 99精品欧美一区二区| 国产在线视频一区二区| 青青青青草视频| 精品国产乱码久久久久久果冻传媒 | 久久人人爽人人爽人人片av免费| 国产精品美女视频| 亚洲美女精品视频| 久久天堂成人| 国产高清不卡无码视频| 精品产国自在拍| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲无线观看| 日本精品久久久| 老司机在线永久免费观看| 亚洲成年人影院在线| 凹凸精品一区二区三区| 一区二区欧美视频| 怡红院一区二区三区| 福利一区二区在线观看| 亚洲欧美激情网| 欧美视频二区| 亚洲精品成人a8198a| 国产成人一二片| 成人xxxx视频| 欧洲一级精品| 高清亚洲成在人网站天堂| 五月香视频在线观看| 日韩毛片在线看| 精品人妻一区二区三区含羞草| 色婷婷亚洲一区二区三区| 久久国产精品波多野结衣| 中文字幕不卡在线观看| 国产黄色网址在线观看| 国产成人一区在线| 五月天av在线播放| 午夜在线一区| 免费视频爱爱太爽了| 天天av综合| 亚洲欧洲精品一区二区三区波多野1战4| 免费日韩一区二区三区| 91丨九色丨国产| 99精品在线免费观看| 国产精品久久久久国产a级| 免费v片在线观看| 久久久久中文字幕2018| 中文字幕伦理免费在线视频| 久久精品视频在线| 国产在线网站| 亚洲欧美日韩高清| 西西人体44www大胆无码| 亚洲成人免费在线视频| 国产极品久久久| 欧美一区二区视频在线观看2022 | 欧美日本国产精品| 国产+成+人+亚洲欧洲在线 | 琪琪久久久久日韩精品| 草莓视频一区| 一区二区三区免费在线看| 亚洲自拍小视频| 成人综合日日夜夜| 成人在线视频福利| 97色婷婷成人综合在线观看| 国产精品最新在线观看| 精品福利在线| 成人国产精品一区二区| 国产极品一区| 国产日韩欧美成人| 日韩av黄色| 成人免费高清完整版在线观看| 日韩在线电影| 91大片在线观看| 日韩精品一级| 国产一区二区无遮挡| 亲子伦视频一区二区三区| 久久av二区| 奇米狠狠一区二区三区| 色狠狠久久av五月综合|| 色喇叭免费久久综合网| 在线丝袜欧美日韩制服| 亚洲乱码免费伦视频| 久久视频免费在线| 亚洲国产日本| 成人黄色片视频| 日本视频一区二区| 爽爽爽在线观看| 国产成人av网站| 波多野结衣影院| 国产视频一区在线播放| 九一在线免费观看| 亚洲免费观看高清在线观看| 国产在线视频卡一卡二| 欧美午夜影院在线视频| 亚洲精品毛片一区二区三区| 欧美精品电影在线播放| 韩国av永久免费| 亚洲男人第一网站| 午夜不卡视频| 国产综合在线视频| 91成人抖音| 国产成人免费观看| 亚瑟一区二区三区四区| 亚洲高清在线观看一区| 欧美99在线视频观看| 国产黄视频在线| 六月丁香婷婷久久| 久久性爱视频网站| 国产肉丝袜一区二区| www.av视频| 色妞www精品视频| 精品黑人一区二区三区国语馆| 日韩h在线观看| 免费黄色在线| 欧美一区二区色| 嫩呦国产一区二区三区av| 精品一区二区国产| 99九九热只有国产精品| 国产精品免费入口| 国产综合成人久久大片91| 国产 中文 字幕 日韩 在线| **性色生活片久久毛片| 日本韩国欧美中文字幕| 欧美一区二区三区在线看| 欧美精品少妇| 久久久亚洲精品视频| 国模私拍国内精品国内av| 精品国产综合区久久久久久| 亚洲精品va| 一本久道中文无码字幕av| 国产成人激情av| av资源在线免费观看| 欧美日韩在线影院| 亚洲国产综合一区| 北条麻妃99精品青青久久| 性欧美hd调教| 国产一区二区自拍| 午夜精品久久| gai在线观看免费高清| 国产亚洲精品aa| 黄色在线观看国产| 精品少妇一区二区三区日产乱码| 午夜在线视频播放| 国产精品福利在线| 日本亚洲不卡| 久色视频在线播放| 国产成人av资源| 免费网站看av| 日韩视频在线观看一区二区| 求av网址在线观看| 国产精品偷伦免费视频观看的| 国产一区二区亚洲| 各处沟厕大尺度偷拍女厕嘘嘘| 成人一道本在线| 久久精品一区二区三| 日韩免费一区二区| а天堂中文在线官网| 成人午夜小视频| 91精品一区国产高清在线gif| 久久撸在线视频| 欧美国产日产图区| 无码人妻精品一区二区三区9厂| 国产视频精品久久久| 美女的胸无遮挡在线观看| 国产一区二区三区高清视频| 欧美深夜福利| 国产人妻黑人一区二区三区| 亚洲已满18点击进入久久| 亚洲国产精品久久人人爱潘金莲 | 亚洲精品电影在线一区| 久久久国产精品一区二区中文| 中文人妻一区二区三区| 日韩欧美在线播放| 国产三级电影在线| 国产精品免费观看在线| 欧美黄色大片在线观看| 亚洲黄色片免费| 一区二区三区高清| 欧洲av在线播放| 国外成人在线视频| 免费成人网www| 天天干天天草天天| 亚洲青青青在线视频| 黄色一级大片在线免费看国产一| **欧美日韩vr在线| 国产一区网站| 久久久精品高清| 亚洲综合999| 日本一区二区三区在线观看视频| 国产97在线视频| 99久久夜色精品国产亚洲狼 | 久久久午夜精品理论片中文字幕| 成人免费视频国产免费| 久久精品国产久精国产思思| 亚洲一级大片| 精品中文字幕av| 国产精品理伦片| 人妻va精品va欧美va| 国产精品国语对白| 综合一区二区三区| 欲求不满的岳中文字幕| 欧美日韩日日摸| h片在线观看| 亚洲精品一品区二品区三品区| 国产一区二区导航在线播放| 中文字幕第15页| 久久久精品国产一区二区| 久久久久久毛片免费看 | 人妻熟妇乱又伦精品视频| 中文字幕av不卡| 高清国产mv在线观看| 国产精品com| 国产精品av久久久久久麻豆网| 欧美 日本 国产| 在线91免费看| 综合日韩av| 久久www视频| 日本一区二区不卡视频| 黑人操亚洲女人| 成人在线观看视频网站| 视频一区视频二区中文| 欧美激情精品久久| 伊是香蕉大人久久|