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

探討Mybatis最硬核的API,你知道幾個?

開發 架構
本文中,我們主要先把 Mybatis 的架構/層次鋪開,俯視 Mybatis 架構的設計全貌,再把幾個硬核的 API 詳細消化。

1、Mybatis 架構與核心API

不出意外的話,在后續源碼剖析相關文章中,我們會對 Mybatis 的源碼進行一次大掃蕩,一起挖掘每一處值得大家深入理解/記憶的知識點。而在本文中,我們主要先把 Mybatis 的架構/層次鋪開,俯視 Mybatis 架構的設計全貌,再把幾個硬核的 API 詳細消化。

整體順序脈絡,希望讓你有所期待 ~

[[375611]]

我們先簡單揭開 Mybatis 神秘的源碼包,

瞅瞅 Ta 大致目錄結構 :

Mybatis最硬核的API你知道幾個?

看,Mybatis 的源代碼包整齊劃一排在 org.apache.ibatis 目錄下,基本設計用途我簡單梳理成上面這張圖,方便大家直觀理解,當然只看源碼包目錄結構,難免會顯得枯燥無物,所以我們再看一下,其實 Mybatis 的源碼包功能上可以是這么劃分:

Mybatis最硬核的API你知道幾個?

上圖讓我們對 Mybatis 的架構有了抽象的理解。

然而,實際上具體的職能分工,核心 API 的場景應用,到底會是怎樣一套流程呈現呢?

看下面這幅功能架構設計,或許你能更好的理解。

 Mybatis最硬核的API你知道幾個?

根據 Mybatis 功能架構我們劃分成三層:

  • 接口層:該層提供一系列接口讓用戶直接參與使用,包含信息配置與實際數據操作調用。配置方式包括:基于 XML 配置方式、基于 Java API 配置方式兩種方式,用戶也可以通過接口層 API 對數據庫發起增刪改查等操作的請求, 本層接口會把接收到的調用請求交給數據處理層的構件去處理。
  • 數據處理層:該層是 Mybatis 的核心層,負責數據處理,主要包括SQL 參數映射解析、SQL 語句的實際執行、執行結果集的映射處理等。
  • 框架支撐層:該層屬于 Mybatis 的后勤保障層,包括數據庫連接管理、事務把控管理、配置加載與緩存處理、日志處理、異常處理等,提供基礎支撐能力,保障上層的數據處理。

我們知道,Mybatis 框架讓用戶只需要提供配置信息,并且專注于 SQL 的編寫即可,對于連接管理數據庫/事務,或實際的 SQL 參數映射/語句執行/結果集映射等操作,作為用戶都并不需要操心和參與。

但是,好奇的我們其實想知道,Mybatis 核心部分的數據處理在整體流程中,是如何支撐用戶請求?同時各個構件之間交互,又是怎樣流轉呢?

很巧,我這里有一張圖,介紹了整體流程:

Mybatis最硬核的API你知道幾個?

根據以上框架流程圖進行講解:

  • 創建配置并調用API :這一環節發生在應用程序端,是開發人員在實際應用程序中進行的兩步操作,第一步創建核心配置文件 Configuration.xml 和映射文件 mapper.xml (通過注解方式也可創建以上兩種配置),準備好基礎配置和 SQL 語句之后;第二步就是直接調用 Mybatis 框架中的數據庫操作接口。
  • 加載配置并初始化 :Mybatis 框架會根據應用程序端提供的核心配置文件與 SQL 映射文件的內容,使用資源輔助類 Resources 把配置文件讀取成輸入流,然后通過對應的解析器解析并封裝到 Configuration 對象和 MappedStatement 對象,最終把對象存儲在內存之中。
  • 創建會話并接收請求 :在 Mybatis 框架加載配置并初始化配置對象之后,會話工廠構建器 SqlSessionFactoryBuilder 同時創建會話工廠 SqlSessionFactory,會話工廠會根據應用程序端的請求,創建會話 SqlSession,以便應用程序端進行數據庫交互。
  • 處理請求 :SqlSession 接收到請求之后,實際上并沒有進行處理,而是把請求轉發給執行器 Executor,執行器再分派到語句處理器 StatementHandler ,語句處理器會結合參數處理器 ParameterHandler ,進行數據庫操作(底層封裝了 JDBC Statement 操作)。
  • 返回處理結果 :每個語句處理器 StatementHandler 處理完成數據庫操作之后,會協同 ResultSetHandler 以及類型處理器 TypeHandler ,對底層 JDBC 返回的結果集進行映射封裝,最終返回封裝對象。

針對以上總體框架流程涉及到的這些硬核 API,下面我們逐個展開介紹,但不會詳細剖析源碼與原理,包括構建細節,因為這些我們在后續的源碼剖析章節中都會詳細分析。

2、Configuration – 全局配置對象

對于 Mybatis 的全局配置對象 Configuration,我相信無論是初學者還是資深玩家,都不會陌生。整個 Mybatis 的宇宙,都圍繞著 Configuration 轉。Configuration 對象的結構和 config.xml 配置文件的內容幾乎相同,涵蓋了properties (屬性),settings (設置),typeAliases (類型別名),typeHandlers (類型處理器),objectFactory (對象工廠),mappers (映射器)等等,之前我們有專門的一篇文章詳細進行介紹,感興趣的朋友往上翻到目錄列表,找到 《Mybatis系列全解(四):全網最全!Mybatis配置文件XML全貌詳解》 一文詳細品味一番吧。

Mybatis最硬核的API你知道幾個?

配置對象 Configuration 通過解析器 XMLConfigBuilder 進行解析,把全局配置文件 Config.xml 與 映射器配置文件 Mapper.xml 中的配置信息全部構建成完整的 Configuration 對象,后續我們源碼分析時詳細剖析整個過程。

3、Resources – 資源輔助類

我們知道,像 Configuration 和 Mapper 的配置信息存放在 XML 文件中,Mybatis 框架在構建配置對象時,必須先把 XML 文件信息加載成流,再做后續的解析封裝,而 Resources 作為資源的輔助類,恰恰干的就是這個活,無論是通過加載本地資源或是加載遠程資源,最終都會通過 類加載器 訪問資源文件并輸出文件流。

Mybatis最硬核的API你知道幾個?
  1. //加載核心配置文件 
  2. InputStream resourceAsStream =  
  3.     Resources.getResourceAsStream("Config.xml"); 

 Resources 實實在在提供了一系列方法分分鐘解決你的文件讀取加載問題:

Mybatis最硬核的API你知道幾個?

4、SqlSessionFactoryBuilder – 會話工廠構建器

我們一撞見 xxxBuilder ,就大致能知道它是某類對象的構建器,這里 SqlSessionFactoryBuilder 也是一樣,它是 Mybatis 中的一個會話工廠構建器,在資源輔助類 Resources 讀取到文件流信息之后,它負責解析文件流信息并構建會話工廠 SqlSessionFactory。(解析的配置文件包含:全局配置 Configuration 與映射器 Mapper)

Mybatis最硬核的API你知道幾個?

在程序應用端,我們一般使用 SqlSessionFactoryBuilder 直接構建會話工廠:

  1. // 獲得sqlSession工廠對象 
  2. SqlSessionFactory sqlSessionFactory =  
  3.     new SqlSessionFactoryBuilder().build(resourceAsStream); 

 當然,如果你集成了 Spring 框架的項目,則不需要自己手工去構建會話工廠,直接在 Spring 配置文件中指定即可,例如指定一個 bean 對象,id 是 sqlSessionFactory,而 class 類指定為 org.mybatis.spring.SqlSessionFactoryBean 。

SqlSessionFactoryBuilder 內部通過解析器 XMLConfigBuilder 解析了文件流,同時封裝成為配置對象 Configuration ,再把 Configuration 對象進行傳遞并構建實例。

  1. public SqlSessionFactory build( 
  2.     InputStream inputStream,  
  3.     String environment,  
  4.     Properties properties) { 
  5.     
  6.       
  7.       // 配置解析器解析 
  8.       XMLConfigBuilder parser =  
  9.           new XMLConfigBuilder( 
  10.             inputStream,environment, properties); 
  11.      
  12.       // 最終實例會話工廠 
  13.       return build(parser.parse());  
  14.      

 最終實例會話工廠,其實 Mybatis 默認實現是 new 了一個DefaultSqlSessionFactory 實例。

  1. // 最終實例會話工廠 
  2. public SqlSessionFactory build(Configuration config) { 
  3.     
  4.     return new DefaultSqlSessionFactory(config); 

 會話工廠構建器 SqlSessionFactoryBuilder 應用了構建者模式,主要目的就是為了構建 SqlSessionFactory 對象,以便后續生產 SqlSession 對象,這個構造器基本上算是 Mybatis 框架的入口構建器,它提供了一系列多態方法 build(),支持用戶使用 XML 配置文件或 Java API (Properties)來構建會話工廠 SqlSessionFactory 實例。

SqlSessionFactoryBuilder 的一生只為成就 SqlSessionFactory,當 SqlSessionFactory 一經實例,SqlSessionFactoryBuilder 使命完成,便可消亡,便可被丟棄。

Mybatis最硬核的API你知道幾個?

因此 SqlSessionFactoryBuilder 實例的最佳作用域是 方法作用域 (也就是局部方法變量)。 你可以重用 SqlSessionFactoryBuilder 來創建多個 SqlSessionFactory 實例,但最好不要一直保留著它,以保證所有的 XML 解析資源可以被釋放給更重要的事情。

SqlSessionFactoryBuilder 中靈活構建會話工廠的一系列接口:

Mybatis最硬核的API你知道幾個?

5、SqlSessionFactory – 會話工廠

會話工廠 SqlSessionFactory 是一個接口,作用是生產數據庫會話對象 SqlSession ,有兩個實現類:

  • **DefaultSqlSessionFactory **(默認實現)
  • **SqlSessionManager **(僅多實現了一個 Sqlsession 接口,已棄用)

在介紹會話工廠構建器 SqlSessionFactoryBuilder 的時候,我們了解到構建器默認創建了 DefaultSqlSessionFactory 實例,并且會話工廠本身會綁定一個重要的屬性 Configuration 對象,在生產會話時,最終也會把 Configuration 配置對象傳遞并設置到會話 SqlSession 上。

Mybatis最硬核的API你知道幾個?

會話工廠可以簡單創建 SqlSession 實例:

  1. // 創建 SqlSession 實例 
  2. SqlSession session = sqlSessionFactory.openSession(); 

 會話工廠創建 SqlSession 時,會綁定數據源、事務處理、執行器等等,默認會話工廠實現類 DefaultSqlSessionFactory 在創建會話對象時,最終都會調用 openSessionFromDataSource 方法 ,即是如此實現:

  1. // 每一個 openSession 最終都會調用此處 
  2. private SqlSession openSessionFromDataSource( 
  3.     ExecutorType execType,  
  4.     TransactionIsolationLevel level,  
  5.     boolean autoCommit) { 
  6.     
  7.      
  8.     // 環境配置 
  9.     final Environment environment =  
  10.         configuration.getEnvironment(); 
  11.      
  12.     // 事務工廠 
  13.     final TransactionFactory transactionFactory =  
  14.         getTransactionFactoryFromEnvironment(environment); 
  15.      
  16.     // 事務 
  17.     Transaction tx = 
  18.         transactionFactory.newTransaction( 
  19.         environment.getDataSource(),  
  20.         level,  
  21.         autoCommit); 
  22.      
  23.     // 執行器 
  24.     final Executor executor =  
  25.         configuration.newExecutor(tx, execType); 
  26.      
  27.     // 最終生成會話 
  28.     return new DefaultSqlSession( 
  29.           configuration, executor, autoCommit); 
  30.      
  31.   } 

 另外,會話工廠其實提供了一系列接口來靈活生產會話 SqlSession,你可以指定:

  • 事務處理 :你希望在 session 作用域中使用/開啟事務作用域(也就是不自動提交事務),還是使用自動提交(auto-commit),sqlSession 默認不提交事務,對于增刪改操作時需要手動提交事務。
  • 數據庫連接 :你希望 MyBatis 幫你從已配置的數據源獲取連接,還是使用自己提供的連接,可以動態創建數據源對象 Connection。
  • 執行器類型 :你希望指定某類執行器來創建/執行/預處理語句,可以有普通執行器(SimpleExecutor),或復用執行器(ReuserExecutor)、還是批量執行器(BatchExecutor)等,下面介紹執行器時會詳細說明。
  • 事務隔離級別支持 :支持 JDBC 的五個隔離級別(NONE、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ 和 SERIALIZABLE),對于事務相關的內容,我們后續 《spring 系列全解》 會詳細講,這里簡單說明一下就是事務隔離級別主要為了解決例如臟讀、不可重復讀、幻讀等問題,使用不同的事務隔離級別勢必會導致不同的數據庫執行效率,因此我們再不同的系統/功能中,對隔離級別有不同的需求。
Mybatis最硬核的API你知道幾個?

SqlSessionFactory一旦被創建就應該在 應用的運行期間 一直存在,沒有任何理由丟棄它或重新創建另一個實例。 使用 SqlSessionFactory 的最佳實踐是在應用運行期間不要重復創建多次,多次重建 SqlSessionFactory 被視為一種代碼“壞習慣”。因此 SqlSessionFactory 的最佳作用域是 應用作用域 。 最簡單的就是使用單例模式或者靜態單例模式。

請記住,創建 SqlSessionFactory ,一次就好!

每個數據庫對應一個 SqlSessionFactory 實例。SqlSessionFactory 一旦被創建, 它的生命周期應該與應用的生命周期相同 。所以,如果你想連接兩個數據庫,就需要創建兩個 SqlSessionFactory 實例,每個數據庫對應一個;而如果是三個數據庫,就需要三個實例,依此類推。

Mybatis最硬核的API你知道幾個?

6、SqlSession – 會話

SqlSession 是一個接口,有兩個實現類:

  • DefaultSqlSession (默認實現)
  • SqlSessionManager (已棄用)

簡單來說,通過會話工廠構建出 SqlSession 實例之后,我們就可以進行增刪改查了,默認實例 DefaultSqlSession 提供了如此多的方法供用戶使用,有超過30個:

Mybatis最硬核的API你知道幾個?

sqlSession 的方法除了 CURD,還提供了事務的控制例如提交/關閉/回滾等、提供了配置對象的獲取例如 getConfiguration()、提供了批量語句的執行更新例如 flushStatements()、提供了緩存清除例如 clearCache() 、提供了映射器的使用 getMapper() 等等。

Mybatis最硬核的API你知道幾個?

對于客戶端應用層面來說,熟悉 sqlSession 的 API 基本就可以任意操作數據庫了,不過我們希望想進一步了解 sqlSession 內部是如何執行 sql 呢?其實 sqlSession 是 Mybatis 中用于和數據庫交互的 頂層類 ,通常將它與本地線程 ThreadLocal 綁定,一個會話使用一個 SqlSession,并且在使用完畢之后進行 關閉 。

之所以稱 SqlSession 為數據交互的 頂層類 ,是它其實沒有完成實質的數據庫操作。根據之前的架構設計流程我們已經清晰的知道,SqlSession 對數據庫的操作都會轉發給具體的執行器 Executor 來完成 ;當然執行器也是甩手掌柜,執行器 Executor 會再分派給語句處理器 StatementHandler ,語句處理器會結合參數處理器 ParameterHandler ,共同完成最終的數據庫執行處理操作(底層還是封裝了 JDBC Statement 操作)。并在每個語句處理器 StatementHandler 處理完成數據庫操作之后, 通過結果結處理器 ResultSetHandler 以及類型處理器 TypeHandler ,對底層 JDBC 返回的結果集進行映射封裝,最終才返回預期的封裝對象。

關注以下圖示 sqlSession 紅色高亮位置,詳細描述了會話的實際執行路徑:

Mybatis最硬核的API你知道幾個?

SqlSession 可以理解為一次數據庫會話,一次會話當中既可以執行一次 sql ,也允許你批量執行多次,但是一旦會話關閉之后想要再執行 sql,那就必須重新創建會話。

Mybatis最硬核的API你知道幾個?

每個線程都應該有它自己的 SqlSession 實例,SqlSession 的實例不是線程安全的,因此是不能被共享的,所以它的最佳的作用域是 請求(request)或方法(method) 作用域。 絕對不能將 SqlSession 實例的引用放在一個類的靜態域,甚至一個類的實例變量也不行。 也絕不能將 SqlSession 實例的引用放在任何類型的托管作用域中,比如 Servlet 框架中的 HttpSession。 如果你現在正在使用一種 Web 框架,考慮將 SqlSession 放在一個和 HTTP 請求相似的作用域中。 換句話說,每次收到 HTTP 請求,就可以打開一個 SqlSession,返回一個響應后,就關閉它。 這個關閉操作很重要,為了確保每次都能執行關閉操作,你應該把這個關閉操作放到 finally 塊中。

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-08-01 11:14:07

開源Api軟件

2024-08-21 08:54:35

2025-03-25 10:49:13

2024-03-01 13:48:00

Git配置系統

2021-11-04 11:54:30

Linux內存系統

2024-01-18 00:16:07

2021-10-12 09:20:02

數據庫SQL腳本

2021-02-27 17:13:21

前端代碼邏輯

2023-04-27 08:15:09

2023-10-31 08:23:54

網絡命令Linux

2022-04-13 10:05:48

網關Flowable事件訂閱

2022-06-04 08:29:27

awk命令BEGIN

2021-10-14 06:52:47

算法校驗碼結構

2024-04-15 00:04:00

APP開發

2023-11-26 00:26:00

2023-05-30 14:54:17

Python循環語句工具

2019-06-03 10:14:07

API網關微服務

2020-05-06 14:14:50

Linux依賴軟件

2025-07-11 01:45:00

API監控Spring

2018-04-26 09:03:48

ApacheWeb服務器
點贊
收藏

51CTO技術棧公眾號

91免费视频网| 欧美日韩视频一区二区三区| 91精品国产一区二区三区香蕉| 日韩亚洲欧美一区二区| 无码国产伦一区二区三区视频 | 久久久久国产精品免费| 精品无码人妻一区| 精品中文在线| 一本色道久久综合亚洲精品按摩| 椎名由奈jux491在线播放| 亚洲 美腿 欧美 偷拍| 久久se这里有精品| 性色av一区二区咪爱| 我要看一级黄色录像| 另类在线视频| 欧美一区二区三区不卡| 欧美牲交a欧美牲交aⅴ免费下载| 成年人网站在线| 91亚洲永久精品| 亚洲伊人一本大道中文字幕| www.com亚洲| 韩日在线一区| 久久精品在线播放| xxx在线播放| 精品国产影院| 日韩欧美二区三区| 国产福利精品一区二区三区| 成人va天堂| 午夜欧美视频在线观看| 成人短视频在线看| 91网在线播放| 久久奇米777| 国产亚洲精品久久飘花| www.天堂在线| 国产综合久久久久久鬼色| 国产精品免费一区豆花| 国产区在线观看视频| 伊人久久亚洲影院| 欧美极品少妇xxxxⅹ裸体艺术| 911国产在线| 欧美日韩在线二区| 伊人伊成久久人综合网小说| 日本xxx在线播放| 久久人人爽人人爽人人片av不| 欧美精品黄色| 国产福利精品导航| 国产精品99久久久久久久久久久久| 日韩精品一卡二卡| 在线欧美福利| 午夜精品久久久久久久白皮肤| 免费在线观看日韩| 中文字幕人成人乱码| 久久精品这里热有精品| 午夜免费激情视频| 中文字幕一区二区三区欧美日韩 | 免费av一区二区三区| 欧美熟妇交换久久久久久分类 | 免费观看在线综合色| 国产精品精品国产| 亚洲国产无线乱码在线观看| 日本最新不卡在线| 国产美女直播视频一区| 国产又爽又黄又嫩又猛又粗| 韩国毛片一区二区三区| 96国产粉嫩美女| 香蕉影院在线观看| 美女一区二区视频| 91传媒视频在线观看| 性欧美videos另类hd| proumb性欧美在线观看| 欧美日韩成人一区二区三区| 国产一区二区影视| 综合久久一区二区三区| 日韩欧美一级在线| 国产极品在线观看| 欧美无人高清视频在线观看| 青青草原播放器| 高潮按摩久久久久久av免费| 日韩av在线免播放器| 天天躁夜夜躁狠狠是什么心态| 欧美电影一区| 午夜精品视频在线| 波多野结衣影片| 国产毛片精品视频| 久久精品国产第一区二区三区最新章节 | 中文在线资源观看网站视频免费不卡| 一区二区视频在线观看| 2021中文字幕在线| 在线免费亚洲电影| 粗大的内捧猛烈进出视频| 欧美成人午夜77777| 国产一区二区三区在线看| 欧美人与禽zozzo禽性配| 亚洲永久字幕| 91深夜福利视频| 日韩有码电影| 亚洲欧美日韩在线| 日本久久久精品视频| 日本黄色成人| 亚洲免费av网址| 九九热最新地址| 巨乳诱惑日韩免费av| 国产综合色香蕉精品| 外国精品视频在线观看 | 1024精品久久久久久久久| 91av视频在线播放| 国产偷拍一区二区| 欧美激情一区二区三区四区| 韩日视频在线观看| 国产精品黄色片| 亚洲国语精品自产拍在线观看| 亚洲二区在线播放| 日韩国产精品久久久久久亚洲| 国产超碰91| 久久bbxx| 欧美性受xxxx| 国产精品无码永久免费不卡| 欧美日韩国产综合网| 国产欧美一区二区三区久久人妖| 日韩精品视频无播放器在线看 | 希岛爱理av免费一区二区| 久久国产精品视频| 在线观看中文字幕2021| 久久午夜色播影院免费高清 | 日韩欧美中文字幕视频| 青青草原综合久久大伊人精品优势| 国产亚洲欧美一区二区三区| 在线中文字幕电影| 67194成人在线观看| 欧美aaa级片| 久久亚洲电影| 欧美精品中文字幕一区二区| jizzjizz中国精品麻豆| 日韩欧美在线综合网| 欧美xxxooo| 麻豆精品在线播放| 亚洲人成网站在线观看播放| 最新日韩一区| 在线午夜精品自拍| 中文人妻熟女乱又乱精品| 国产午夜精品一区二区三区嫩草| www.com毛片| 色狠狠久久av综合| 欧美一级视频免费在线观看| 偷拍精品一区二区三区| 欧美性jizz18性欧美| 国产又黄又粗又猛又爽的视频| 在线亚洲自拍| 久久久一本精品99久久精品66 | jizzjizz亚洲| 欧美一区二区视频免费观看| 欧美做爰爽爽爽爽爽爽| 国产乱国产乱300精品| 妞干网这里只有精品| 最新国产精品精品视频| 高清欧美性猛交xxxx黑人猛交| 懂色av蜜臀av粉嫩av分享吧| 婷婷久久综合九色综合绿巨人 | 亚洲欧洲av色图| 欧美xxxxxbbbbb| 在线日韩电影| 久久亚洲免费| 成人在线免费| 亚洲天堂网在线观看| 亚洲一级在线播放| 亚洲乱码国产乱码精品精98午夜| 好吊操视频这里只有精品| 一区二区亚洲精品| 欧美日韩一区综合| 欧美黄色a视频| 欧美区在线播放| 性xxxx视频| 欧洲视频一区二区| 全程偷拍露脸中年夫妇| www..com久久爱| 最近中文字幕一区二区| 欧美日韩国产欧| 日韩精品福利视频| 国产精品中文| 欧美一级免费看| 幼a在线观看| 精品久久久久久久久久久院品网 | 日本网站免费观看| 国产日韩欧美a| av地址在线观看| 亚洲专区一区| 可以在线看黄的网站| 婷婷精品视频| 91深夜福利视频| 大胆人体一区二区| 欧美成人精品xxx| 欧美日韩伦理片| 日韩精品一区二区三区中文不卡 | 新版中文在线官网| 亚洲欧美日韩中文视频| 国产免费无遮挡| 日韩欧美国产成人| 欧美激情图片小说| 久久久午夜精品| 95视频在线观看| 久久精品国产一区二区三区免费看| 亚洲精品久久久久久久蜜桃臀| 久久视频精品| 蜜桃传媒视频麻豆一区| 亚洲精品一区二区三区在线| 国产成人综合av| 国产社区精品视频| 久久av在线看| 成年人免费在线视频| 亚洲黄色av女优在线观看| www.蜜桃av.com| 欧美丰满少妇xxxxx高潮对白| 久久久久久久黄色片| 一区二区在线观看免费| 欧美人与禽zoz0善交| 2023国产精品| 国产69视频在线观看| 国产一区二区三区不卡在线观看| 爱情岛论坛成人| 麻豆9191精品国产| 无码中文字幕色专区| 91成人免费| 一区不卡视频| 青青草综合网| 日韩精品久久久| 久久不见久久见国语| 国内视频一区二区| 国产精品男女| 国精产品99永久一区一区| 亚洲一区网址| 99久久伊人精品影院| 免费欧美网站| 亚洲一区二区久久久久久久| 深夜福利亚洲| 国产专区欧美专区| 91精品国产自产观看在线| 国产精品私拍pans大尺度在线| 欧美黑人粗大| 国产成人涩涩涩视频在线观看| 深夜成人在线| 热门国产精品亚洲第一区在线| 天堂中文av在线资源库| 奇米一区二区三区四区久久| 九色porny丨首页入口在线| 午夜精品久久久久久久久久久久| 九色porny自拍视频在线播放| 国外视频精品毛片| 6699嫩草久久久精品影院| 久久久久亚洲精品| 97蜜桃久久| 欧美在线视频一区| 国产亚洲一区二区手机在线观看| 国产精品偷伦视频免费观看国产| 久久人体av| 成人伊人精品色xxxx视频| 免费观看性欧美大片无片| 粉嫩精品一区二区三区在线观看| 亚洲性视频在线| 精品一区二区日本| 国产探花一区在线观看| 亚洲电影免费| 精品国产99久久久久久宅男i| 欧美日韩一区二区三区视频播放| 一区二区日韩av| 色一情一交一乱一区二区三区| 国产欧美一区二区在线观看| 精品伦精品一区二区三区视频密桃| 国产精品色一区二区三区| 娇小11一12╳yⅹ╳毛片| 亚洲精品乱码久久久久久久久| 国产在线综合网| 色视频成人在线观看免| 一级久久久久久久| 欧美不卡一区二区| 男操女在线观看| 久久精品国产2020观看福利| 大香伊人久久| 国产精品青青在线观看爽香蕉| 国产精品一区免费在线| 精品视频一区二区三区四区| 精品久久久中文字幕| 中文字幕欧美日韩一区二区三区| 狠狠久久婷婷| 国产av人人夜夜澡人人爽| 紧缚奴在线一区二区三区| 无码人妻精品一区二区三| 久久久久免费观看| 久久久久久久久毛片| 黑人巨大精品欧美一区免费视频| 91丨九色丨海角社区| 日韩亚洲欧美中文三级| 欧美精品久久久久久久久久丰满| 久久中文字幕在线视频| 国产免费不卡| 国产传媒一区二区| 日韩精品电影| 国产原创popny丨九色| 九色综合狠狠综合久久| 中出视频在线观看| 亚洲男同1069视频| 无码一区二区三区| 精品日韩av一区二区| 国产毛片在线| 国语自产在线不卡| 国产精品亚洲一区二区在线观看| 欧美亚洲丝袜| 怡红院精品视频在线观看极品| 97超碰人人爽| 久久久综合激的五月天| 欧美黄色一级网站| 欧美老肥妇做.爰bbww| 黄色小视频在线观看| 欧美日韩国产成人在线| 国产亚洲人成a在线v网站 | 天堂av一区二区三区在线播放| 做爰高潮hd色即是空| 日韩av在线发布| 狠狠人妻久久久久久综合蜜桃| 一区二区在线观看视频| 91久久国语露脸精品国产高跟| 国产香蕉精品视频一区二区三区| 国产网站在线| 国产一区二区在线网站| 欧美三级视频| 伊人av在线播放| 亚洲欧美日韩中文字幕一区二区三区| 亚洲综合精品在线| 国产亚洲欧美一区| 精品欧美日韩精品| 日韩久久久久久久| 久久精品一区二区三区中文字幕| 一本加勒比波多野结衣| 亚洲大型综合色站| 亚洲男人天堂久久| 欧美激情精品久久久| 成人午夜网址| 国产a级片网站| 成人美女视频在线观看18| 美女视频黄免费| 欧美大片一区二区| 免费在线国产视频| 国产成人免费电影| 一本色道久久精品| 粉嫩av懂色av蜜臀av分享| 亚洲不卡在线观看| 免费看黄色一级视频| 午夜精品福利在线观看| 精品av导航| 国产欧美在线一区| 久久精品综合网| 中文字幕欧美色图| 久久国产一区二区三区| 久久久精品区| 成人免费播放器| 91丨国产丨九色丨pron| 亚洲欧美一区二区三区在线观看| 亚洲午夜性刺激影院| 国产精品诱惑| 中国一级黄色录像| 国产成人精品一区二区三区四区| 久久精品国产亚洲av香蕉| 日韩av一区在线| 精品视频在线一区二区在线| 亚洲欧美日韩另类精品一区二区三区 | 色噜噜久久综合| 77导航福利在线| 3d动漫精品啪啪一区二区三区免费| 亚洲性视频h| 性高潮久久久久久久| 欧美老年两性高潮| av中文在线资源库| 日日夜夜精品网站| 国产精品99久久久久久似苏梦涵| 国产精品111| 在线观看日韩专区| 亚洲精品在线播放| avav在线看| 亚洲人亚洲人成电影网站色| 好吊色一区二区| 国产精品成人av在线| 欧美成人久久| 中文字幕在线观看免费高清| 91精品国产综合久久福利软件| 日本在线播放一二三区| 亚洲图片都市激情| gogo大胆日本视频一区| 亚洲熟女乱色一区二区三区久久久| 久久伊人91精品综合网站| 偷拍亚洲精品| 五月天六月丁香| 色综合久久综合网97色综合| 成年人黄视频在线观看| 六月婷婷久久| 国产麻豆91精品| 波多野结衣在线观看一区| 欧美激情一区二区三区高清视频| 精品国产一区一区二区三亚瑟 | a在线观看免费| 国产成人一区二区三区电影| 国产精品扒开腿做爽爽爽软件|