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

用了這么久的Mybatis,結果面試官問的問題,我竟然還猶豫了

開發 架構
Mybatis是一個半自動 ORM(對象關系映射)框架,它內部封裝了JDBC,加載驅動、創建連接、創建 statement 等繁雜的過程,我們開發的時候只需要關注如何編寫 SQL 語句,而不用關心其他的。

[[402089]]

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲。轉載本文請聯系Java極客技術公眾號。

前段時間阿粉的一個朋友和阿粉吃飯,在吃飯的時候和阿粉瘋狂的吐槽面試官,說面試官問的問題都是些什么問題呀,我一個干了三四年的開發,也不說問點靠譜的,阿粉很好奇,問題問完基礎的,一般不都是根據你自己的簡歷進行提問么?而接下來他說的出來的問題,阿粉表示,阿粉需要繼續學習了。

Mybatis是什么?

說到這個,讀者大人們肯定心想,阿粉是在開玩笑么?你一個 Java 程序員,你不知道Mybatis是啥么?不就是個持久層的框架么,這東西有啥好說的呢?但是阿粉還是要給大家說。

Mybatis是一個半自動 ORM(對象關系映射)框架,它內部封裝了JDBC,加載驅動、創建連接、創建 statement 等繁雜的過程,我們開發的時候只需要關注如何編寫 SQL 語句,而不用關心其他的。

為什么說 Mybatis 是一個半自動 ORM 的框架呢?

ORM,是Object和Relation之間的映射,而Mybatis 在查詢關聯對象或關聯集合對象時,需要手動編寫 sql 來完成,所以,稱之為半自動 ORM 框架,而Hibernate 屬于全自動 ORM 映射工具,使用 Hibernate 查詢關聯對象或者關聯集合對象時,可以根據對象關系模型直接獲取,所以它是全自動的。

這也是為什么有些面試官在面試初級程序員的時候,很喜歡說,你覺得 Mybatis , 和 Hibernate 都有什么優缺點,為啥你們選擇使用的 Mybatis 而不選擇使用 Hibernate 呢?

我們都說了 Mybatis是什么了,接下來肯定需要說說面試官都問了什么問題,能讓阿粉的朋友變得非常猶豫。

Mybatis的一級、二級緩存是什么你了解么?

Mybatis 的一級緩存

我們先說 Mybatis 的一級緩存,因為這是如果不手動配置,他是自己默認開啟的一級緩存,一級緩存只是相對于同一個 SqlSession 而言,參數和SQL完全一樣的情況下,我們使用同一個SqlSession對象調用一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次查詢后,MyBatis會將其放在緩存中,以后再查詢的時候,如果沒有聲明需要刷新,并且緩存沒有超時的情況下,SqlSession都會取出當前緩存的數據,而不會再次發送SQL到數據庫。

當我們面試的時候,說完這個,一般情況下,面試官一定會追問下去,畢竟技術就是要問到你的知識盲區才會停止。

那我們就來畫個圖表示一下一級緩存:

那面試官肯定會說,直接從數據庫查不就行了,為啥要一級緩存呢?

當我們使用MyBatis開啟一次和數據庫的會話時, MyBatis 會創建出一個 SqlSession 對象表示一次與數據庫之間的信息傳遞,在我們執行 SQL 語句的過程中,們可能會反復執行完全相同的查詢語句,如果不采取一些措施,我們每一次查詢都會查詢一次數據庫,而如果在極短的時間內做了很多次相同的查詢操作,那么這些查詢返回的結果很可能相同。

也就是說,如果我們在短時間內,頻繁的去執行一條 SQL ,查詢返回的結果本來應該是改變了,但是我們查詢出來的時候,會出現結果一致的情況,正是為了解決這種問題,也為了減輕數據庫的開銷,所以 Mybatis 默認開啟了一級緩存。

Mybatis 的二級緩存

Mybatis 的二級緩存一般如果你不對他進行設置,他是不會開啟的,而二級緩存是什么呢?Mybatis 中的二級緩存實際上就是 mapper 級別的緩存,而這時候肯定會有人說,那么不同之間的 Mapper 是同一個緩存么?

答案是否定的,他不是一個,Mapper 級別的緩存實際上就是相同的 Mapper 使用的是一個二級緩存,但是在二級緩存中,又有多個不同的 SqlSession ,而不同的 Mapper 之間的二級緩存也就是互相不會影響的。

就類似下面的圖:

這二級緩存是不是就看起來有點意思了?

那怎么能夠開啟二級緩存呢?

1.MyBatis 配置文件

  1. <settings> 
  2.  <setting name = "cacheEnabled" value = "true" /> 
  3. </settings> 

2.MyBatis 要求返回的 POJO 必須是可序列化的

3.Mapper 的 xml 配置文件中加入 標簽

既然我們想要了解這個二級緩存,那么必然,我們還得知道它里面的配置都有哪些含義。

我們先從標簽看起,然后從源碼里面看都有哪些配置信息提供給我們使用:

blocking : 直譯就是調度,而在 Mybatis 中,如果緩存中找不到對應的 key ,是否會一直 blocking ,直到有對應的數據進入緩存。

eviction : 緩存回收策略

而緩存回收策略,在源碼中是有直接體現的,那么他們分別都對應了什么形式呢?

  1. typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class); 
  2. typeAliasRegistry.registerAlias("FIFO", FifoCache.class); 
  3. typeAliasRegistry.registerAlias("LRU", LruCache.class); 
  4. typeAliasRegistry.registerAlias("SOFT", SoftCache.class); 
  5. typeAliasRegistry.registerAlias("WEAK", WeakCache.class); 
  • PERPETUAL : 選擇 PERPETUAL 來命名緩存,暗示這是一個最底層的緩存,數據一旦存儲進來,永不清除.好像這種緩存不怎么受待見。
  • FIFO : 先進先出:按對象進入緩存的順序來移除它們
  • LRU : 最近最少使用的:移除最長時間不被使用的對象。
  • SOFT : 軟引用:移除基于垃圾回收器狀態和軟引用規則的對象。
  • WEAK : 弱引用:更積極地移除基于垃圾收集器狀態和弱引用規則的對象。

大家雖然看著 PERPETUAL 排在了第一位,但是它可不是默認的,在 Mybatis 的緩存策略里面,默認的是 LRU 。

PERPETUAL :

源代碼如下:

  1. public class PerpetualCache implements Cache { 
  2.   private final String id; 
  3.   private Map<Object, Object> cache = new HashMap<>(); 
  4.   public PerpetualCache(String id) { 
  5.     this.id = id; 
  6.   } 

恩?看著是不是有點眼熟,它怎么就只是包裝了 HashMap ? 你還別奇怪,他還真的就是使用的 HashMap ,不得不說,雖然人家是使用的 HashMap ,但是那可是比咱們寫的高端多了。

既然使用 HashMap ,那么必然就會有Key,那么他們的Key是怎么設計的?

CacheKey:

  1. public class CacheKey implements Cloneable, Serializable { 
  2.   private static final long serialVersionUID = 1146682552656046210L; 
  3.   public static final CacheKey NULL_CACHE_KEY = new NullCacheKey(); 
  4.   private static final int DEFAULT_MULTIPLYER = 37; 
  5.   private static final int DEFAULT_HASHCODE = 17; 
  6.   private final int multiplier; 
  7.   private int hashcode; //用于表示CacheKey的哈希碼 
  8.   private long checksum; //總和校驗,當出現復合key的時候,分布計算每個key的哈希碼,然后求總和 
  9.   private int count;//當出現復合key的時候,計算key的總個數 
  10.   // 8/21/2017 - Sonarlint flags this as needing to be marked transient.  While true if content is not serializable, this is not always true and thus should not be marked transient. 
  11.   private List<Object> updateList;//當出現復合key的時候,保存每個key 
  12.    

確實牛逼,至于內部如何初始化,如何進行操作,大家有興趣的可以去閱讀一下源碼,導入個源碼包,打開自己看一下。

FIFO: 先進先出緩沖淘汰策略

  1. public class FifoCache implements Cache { 
  2.  
  3.   private final Cache delegate; //被裝飾的Cache對象 
  4.   private final Deque<Object> keyList;//用于記錄key 進入緩存的先后順序 
  5.   private int size;//記錄了緩存頁的上限,超過該值需要清理緩存(FIFO) 
  6.  
  7.   public FifoCache(Cache delegate) { 
  8.     this.delegate = delegate; 
  9.     this.keyList = new LinkedList<>(); 
  10.     this.size = 1024; 
  11.   } 

在 FIFO 淘汰策略中使用了 Java 中的 Deque,而 Deque 一種常用的數據結構,可以將隊列看做是一種特殊的線性表,該結構遵循的先進先出原則。Java中,LinkedList實現了Queue接口,因為LinkedList進行插入、刪除操作效率較高。

當你看完這個源碼的時候,是不是就感覺源碼其實也沒有那么難看懂,里面都是我們已經掌握好的知識,只不過中間做了一些操作,進行了一些封裝。

LRU : 最近最少使用的緩存策略

而 LUR 算法,阿粉之前都說過,如果對這個算法感興趣的話,文章地址給大家送上,經典的 LRU 算法,你真的了解嗎?

而我們需要看的源碼則是在 Mybatis 中的源碼,

  1. public class LruCache implements Cache { 
  2.  
  3.   private final Cache delegate; 
  4.   private Map<Object, Object> keyMap; 
  5.   private Object eldestKey;//記錄最少被使用的緩存項key 
  6.  
  7.   public LruCache(Cache delegate) { 
  8.     this.delegate = delegate; 
  9.     setSize(1024);//重新設置緩存的大小,會重置KeyMap 字段 如果到達上限 則更新eldestKey 
  10.   } 
  11.     public void putObject(Object key, Object value) { 
  12.       delegate.putObject(key, value); 
  13.       // 刪除最近未使用的key 
  14.       cycleKeyList(key); 
  15.     } 

SOFT: 基于垃圾回收器狀態和軟引用規則的對象

在看到基于垃圾回收器的時候,阿粉就已經開始興奮了,竟然有GC的事情,那還不趕緊看看,這如此高大上(裝杯)的事情,來瞅瞅吧!

  1. public class SoftCache implements Cache { 
  2.   //在SoftCache 中,最近使用的一部分緩存項不會被GC回收,這就是通過將其value添加到 
  3.   private final Deque<Object> hardLinksToAvoidGarbageCollection; 
  4.   //引用隊列,用于記錄GC回收的緩存項所對應的SoftEntry對象 
  5.   private final ReferenceQueue<Object> queueOfGarbageCollectedEntries; 
  6.   //底層被修飾的Cache 對象 
  7.   private final Cache delegate; 
  8.   //連接的個數,默認是256 
  9.   private int numberOfHardLinks; 
  10.  
  11.   public SoftCache(Cache delegate) { 
  12.     this.delegate = delegate; 
  13.     this.numberOfHardLinks = 256; 
  14.     this.hardLinksToAvoidGarbageCollection = new LinkedList<>(); 
  15.     this.queueOfGarbageCollectedEntries = new ReferenceQueue<>(); 
  16.   } 
  17.    
  18.   public void putObject(Object key, Object value) { 
  19.       // 清除被GC回收的緩存項 
  20.       removeGarbageCollectedItems(); 
  21.       // 向緩存中添加緩存項 
  22.       delegate.putObject(key, new SoftEntry(key, value, queueOfGarbageCollectedEntries)); 
  23.     } 
  24.    public Object getObject(Object key) { 
  25.        Object result = null
  26.        // 查找對應的緩存項 
  27.        @SuppressWarnings("unchecked") // assumed delegate cache is totally managed by this cache 
  28.        SoftReference<Object> softReference = (SoftReference<Object>) delegate.getObject(key); 
  29.        if (softReference != null) { 
  30.          result = softReference.get(); 
  31.          // 已經被GC 回收 
  32.          if (result == null) { 
  33.            // 從緩存中清除對應的緩存項 
  34.            delegate.removeObject(key); 
  35.          } else { 
  36.            // See #586 (and #335) modifications need more than a read lock  
  37.            synchronized (hardLinksToAvoidGarbageCollection) { 
  38.              hardLinksToAvoidGarbageCollection.addFirst(result); 
  39.              if (hardLinksToAvoidGarbageCollection.size() > numberOfHardLinks) { 
  40.                hardLinksToAvoidGarbageCollection.removeLast(); 
  41.              } 
  42.            } 
  43.          } 
  44.        } 
  45.        return result; 
  46.      } 
  47.     public void clear() { 
  48.         synchronized (hardLinksToAvoidGarbageCollection) { 
  49.           // 清理強引用集合 
  50.           hardLinksToAvoidGarbageCollection.clear(); 
  51.         } 
  52.         // 清理被GC回收的緩存項 
  53.         removeGarbageCollectedItems(); 
  54.         delegate.clear(); 
  55.       } 
  56.     //其中指向key的引用是強引用,而指向value的引用是弱引用 
  57.     private static class SoftEntry extends SoftReference<Object> { 
  58.       private final Object key
  59.    
  60.       SoftEntry(Object key, Object value, ReferenceQueue<Object> garbageCollectionQueue) { 
  61.         super(value, garbageCollectionQueue); 
  62.         this.key = key
  63.       } 
  64.     } 

WEAK : 基于垃圾收集器狀態和弱引用規則的對象

  1. public class WeakCache implements Cache { 
  2.   private final Deque<Object> hardLinksToAvoidGarbageCollection; 
  3.   private final ReferenceQueue<Object> queueOfGarbageCollectedEntries; 
  4.   private final Cache delegate; 
  5.   private int numberOfHardLinks; 
  6.  
  7.   public WeakCache(Cache delegate) { 
  8.     this.delegate = delegate; 
  9.     this.numberOfHardLinks = 256; 
  10.     this.hardLinksToAvoidGarbageCollection = new LinkedList<>(); 
  11.     this.queueOfGarbageCollectedEntries = new ReferenceQueue<>(); 
  12.   } 

WeakCache在實現上與SoftCache幾乎相同,只是把引用對象由SoftReference軟引用換成了WeakReference弱引用。 

在這里阿粉也就不再多說了,關于 Mybatis 的二級緩存,你了解了么?下次遇到面試官問這個的時候,你應該知道怎么成功(裝杯)不被打了吧。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-12-01 10:18:16

RabbitMQ

2022-02-08 13:39:35

LinuxUNIX系統

2022-11-04 08:47:52

底層算法數據

2021-05-28 06:16:28

藍牙Wi-FiNFC

2021-11-08 10:00:19

require前端模塊

2021-07-21 10:10:14

require前端代碼

2022-01-25 12:41:31

ChromeResponse接口

2025-03-07 02:00:00

webpackPlugin開發

2020-03-30 09:22:03

AI語音技術機器視覺

2021-05-27 21:18:56

谷歌Fuchsia OS操作系統

2018-01-31 10:24:45

熱插拔原理服務器

2020-12-07 11:05:21

HttpClient代碼Java

2019-10-21 09:56:37

MySQLCOUNTInnoDB

2022-08-28 20:35:52

三次握手四次揮手TCP

2021-04-28 11:35:06

Java框架日志

2020-09-17 17:53:12

面試ArrayList數組

2021-11-08 09:18:01

CAS面試場景

2021-12-25 22:31:10

MarkWord面試synchronize

2010-08-23 15:06:52

發問

2020-06-05 18:32:41

HBaseQAQHDFS
點贊
收藏

51CTO技術棧公眾號

国产日本一区二区| 欧美资源在线| 亚洲精品久久久一区二区三区| 欧美精品久久久久久久久久久| 每日更新在线观看av| 久久国产精品无码网站| 欧美高清在线视频观看不卡| 亚洲一区二区三区无码久久| 成人一级视频| 亚洲一区二区视频在线观看| 欧美少妇一区| 精品人妻伦一区二区三区久久| 久久精品综合| 欧美美女18p| 精品人妻中文无码av在线| 成人爽a毛片| 欧美久久久久久久久久| 男人用嘴添女人下身免费视频| av资源网站在线观看| 成人黄色在线视频| 国产在线观看一区二区三区| 日韩久久久久久久久| 婷婷亚洲综合| 亚洲无限av看| 国产精品一区二区人妻喷水| 国产精品日本一区二区三区在线 | 日韩精品视频网| 欧美激情免费在线| 国产精品 欧美激情| 天堂日韩电影| 精品国产91亚洲一区二区三区婷婷| 无需播放器的av| 中文在线免费视频| 亚洲一区二区五区| 亚洲欧美成人一区| 黄色av免费在线看| 91在线观看下载| 国产91一区二区三区| 91国产免费视频| 日韩av电影一区| 国产精品91视频| 男人天堂2024| 香蕉亚洲视频| 91av福利视频| 国产精品7777777| 伊人精品视频| 久久久久久尹人网香蕉| 青青草手机在线观看| 五月天久久网站| xxx一区二区| 亚洲波多野结衣| 香蕉国产精品| 欧美久久久精品| a级黄色片免费看| 午夜精品国产| 欧美激情在线观看| 国产精品99无码一区二区| 欧美日韩国产欧| 欧美激情视频网址| 成年人免费看毛片| 亚洲专区一区二区三区| 日本中文字幕久久看| 波多野结衣一二区| 麻豆久久久久久久| 国产欧美一区二区三区在线看| 中文字幕视频二区| 精品亚洲aⅴ乱码一区二区三区| 国产一区视频在线播放| 97精品人妻一区二区三区在线| 久久丁香综合五月国产三级网站| 国产精品一二三在线| 91禁在线观看| 国产一区二区三区不卡在线观看 | 韩国精品美女www爽爽爽视频| 国产一级大片在线观看| 在线视频免费在线观看一区二区| 欧美做爰性生交视频| 中文字幕免费高清网站| 久久精品国产亚洲一区二区三区| 91传媒视频免费| 天天综合天天综合| 国产日韩欧美综合在线| 国产美女视频免费| caoporn视频在线| 色嗨嗨av一区二区三区| 不用播放器的免费av| 欧美午夜在线播放| 亚洲男女性事视频| 精品久久在线播放| 国产高潮呻吟久久久| 青春草在线免费视频| 都市激情亚洲色图| 青青草原国产在线视频| 超碰成人97| 亚洲三级av在线| 91麻豆精品成人一区二区| 日韩午夜精品| 成人免费高清完整版在线观看| 日本高清视频www| 国产精品无圣光一区二区| 国产女主播av| 成人精品电影在线| 欧美成人精精品一区二区频| 人人妻人人藻人人爽欧美一区| 91精品国产91久久久久久黑人| 久久久久久亚洲精品不卡| 最近中文字幕在线观看| 成人免费毛片片v| 亚洲欧美精品在线观看| 国产高清中文字幕在线| 在线播放日韩导航| 四虎影成人精品a片| 亚洲精品国产偷自在线观看| 欧洲美女免费图片一区| 99在线精品视频免费观看软件| 久久久青草青青国产亚洲免观| 日韩人妻一区二区三区蜜桃视频| 欧美va视频| 日韩精品中文字| 久久精品这里只有精品| 免费成人美女在线观看| 久久99精品久久久久久青青日本 | 亚洲手机成人高清视频| 久久9精品区-无套内射无码| 亚洲一区二区三区在线免费 | 欧美影视一区二区| 欧美韩日亚洲| 91精品蜜臀在线一区尤物| 国产精品高清无码在线观看| 日韩五码在线| 成人免费视频网站| 顶级网黄在线播放| 欧美日韩亚洲综合在线| 白白色免费视频| 亚洲一级在线| 精品国产综合| 国产精品蜜芽在线观看| 欧美成人性战久久| 久久久久久久久毛片| 极品少妇一区二区| 亚洲欧洲精品一区二区三区波多野1战4| 欧美sm一区| 日韩成人在线免费观看| 日韩精品一区二区三| 成人美女在线视频| 成人免费视频91| 超碰精品在线观看| 欧美激情中文字幕乱码免费| 国产黄色av片| 艳妇臀荡乳欲伦亚洲一区| 污视频在线观看免费网站| 91不卡在线观看| 亚洲最大福利视频网| 成人在线播放免费观看| 91精品国产色综合久久不卡电影| 裸体武打性艳史| 东方欧美亚洲色图在线| 亚洲精品蜜桃久久久久久| aiss精品大尺度系列| 九九热精品视频国产| 丁香花免费高清完整在线播放| 一区二区三区精密机械公司| 丰满少妇xbxb毛片日本| 亚洲色诱最新| 欧美久久综合性欧美| 无人区在线高清完整免费版 一区二| 亚洲人精品午夜在线观看| 波多野结衣高清在线| 国产精品欧美久久久久一区二区| 色www免费视频| 亚洲国产精品久久久久蝴蝶传媒| 亚洲自拍偷拍视频| 啊啊啊久久久| 一区二区三区www| 国产婷婷在线视频| 亚洲国产精品一区二区久久| 丰满少妇一区二区三区| 欧美96一区二区免费视频| 97精品国产97久久久久久粉红| 亚洲电影一区| 琪琪亚洲精品午夜在线| 青青青青在线| 日韩精品视频观看| 一级特黄特色的免费大片视频| 亚洲猫色日本管| 成人网站免费观看| 韩国一区二区在线观看| 国产97在线 | 亚洲| 成人av动漫在线观看| 国产69精品久久久久9999apgf | 97在线观看免费观看高清| 欧美一区二区三区免费在线看| 日韩av在线播| 国产精品的网站| 朝桐光av一区二区三区| 免费看欧美女人艹b| 久久手机在线视频| 欧美亚洲国产一区| 国产主播一区二区三区四区| aaaa欧美| 97久久国产精品| 男人天堂久久久| 精品伊人久久97| av观看在线免费| 欧美日韩视频免费播放| 极品美妇后花庭翘臀娇吟小说| 99精品久久只有精品| 男人午夜视频在线观看| 亚洲欧美日韩国产综合精品二区| 影音先锋男人的网站| 米奇777超碰欧美日韩亚洲| 91影院未满十八岁禁止入内| 嫩草伊人久久精品少妇av杨幂| 97久久精品人人澡人人爽缅北| 巨大荫蒂视频欧美另类大| 亚洲精品一区二区网址| 高潮一区二区三区乱码| 欧美顶级少妇做爰| 欧美视频xxxx| 精品福利一区二区| 国产一级二级毛片| 亚洲男人的天堂在线aⅴ视频| 亚洲日本精品视频| 91免费看片在线观看| 久久久久亚洲av无码网站| 经典三级在线一区| 欧美伦理片在线观看| 久久成人在线| 人妻久久久一区二区三区| 亚洲色图二区| 成年人免费观看的视频| 成人黄色小视频| 日本一区二区三区视频免费看| 日韩mv欧美mv国产网站| 国产亚洲欧美一区二区| 日韩一二三区在线观看| 亚洲一区中文字幕| 日韩欧美三区| 国产在线观看一区二区三区| 澳门av一区二区三区| 日本人成精品视频在线| 制服丝袜专区在线| 欧美综合激情网| 欧美二三四区| 国产成人精品久久二区二区| jk漫画禁漫成人入口| 欧美一区二区三区四区在线| 天堂av在线网| 国产成人在线一区二区| 免费成人直播| 国产精品福利在线观看| 电影久久久久久| 国产在线精品成人一区二区三区| 精品美女一区| 国产精品旅馆在线| 色香欲www7777综合网| 国产精品大片wwwwww| 91大神在线观看线路一区| 国产精品免费一区| 97精品资源在线观看| 亚洲资源在线看| 成人自拍在线| 久久久久se| 欧美精品羞羞答答| 性做爰过程免费播放| 国产在线不卡| 日韩欧美国产免费| 日本成人在线电影网| 国产女同无遮挡互慰高潮91| 国产精品亚洲第一| 中文在线永久免费观看| 国产午夜一区二区三区| 麻豆网址在线观看| 亚洲国产成人高清精品| 五月天综合激情网| 欧美日韩免费高清一区色橹橹| 国产美女三级无套内谢| 亚洲成人aaa| 浮生影视网在线观看免费| www日韩欧美| yellow在线观看网址| 国产99久久久欧美黑人| 国产一区二区| 麻豆久久久av免费| 天天做天天爱综合| 日韩在线综合网| 久久99国产精品久久99果冻传媒| 亚洲熟女乱综合一区二区| 久久影院午夜论| 丝袜美腿小色网| 一本在线高清不卡dvd| 91美女精品网站| 日韩电影免费在线观看中文字幕 | 亚洲成人资源网| 亚洲国产无线乱码在线观看| 欧美成人性战久久| 在线观看a视频| 2019中文字幕在线| 久久9999免费视频| 日韩精彩视频| 在线 亚洲欧美在线综合一区| 国产精品视频黄色| 成人一级视频在线观看| 亚洲一级片在线播放| 性感美女久久精品| 国产精品国产av| 亚洲色图五月天| 国产在线看片免费视频在线观看| 成人伊人精品色xxxx视频| 国产精品一区二区av交换| 激情五月婷婷六月| 久久91精品国产91久久小草 | 免费看成人吃奶视频在线| 久久av喷吹av高潮av| 玖玖视频精品| www.免费av| 亚洲尤物视频在线| 国产精品久久久久久久久久久久久久久久| 日韩av综合网站| 国产在线xxx| 91久久国产精品| 色综合久久一区二区三区| 中国丰满人妻videoshd | 欧美高清激情brazzers| 欧美在线观看在线观看| 久久久久这里只有精品| 日本久久久久| 日韩欧美三级一区二区| 亚洲欧美高清| 国产激情视频网站| 亚洲国产视频一区二区| 国产男女裸体做爰爽爽| xxx一区二区| 亚洲成人毛片| 一本久道久久综合狠狠爱亚洲精品 | 永久免费精品影视网站| 一本大道色婷婷在线| 国内精品视频免费| 亚洲精品一二| 超碰97在线资源站| 欧美日韩国产页| 日韩精品视频无播放器在线看 | 欧美国产激情视频| gogo大胆日本视频一区| 99视频在线看| 亚洲国产欧美精品| 美女扒开腿让男人桶爽久久软| 国产伦精品一区二区三区四区视频| 国产精品jizz在线观看美国| 欧美一级大片免费看| 亚洲综合自拍偷拍| 丁香六月色婷婷| 欧美诱惑福利视频| 国产精品一区二区av交换| 亚洲36d大奶网| 中文字幕在线不卡一区二区三区| 91资源在线视频| 九九久久国产精品| 女同另类激情重口| 国产无套内射久久久国产| 国产喷白浆一区二区三区| 中文 欧美 日韩| 超在线视频97| 大奶一区二区三区| 一本大道熟女人妻中文字幕在线 | a欧美人片人妖| 午夜一区二区三区| 国产精品456| av大片免费观看| 日韩中文字幕欧美| 亚洲国产中文在线| 免费黄色日本网站| 国产精品久久夜| 韩国中文字幕hd久久精品| 91sa在线看| 色天天综合网| 中文字幕一区三区久久女搜查官| 日韩欧美黄色动漫| 成人18在线| 成人欧美一区二区三区在线观看| 亚洲欧美日韩一区在线观看| 91无套直看片红桃在线观看| 日韩一区二区影院| 午夜影院在线播放| 手机成人av在线| 91伊人久久大香线蕉| 国产一区二区自拍视频| 97精品在线观看| 国产精品久久天天影视| 国产精品无码在线| 欧美日韩在线免费视频| bl视频在线免费观看| 翔田千里亚洲一二三区| 99视频精品免费视频| 亚洲手机在线观看| 欧美一级大片视频| 中文精品久久| 免费观看a级片| 亚洲高清色综合| 久久伊人影院|