国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

MyBatis框架中Executor執(zhí)行器的使用及說明

 更新時間:2025年11月11日 08:54:12   作者:探索java  
文章詳細(xì)介紹了MyBatis的Executor執(zhí)行器,包括其定義、作用、生命周期、四種可選執(zhí)行器類型(SIMPLE、REUSE、BATCH、CachingExecutor)以及它們在執(zhí)行鏈路中的協(xié)作關(guān)系,文章還討論了插件機制、緩存機制、事務(wù)管理以及常見誤區(qū)澄清等內(nèi)容

1. Executor 概述

1.1 定義與作用邊界

Executor 是 MyBatis 的“執(zhí)行引擎”:負(fù)責(zé)把 Mapper 層的增刪改查請求(MappedStatement + 參數(shù))轉(zhuǎn)換為底層 JDBC 調(diào)用,并協(xié)調(diào)參數(shù)處理、語句準(zhǔn)備/復(fù)用結(jié)果集映射、事務(wù)與緩存等一系列環(huán)節(jié)。

官方文檔把可選執(zhí)行器類型歸納為三種:SIMPLE / REUSE / BATCH;此外還有一個用于二級緩存的裝飾器 CachingExecutor(默認(rèn)在開啟緩存時包裹在外層)。

  • SIMPLE:每次執(zhí)行都創(chuàng)建新的 PreparedStatement。
  • REUSE:復(fù)用 PreparedStatement,減少反復(fù) prepare 的成本。
  • BATCH:緩存多條更新語句并按批發(fā)給數(shù)據(jù)庫,以減少網(wǎng)絡(luò)往返與驅(qū)動開銷。
  • CachingExecutor(裝飾器):在外部包裹具體執(zhí)行器,先查緩存、命中則返回,未命中再委派給內(nèi)部執(zhí)行器并寫入緩存。

與協(xié)作組件

Executor 不直接做 SQL 拼裝與參數(shù)設(shè)置,它與以下三大處理器協(xié)作:

  • StatementHandler:負(fù)責(zé) Statement 的創(chuàng)建/參數(shù)化/執(zhí)行(prepare/parameterize/query/update/batch)。
  • ParameterHandler:把實參按映射規(guī)則設(shè)置到 JDBC PreparedStatement。
  • ResultSetHandler:把 JDBC ResultSet 映射為目標(biāo)對象(列表/游標(biāo)等)。

插件機制允許攔截以上四類對象(含 Executor 本身),切入點包括 Executor.update/query/flushStatements/commit/rollback,以及 Statement/Parameter/ResultSet 的關(guān)鍵方法。

圖 1(文字版)

SqlSession → Executor(可能被 CachingExecutor 包裹) → StatementHandler → JDBC

配套處理器:ParameterHandler(入?yún)ⅲ┡c ResultSetHandler(出參)。

1.2 生命周期:從openSession到close

  • 創(chuàng)建SqlSessionFactory.openSession()Configuration.newExecutor(ExecutorType)。若開啟二級緩存,Configuration 會用 CachingExecutor 包裹真實執(zhí)行器(SIMPLE/REUSE/BATCH)。
  • 使用:通過 SqlSession 發(fā)起 select/insert/update/delete,內(nèi)部委派給 Executor 的 query/update 等方法。
  • 提交/回滾SqlSession.commit/rollback → Executor 同名方法,進而驅(qū)動 Transaction。
  • 關(guān)閉SqlSession.close → Executor.close,釋放語句句柄與連接資源。
  • 緩存清理flushStatements/commit/close 等關(guān)鍵點會觸發(fā)行緩沖及(在適用時)緩存提交/清空。關(guān)于裝飾器與事務(wù)性緩存,請注意二級緩存采用事務(wù)性緩沖(TransactionalCache),在 commit 時才“生效可見”。

示例:mybatis-config.xml 設(shè)置默認(rèn) Executor 類型

<!-- 1.2.1 默認(rèn)執(zhí)行器類型(不顯式指定時默認(rèn) SIMPLE) -->
<configuration>
  <settings>
    <setting name="defaultExecutorType" value="REUSE"/>
    <!-- 是否啟用二級緩存;默認(rèn) true,會讓 Configuration 用 CachingExecutor 包裹實際執(zhí)行器 -->
    <setting name="cacheEnabled" value="true"/>
  </settings>
</configuration>

defaultExecutorType 字面含義即“默認(rèn)執(zhí)行器類型”。SIMPLE/REUSE/BATCH 三選一;SIMPLE 為默認(rèn)。

1.3 執(zhí)行鏈路總覽(含簡化源碼走讀)

以一次查詢?yōu)槔ㄊ÷圆寮c動態(tài) SQL 細(xì)節(jié)):

  1. SqlSession.selectList → 調(diào)用 Executor.query。
  2. Executor 內(nèi)部創(chuàng)建 RoutingStatementHandler,它會根據(jù) StatementType 路由到 PreparedStatementHandler/SimpleStatementHandler/CallableStatementHandler。
  3. StatementHandler.prepare:從連接上創(chuàng)建/復(fù)用 PreparedStatementparameterize:由 ParameterHandler 對參數(shù)進行綁定。
  4. 執(zhí)行 SQL,得到 ResultSet,交由 ResultSetHandler 映射到目標(biāo)對象。
  5. 若啟用二級緩存,外層 CachingExecutor 會先嘗試讀緩存、未命中則委派到真實執(zhí)行器,并在查詢完成后把結(jié)果寫入緩存(但須等待事務(wù)提交后才對其他會話可見)。

源碼錨點(便于你后續(xù)第 8 章逐行解析)

  • Configuration#newExecutor:創(chuàng)建具體執(zhí)行器并在需要時包裹 CachingExecutor。
  • BaseStatementHandler:聚合 ParameterHandler/ResultSetHandler,定義 prepare/parameterize 流程。
  • RoutingStatementHandler:按語句類型選擇具體 StatementHandler。

1.4 Executor 類型一覽與差異定位

SIMPLE

  • 策略:每次執(zhí)行都新建 PreparedStatement,執(zhí)行完即關(guān)閉。
  • 優(yōu)點:語義最直觀、資源生命周期簡單、不易踩坑。
  • 代價:頻繁的 prepare / close;在高 QPS 或同 SQL 重復(fù)執(zhí)行場景偏貴。
  • 官方說明“does nothing special”,適合作為默認(rèn)。

REUSE

  • 策略:復(fù)用 PreparedStatement,通常按 SQL 文本作為 key 管理。
  • 優(yōu)點:降低多次相同 SQL 的準(zhǔn)備/關(guān)閉開銷;和數(shù)據(jù)庫/驅(qū)動的 statement cache 形成互補。
  • 注意:復(fù)用需要謹(jǐn)慎處理參數(shù)與游標(biāo)、及時清理;跨事務(wù)復(fù)用與連接切換均需遵守 MyBatis/連接池策略。官方文檔的定義非常直接:will reuse PreparedStatements。

BATCH

  • 策略:聚合多條 DML(INSERT/UPDATE/DELETE),走 JDBC 的 addBatch/executeBatch。
  • 收益:減少網(wǎng)絡(luò)往返、驅(qū)動編解碼、服務(wù)器解析次數(shù);批量寫多時優(yōu)勢顯著。
  • 限制:批間穿插 SELECT 會觸發(fā)必要的 flush;錯誤處理為批量異常;部分?jǐn)?shù)據(jù)庫/驅(qū)動對批量回填主鍵、批量大小有約束。

CachingExecutor(裝飾器)

  • 策略:當(dāng)全局 cacheEnabled=true 或 Mapper 聲明 <cache/> 時,外層包裹 CachingExecutor;其 query 先讀二級緩存、未命中再委派并寫回。
  • 邊界:二級緩存為 SqlSessionFactory 級別,提交時生效;flushCache/DML/事務(wù)邊界會使其失效。

1.5 與 SqlSession / Transaction 的協(xié)作關(guān)系

  • SqlSession 是應(yīng)用的門面;selectList/insert/update/delete 最終委派給 Executor 的 query/update。
  • Transaction:Executor 持有事務(wù)(通常由數(shù)據(jù)源/容器如 Spring 管理),commit/rollback/close 向下驅(qū)動真正的連接提交/回滾。
  • 緩存與事務(wù):二級緩存采用事務(wù)性緩沖(TransactionalCache),在 commit 之前其他會話不可見;rollback 會丟棄本地緩沖。

1.6 插件(Interceptor)在執(zhí)行鏈中的位置

MyBatis 允許對 Executor / StatementHandler / ParameterHandler / ResultSetHandler 四類對象進行插件攔截。

你可以在 Executor.update/query/flushStatements/commit/rollback,以及語句準(zhǔn)備/參數(shù)綁定/結(jié)果處理等節(jié)點切入做審計、限流、脫敏等。

官方在 configuration#plugins 一節(jié)列出了所有可攔截方法。

小提示:多個攔截器按注冊順序形成代理鏈,常見的“執(zhí)行順序不符合預(yù)期”往往與注冊順序有關(guān)(見社區(qū)討論)。

1.7 常見誤區(qū)澄清(FAQ)

  • “DefaultExecutor” 是哪個類?

MyBatis 沒有名為 DefaultExecutor 的類。所謂“默認(rèn)執(zhí)行器”是指 Configuration.newExecutor 按配置選擇 SIMPLE/REUSE/BATCH,并在需要時用 CachingExecutor 包裹。

  • 開啟二級緩存一定更快嗎?

不一定。命中率、結(jié)果集大小、序列化成本、失效頻率都會影響收益;官方生態(tài)也提供 Ehcache 等二級緩存適配,但要結(jié)合業(yè)務(wù)讀寫比評估。

  • 為何默認(rèn)不是 BATCH?

批處理需要更復(fù)雜的錯誤處理與刷批時機,語義不如 SIMPLE 直觀,因此默認(rèn)選擇 SIMPLE 更安全、可預(yù)測。

1.8 迷你代碼示例(感知執(zhí)行鏈)

// 1.8.1 通過 ExecutorType 顯式選擇執(zhí)行器(覆蓋全局 defaultExecutorType)
try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.REUSE)) {
  List<User> users = session.selectList("demo.UserMapper.selectByStatus", "ACTIVE");
  session.commit(); // 觸發(fā) Executor.commit -> Transaction.commit,并影響二級緩存可見性
}

結(jié)合上文,你可以在日志里觀察到:SqlSessionExecutor.queryStatementHandler.prepare/parameterize/queryResultSetHandler 的調(diào)用軌跡。

1.9 小練習(xí)(檢查與鞏固)

如果把 defaultExecutorType 改為 BATCH,但在一次業(yè)務(wù)流程里先 insertselect,會發(fā)生什么?為什么很多時候會看到一次“刷批”?(提示:批間 SELECT 的語義與一致性)

在開啟二級緩存后,同一個 SqlSessionFactory 下兩個不同的 SqlSession 連續(xù)做相同的只讀查詢,第二次是否一定命中緩存?在哪個時間點之后才會對另一個會話可見?(提示:TransactionalCache)

想實現(xiàn)“給所有更新語句自動追加租戶條件”的審計需求,你會攔截 Executor 還是 StatementHandler?各有什么利弊?(提示:插件切點與 SQL 重寫時機)

本章小結(jié)

Executor 是 MyBatis 的執(zhí)行核心,SIMPLE/REUSE/BATCH 是“行為策略”,CachingExecutor 是“緩存裝飾器”。

SqlSession → Executor → StatementHandler → JDBC 的鏈路上,ParameterHandlerResultSetHandler 分別負(fù)責(zé)參數(shù)綁定與結(jié)果映射;插件可在多個關(guān)鍵方法處攔截。

生命周期圍繞 openSession/commit/rollback/close 展開;二級緩存采用事務(wù)性緩沖,在提交時才對其他會話可見。

2. BaseExecutor 與子類關(guān)系

2.1 繼承結(jié)構(gòu)與角色定位

在 MyBatis 的 org.apache.ibatis.executor 包下,Executor 是頂層接口,而 BaseExecutor 則是它的抽象基類,實現(xiàn)了通用的事務(wù)、緩存、生命周期管理邏輯。

繼承結(jié)構(gòu)(簡化版 UML 文字描述)

Executor (接口)
   ↑
BaseExecutor (抽象類)
   ├─ SimpleExecutor
   ├─ ReuseExecutor
   └─ BatchExecutor
  • Executor(接口)

定義了統(tǒng)一的執(zhí)行方法:updatequery、flushStatements、commit、rollbackclose 等。

  • BaseExecutor(抽象類)

實現(xiàn)了除“具體執(zhí)行 SQL”之外的大部分公共邏輯,例如事務(wù)管理、一級緩存(localCache)、延遲加載等。保留了兩個核心抽象方法 doUpdatedoQuery,交由子類決定具體的 Statement 生成與執(zhí)行策略。

  • SimpleExecutor

每次都新建 PreparedStatement 執(zhí)行,執(zhí)行完即關(guān)閉。

  • ReuseExecutor

通過緩存 Statement 來復(fù)用,減少創(chuàng)建/關(guān)閉的開銷。

  • BatchExecutor

聚合多條更新語句到批處理隊列中,調(diào)用 addBatchexecuteBatch

補充:CachingExecutor 不在這個繼承鏈上,它是對 Executor 的裝飾器(Decorator),通過組合持有一個 Executor 實例。

2.2 BaseExecutor 的核心屬性

源碼位置(3.5.9):org.apache.ibatis.executor.BaseExecutor

public abstract class BaseExecutor implements Executor {

  protected Transaction transaction;
  protected Executor wrapper;
  protected ConcurrentLinkedQueue<DeferredLoad> deferredLoads;
  protected PerpetualCache localCache;
  protected PerpetualCache localOutputParameterCache;
  protected Configuration configuration;

  private boolean closed;
  private boolean wrapperSet;
}

關(guān)鍵成員解釋

  • transaction:持有的事務(wù)對象,封裝了 JDBC Connection。
  • localCache:一級緩存,PerpetualCache + CacheKey 組合,用來緩存查詢結(jié)果。
  • localOutputParameterCache:用于存儲存儲過程的輸出參數(shù)緩存(CallableStatement)。
  • deferredLoads:延遲加載隊列,配合懶加載功能。
  • wrapper:當(dāng) Executor 被插件或 CachingExecutor 包裹時,wrapper 指向最外層代理。

2.3 模板方法骨架

BaseExecutor 對外暴露的 update、query 等方法,都遵循模板方法模式(Template Method):

  • 公共邏輯由父類實現(xiàn)
  • 具體 SQL 執(zhí)行細(xì)節(jié)交給子類實現(xiàn)的 doUpdate / doQuery

update 為例

@Override
public int update(MappedStatement ms, Object parameter) throws SQLException {
  if (closed) {
    throw new ExecutorException("Executor was closed.");
  }
  clearLocalCache(); // 寫操作清空一級緩存
  return doUpdate(ms, parameter); // 具體執(zhí)行邏輯由子類完成
}

query 為例(部分關(guān)鍵邏輯):

@Override
public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds,
                         ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {
  if (closed) {
    throw new ExecutorException("Executor was closed.");
  }
  if (queryStack == 0 && ms.isFlushCacheRequired()) {
    clearLocalCache();
  }
  List<E> list = localCache.getObject(key); // 一級緩存命中
  if (list != null) {
    return list;
  }
  list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql); // 交由子類執(zhí)行
  localCache.putObject(key, list); // 緩存結(jié)果
  return list;
}

觀察點doUpdate / doQuery 在父類中是抽象方法,SimpleExecutor、ReuseExecutor、BatchExecutor 會根據(jù)策略選擇是立即執(zhí)行、復(fù)用 Statement、還是批量緩沖。

2.4 flushStatements 機制

BaseExecutor 定義了 flushStatements 模板方法,用于將緩存的語句批量提交到數(shù)據(jù)庫,默認(rèn)返回空列表,由子類(尤其是 BatchExecutor)重寫。

@Override
public List<BatchResult> flushStatements() throws SQLException {
  return flushStatements(false);
}

public List<BatchResult> flushStatements(boolean isRollback) throws SQLException {
  return Collections.emptyList(); // Simple/Reuse 默認(rèn)實現(xiàn)無操作
}

BatchExecutor 中,這個方法會遍歷批處理隊列調(diào)用 executeBatch,并生成 BatchResult 列表。

2.5 子類的差異實現(xiàn)點

方法SimpleExecutorReuseExecutorBatchExecutor
doUpdate每次新建 Statement 并執(zhí)行從緩存中查找 Statement,無則新建將 Statement 添加到批處理隊列
doQuery每次新建 Statement 并查詢復(fù)用緩存中的 Statement先刷批(如必要),再執(zhí)行查詢
flushStatements空實現(xiàn)(直接返回空列表)空實現(xiàn)遍歷隊列執(zhí)行 executeBatch

2.6 與 CachingExecutor 的關(guān)系

BaseExecutor 本身只管理一級緩存(作用域為 SqlSession)。

當(dāng)開啟二級緩存時,Configuration.newExecutor 會用 CachingExecutor 包裹真實 Executor,優(yōu)先檢查二級緩存,未命中則調(diào)用 BaseExecutor.query 執(zhí)行并寫入緩存。

public Executor newExecutor(Transaction transaction, ExecutorType executorType) {
  Executor executor = ... // 選擇 Simple/Reuse/Batch
  if (cacheEnabled) {
    executor = new CachingExecutor(executor);
  }
  return (Executor) interceptorChain.pluginAll(executor);
}

2.7 場景化示例

示例:手動選擇 ExecutorType

try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.REUSE)) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    mapper.insertUser(new User(...));
    mapper.insertUser(new User(...)); // 可能復(fù)用 Statement
    session.commit();
}

如果換成 ExecutorType.BATCH,兩個 insert 會進入批處理隊列,一次 commit 時批量提交。

2.8 小結(jié)與對比

BaseExecutor 提供了事務(wù)、緩存、延遲加載等公共功能,并通過模板方法模式讓子類只關(guān)心具體 Statement 的使用策略。

Simple/Reuse/Batch 只是策略不同,但對外 API 一致,這使得它們可以被透明替換。

一級緩存是 BaseExecutor 自帶的,二級緩存需要 CachingExecutor 配合。

flushStatements 對 BatchExecutor 尤其重要,因為它是批量發(fā)送 SQL 的唯一觸發(fā)點。

第 3 章:SimpleExecutor 執(zhí)行流程與 JDBC 流程圖

3.1 執(zhí)行流程概覽

SimpleExecutor 的核心職責(zé):

  • 每次 SQL 都新建 Statement(PreparedStatement 或 CallableStatement)。
  • 執(zhí)行完成后立即關(guān)閉 Statement。
  • 支持一級緩存和延遲加載邏輯(繼承自 BaseExecutor)。

模板方法中關(guān)鍵方法:

  • update(MappedStatement, Object) → 調(diào)用 doUpdate
  • query(MappedStatement, Object, RowBounds, ResultHandler, BoundSql) → 調(diào)用 doQuery

3.2 doUpdate 核心邏輯(簡化)

@Override
public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
    Statement stmt = null;
    try {
        Configuration configuration = ms.getConfiguration();
        stmt = prepareStatement(ms.getSqlSource().getBoundSql(parameter), ms.getStatementType());
        return stmt.executeUpdate();
    } finally {
        closeStatement(stmt);
    }
}
  • prepareStatement:封裝了 connection.prepareStatement(sql),設(shè)置超時、fetchSize、參數(shù)等。
  • executeUpdate:執(zhí)行 INSERT/UPDATE/DELETE。
  • closeStatement:關(guān)閉 Statement,釋放 JDBC 資源。

3.3 doQuery 核心邏輯(簡化)

@Override
public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds,
                           ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
    Statement stmt = null;
    try {
        stmt = prepareStatement(boundSql, ms.getStatementType());
        stmt.execute(); // 執(zhí)行查詢
        return handleResultSets(stmt); // 將 ResultSet 轉(zhuǎn)成 List<E>
    } finally {
        closeStatement(stmt);
    }
}
  • stmt.execute() → 返回 ResultSet
  • handleResultSets → 將 ResultSet 封裝成 List<Map> 或?qū)嶓w對象
  • finally 保證 Statement 被關(guān)閉

3.4 JDBC 流程圖(SimpleExecutor 視角)

+-----------------+
|  SqlSession     |
+-----------------+
        |
        v
+-----------------+
|  BaseExecutor   |  ← 事務(wù)管理、一級緩存、延遲加載
+-----------------+
        |
        v
+-----------------+
|  SimpleExecutor |
+-----------------+
        |
        v
+--------------------------+
| JDBC Connection (conn)   |
+--------------------------+
        |
        v
+--------------------------+
| PreparedStatement (stmt) |
+--------------------------+
        |
        v
+--------------------------+
| execute() / executeUpdate|
+--------------------------+
        |
        v
+--------------------------+
| ResultSet (查詢結(jié)果)      |
+--------------------------+
        |
        v
+--------------------------+
| handleResultSets()       |
+--------------------------+
        |
        v
+--------------------------+
| List<E> 返回給調(diào)用方     |
+--------------------------+
        |
        v
+--------------------------+
| closeStatement(stmt)     |
+--------------------------+

說明

  • 每次 SQL 都會生成新的 PreparedStatement。
  • 查詢結(jié)果通過 handleResultSets 轉(zhuǎn)成 List<E>。
  • Statement 執(zhí)行完成后立即關(guān)閉,Connection 由事務(wù)管理控制。

3.5 小結(jié)

  • SimpleExecutor 每次執(zhí)行都新建 Statement,因此開銷較大,但邏輯簡單、無副作用。
  • JDBC 流程:SqlSession → BaseExecutor(事務(wù)/緩存) → SimpleExecutor → Connection → Statement → ResultSet → handleResultSets → 返回結(jié)果 → 關(guān)閉 Statement。
  • 這個流程是理解 ReuseExecutor、BatchExecutor 的基礎(chǔ):它們在這個基礎(chǔ)上優(yōu)化 Statement 重用或批處理。
+----------------------+
|       SqlSession     |
|  (Executor 調(diào)用入口) |
+----------------------+
            |
            v
+----------------------+
|     BaseExecutor     |
| - 一級緩存管理       |
| - 延遲加載處理       |
+----------------------+
            |
            |  查詢前先檢查一級緩存
            |---------------------------+
            |                           |
            v                           |
   +----------------+                   |
   | Cache 命中?    |---是---> 返回緩存數(shù)據(jù)
   +----------------+                   |
            |否                         |
            v                           |
+----------------------+
|   SimpleExecutor     |
| - prepareStatement   |
| - 參數(shù)設(shè)置           |
+----------------------+
            |
            v
+----------------------+
|  JDBC Connection      |
+----------------------+
            |
            v
+----------------------+
| PreparedStatement    |
| - execute() / executeUpdate() |
+----------------------+
            |
            v
+----------------------+
| ResultSet            |
+----------------------+
            |
            v
+----------------------+
| handleResultSets()   |
| - 轉(zhuǎn)實體/Map         |
+----------------------+
            |
            v
+----------------------+
| 一級緩存存儲結(jié)果      |
+----------------------+
            |
            v
+----------------------+
| 延遲加載(如存在)    |
| - 延遲代理對象        |
+----------------------+
            |
            v
+----------------------+
| 返回結(jié)果 List<E>      |
+----------------------+
            |
            v
+----------------------+
| closeStatement()      |
+----------------------+

4. ReuseExecutor詳解

在MyBatis中,ReuseExecutor是繼承自BaseExecutor的一個特殊執(zhí)行器,它的核心特點是復(fù)用PreparedStatement,以減少JDBC創(chuàng)建Statement對象的開銷,提升數(shù)據(jù)庫操作效率,尤其適合頻繁執(zhí)行同一SQL但參數(shù)不同的場景。

4.1 ReuseExecutor的設(shè)計理念與適用場景

設(shè)計理念
MyBatis在執(zhí)行SQL時,默認(rèn)每次操作都會創(chuàng)建新的PreparedStatement,這在高并發(fā)或批量操作中會產(chǎn)生較大性能開銷。ReuseExecutor通過緩存Statement對象并在下一次執(zhí)行相同SQL時復(fù)用,避免重復(fù)創(chuàng)建,提高性能。

適用場景

  • 高頻次執(zhí)行同一條SQL的業(yè)務(wù)邏輯(如批量更新同一表的不同記錄)。
  • 數(shù)據(jù)庫連接頻繁切換或?qū)tatement創(chuàng)建開銷敏感的場景。
  • 需要在事務(wù)內(nèi)執(zhí)行多條相同SQL但參數(shù)不同的操作。

注意:ReuseExecutor并非真正的批處理,它不會將多條SQL合并成一次JDBC批量提交。批量優(yōu)化應(yīng)使用BatchExecutor。

4.2 ReuseExecutor源碼結(jié)構(gòu)

ReuseExecutor繼承自BaseExecutor

public class ReuseExecutor extends BaseExecutor {
    private final Map<String, PreparedStatement> statementMap = new HashMap<>();
    
    public ReuseExecutor(Transaction transaction, Executor wrapper) {
        super(transaction, wrapper);
    }
    
    @Override
    public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
        PreparedStatement ps = prepareStatement(ms.getSqlSource().getBoundSql(parameter));
        return ps.executeUpdate();
    }

    @Override
    public <E> List<E> doQuery(MappedStatement ms, Object parameter,
                                RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
        PreparedStatement ps = prepareStatement(boundSql);
        return handleResultSets(ps, ms);
    }
}

核心字段與方法:

  • statementMap:緩存SQL與對應(yīng)的PreparedStatement對象。
  • doUpdate / doQuery:執(zhí)行更新或查詢時,嘗試從緩存中獲取PreparedStatement,如果不存在則創(chuàng)建。
  • prepareStatement(BoundSql boundSql):關(guān)鍵方法,用于判斷是否復(fù)用Statement。

4.3 prepareStatement源碼分析

private PreparedStatement prepareStatement(BoundSql boundSql) throws SQLException {
    final String sql = boundSql.getSql();
    PreparedStatement ps = statementMap.get(sql);
    if (ps == null) {
        Connection connection = getConnection();
        ps = connection.prepareStatement(sql);
        statementMap.put(sql, ps);
    }
    // 參數(shù)設(shè)置邏輯
    parameterHandler.setParameters(ps);
    return ps;
}

逐行解析:

final String sql = boundSql.getSql();

獲取最終SQL,作為緩存Key。

PreparedStatement ps = statementMap.get(sql);

嘗試從緩存中獲取Statement。

if (ps == null) {...}

如果緩存沒有,則通過Connection創(chuàng)建新的PreparedStatement,并加入緩存。

parameterHandler.setParameters(ps);

每次執(zhí)行前重新綁定參數(shù)(保證參數(shù)正確性)。

return ps;

返回可復(fù)用的Statement對象。

與JDBC底層關(guān)聯(lián)

  • Connection.prepareStatement(sql)會向數(shù)據(jù)庫發(fā)送預(yù)編譯請求。
  • ReuseExecutor避免重復(fù)調(diào)用,從而減少網(wǎng)絡(luò)開銷和數(shù)據(jù)庫預(yù)編譯成本。

4.4 ReuseExecutor配置示例

全局配置(mybatis-config.xml):

<configuration>
    <settings>
        <setting name="defaultExecutorType" value="REUSE"/>
    </settings>
</configuration>

動態(tài)創(chuàng)建Executor:

try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.REUSE)) {
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.updateUserName(1, "Alice");
    mapper.updateUserName(2, "Bob");
    sqlSession.commit();
}

特點:同一SQL語句在事務(wù)內(nèi)復(fù)用PreparedStatement,參數(shù)不同也能正確執(zhí)行。

4.5 性能對比實驗

實驗場景:批量更新1000條記錄,比較SimpleExecutor和ReuseExecutor性能。

long start = System.currentTimeMillis();
try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.REUSE)) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    for (int i = 0; i < 1000; i++) {
        mapper.updateUserName(i, "User" + i);
    }
    session.commit();
}
long end = System.currentTimeMillis();
System.out.println("ReuseExecutor 耗時: " + (end - start) + "ms");

實驗結(jié)論

Executor類型1000條更新耗時優(yōu)勢
SimpleExecutor320ms實現(xiàn)簡單,開銷大
ReuseExecutor150ms減少PreparedStatement創(chuàng)建開銷

小結(jié):ReuseExecutor通過Statement復(fù)用,大幅減少JDBC對象創(chuàng)建次數(shù),但對于真正的批量SQL合并,需要使用BatchExecutor。

4.6 使用注意事項

  • 事務(wù)范圍:Statement緩存與事務(wù)綁定,事務(wù)提交或回滾后,緩存的Statement會統(tǒng)一關(guān)閉。
  • 參數(shù)綁定:每次執(zhí)行前必須重新綁定參數(shù),否則會出現(xiàn)數(shù)據(jù)錯誤。
  • 非線程安全ReuseExecutor不是線程安全的,同一SqlSession不建議跨線程使用
  • 適用場景:不適合SQL頻繁變動的場景,因為緩存Key為SQL字符串,SQL不同則無法復(fù)用。

4.7 小結(jié)

  • 核心價值:減少PreparedStatement創(chuàng)建開銷,提高頻繁執(zhí)行相同SQL的性能。
  • 與SimpleExecutor區(qū)別:SimpleExecutor每次創(chuàng)建新Statement,ReuseExecutor復(fù)用Statement。
  • 與BatchExecutor區(qū)別:ReuseExecutor不會批量提交SQL,BatchExecutor才是真正的JDBC批處理優(yōu)化。
  • 場景建議:事務(wù)內(nèi)多次更新/查詢同一SQL,或者對數(shù)據(jù)庫開銷敏感的中小批量操作。

5. BatchExecutor詳解

BatchExecutor是MyBatis中專門用于批量操作的執(zhí)行器,它繼承自BaseExecutor,通過JDBC的批處理機制(addBatch() + executeBatch())減少數(shù)據(jù)庫往返次數(shù),從而顯著提升大批量寫入或更新操作的性能。

5.1 BatchExecutor的設(shè)計理念與適用場景

設(shè)計理念

MyBatis在批量操作時,如果每條SQL都執(zhí)行一次executeUpdate(),會導(dǎo)致大量網(wǎng)絡(luò)往返和數(shù)據(jù)庫預(yù)編譯開銷。

BatchExecutor通過緩存SQL及參數(shù),使用JDBC批處理機制一次性提交多條SQL,提高效率。

適用場景

  • 批量插入、批量更新、批量刪除操作(如日志、訂單數(shù)據(jù)入庫)。
  • 數(shù)據(jù)量大、對數(shù)據(jù)庫交互次數(shù)敏感的場景。
  • 對事務(wù)一致性有要求,希望將批量操作放在單一事務(wù)內(nèi)統(tǒng)一提交。

注意:BatchExecutor的性能提升依賴數(shù)據(jù)庫對JDBC批處理的支持,并非所有數(shù)據(jù)庫都能完全發(fā)揮優(yōu)勢。

5.2 BatchExecutor源碼結(jié)構(gòu)

BatchExecutor繼承自BaseExecutor,關(guān)鍵字段和方法如下:

public class BatchExecutor extends BaseExecutor {
    private final List<BatchResult> batchResults = new ArrayList<>();
    private final Map<String, PreparedStatement> statementMap = new HashMap<>();

    public BatchExecutor(Transaction transaction, Executor wrapper) {
        super(transaction, wrapper);
    }

    @Override
    public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
        PreparedStatement ps = prepareStatement(ms.getSqlSource().getBoundSql(parameter));
        parameterHandler.setParameters(ps);
        ps.addBatch(); // 核心批處理邏輯
        BatchResult batchResult = new BatchResult(ms, boundSql, parameter);
        batchResults.add(batchResult);
        return 1; // 返回值僅表示操作成功,不是真實更新條數(shù)
    }

    @Override
    public List<BatchResult> flushStatements() throws SQLException {
        List<BatchResult> results = new ArrayList<>();
        for (PreparedStatement ps : statementMap.values()) {
            int[] updateCounts = ps.executeBatch(); // 批量提交
            // 將updateCounts記錄到BatchResult
        }
        statementMap.clear();
        batchResults.clear();
        return results;
    }
}

核心字段與方法:

  • batchResults:保存每條SQL的執(zhí)行結(jié)果,支持事務(wù)回滾。
  • statementMap:緩存PreparedStatement對象,實現(xiàn)SQL復(fù)用。
  • doUpdate:將SQL和參數(shù)加入批處理隊列,通過addBatch()延遲提交。
  • flushStatements:真正執(zhí)行批處理,通過executeBatch()一次性提交所有SQL。

5.3 doUpdate與flushStatements源碼解析

doUpdate方法:

@Override
public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
    BoundSql boundSql = ms.getBoundSql(parameter);
    String sql = boundSql.getSql();
    PreparedStatement ps = statementMap.get(sql);
    if (ps == null) {
        Connection connection = getConnection();
        ps = connection.prepareStatement(sql);
        statementMap.put(sql, ps);
    }
    parameterHandler.setParameters(ps);
    ps.addBatch(); // 將參數(shù)加入JDBC批處理
    batchResults.add(new BatchResult(ms, boundSql, parameter));
    return 1;
}

逐行解析

  • 獲取SQL和參數(shù)綁定對象(BoundSql)。
  • 嘗試復(fù)用已有PreparedStatement,若不存在則創(chuàng)建。
  • 綁定參數(shù)(ParameterHandler)。
  • 關(guān)鍵點ps.addBatch()將SQL及參數(shù)緩存到JDBC批處理中,不立即執(zhí)行。
  • 記錄BatchResult以便事務(wù)回滾或結(jié)果統(tǒng)計。

flushStatements方法:

@Override
public List<BatchResult> flushStatements() throws SQLException {
    List<BatchResult> results = new ArrayList<>();
    for (Map.Entry<String, PreparedStatement> entry : statementMap.entrySet()) {
        PreparedStatement ps = entry.getValue();
        int[] updateCounts = ps.executeBatch(); // 批量提交
        // 將updateCounts記錄到BatchResult
        results.addAll(batchResults);
    }
    statementMap.clear();
    batchResults.clear();
    return results;
}

逐行解析

  • 遍歷緩存的PreparedStatement對象。
  • 關(guān)鍵點executeBatch()一次性提交所有SQL,大幅減少網(wǎng)絡(luò)往返和數(shù)據(jù)庫解析開銷。
  • 清空緩存,為下一輪批處理準(zhǔn)備。
  • 返回批處理結(jié)果列表,支持事務(wù)管理。

5.4 BatchExecutor配置示例

全局配置(mybatis-config.xml):

<configuration>
    <settings>
        <setting name="defaultExecutorType" value="BATCH"/>
    </settings>
</configuration>

動態(tài)創(chuàng)建BatchExecutor:

try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    for (int i = 0; i < 1000; i++) {
        mapper.insertUser(new User(i, "User" + i));
    }
    sqlSession.commit(); // 批量提交
}

特點:所有SQL通過addBatch緩存,commit或flushStatements時一次性提交數(shù)據(jù)庫。

5.5 性能對比實驗

實驗場景:插入1000條用戶記錄,比較SimpleExecutor、ReuseExecutor、BatchExecutor性能。

long start = System.currentTimeMillis();
try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    for (int i = 0; i < 1000; i++) {
        mapper.insertUser(new User(i, "User" + i));
    }
    session.commit();
}
long end = System.currentTimeMillis();
System.out.println("BatchExecutor 耗時: " + (end - start) + "ms");

實驗結(jié)果示例(基于MySQL + MyBatis 3.5.9):

Executor類型1000條插入耗時優(yōu)勢
SimpleExecutor350ms實現(xiàn)簡單,每條SQL單獨提交
ReuseExecutor180ms復(fù)用Statement,減少創(chuàng)建開銷
BatchExecutor40msJDBC批量提交,性能最高

小結(jié):BatchExecutor是處理大量插入/更新的首選執(zhí)行器,可顯著減少數(shù)據(jù)庫交互次數(shù)。

5.6 使用注意事項

  • 事務(wù)范圍:批處理操作應(yīng)在事務(wù)內(nèi)執(zhí)行,事務(wù)提交時才真正寫入數(shù)據(jù)庫。
  • 緩存Statement:BatchExecutor內(nèi)部緩存PreparedStatement,避免重復(fù)創(chuàng)建。
  • 適用場景:適合大批量數(shù)據(jù)寫入,但不適合頻繁查詢操作。
  • 返回值doUpdate()返回值不是真實更新條數(shù),需通過BatchResult獲取。
  • 數(shù)據(jù)庫兼容性:部分?jǐn)?shù)據(jù)庫驅(qū)動對executeBatch()的支持不同,需要測試。

5.7 小結(jié)

  • 核心價值:批量提交SQL,大幅減少數(shù)據(jù)庫往返次數(shù)和JDBC開銷。
  • 與ReuseExecutor區(qū)別:ReuseExecutor只復(fù)用Statement,BatchExecutor才是真正的JDBC批處理。
  • 性能優(yōu)勢:適合大數(shù)據(jù)量寫入/更新場景,能顯著降低執(zhí)行時間。
  • 事務(wù)控制:批處理操作依賴事務(wù)管理,保證數(shù)據(jù)一致性。

6. CachingExecutor與緩存體系

CachingExecutor是MyBatis中用于一級緩存和二級緩存的核心執(zhí)行器,它通過裝飾模式(Decorator)封裝其他Executor,實現(xiàn)對查詢結(jié)果的緩存管理,從而減少數(shù)據(jù)庫訪問,提高查詢性能。

6.1 CachingExecutor的設(shè)計理念與作用

設(shè)計理念

MyBatis采用裝飾器模式將緩存邏輯與具體執(zhí)行器(SimpleExecutor、BatchExecutor等)分離,保證緩存功能可插拔。

CachingExecutor在執(zhí)行query方法時,先查詢緩存;若緩存命中,則直接返回結(jié)果,否則調(diào)用底層Executor執(zhí)行數(shù)據(jù)庫操作,并將結(jié)果放入緩存。

作用

  • 一級緩存(Session級):默認(rèn)啟用,作用域為SqlSession,同一SqlSession中重復(fù)查詢可命中緩存。
  • 二級緩存(Mapper級/Namespace級):可選啟用,作用域為Mapper對應(yīng)的Namespace,多個SqlSession共享緩存。
  • 緩存透明化:開發(fā)者無需關(guān)心底層Executor類型,直接通過Mapper查詢即可享受緩存優(yōu)化。

注意:二級緩存需要手動配置,且支持不同緩存實現(xiàn)(如PerpetualCacheEhcache)。

6.2 CachingExecutor源碼結(jié)構(gòu)

public class CachingExecutor implements Executor {
    private final Executor delegate;
    private final TransactionalCacheManager tcm = new TransactionalCacheManager();

    public CachingExecutor(Executor delegate) {
        this.delegate = delegate;
    }

    @Override
    public <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {
        Cache cache = ms.getCache();
        if (cache != null) {
            flushCacheIfRequired(ms);
            CacheKey key = createCacheKey(ms, parameter, rowBounds, null);
            @SuppressWarnings("unchecked")
            List<E> list = (List<E>) tcm.getObject(cache, key);
            if (list == null) {
                list = delegate.query(ms, parameter, rowBounds, resultHandler);
                tcm.putObject(cache, key, list);
            }
            return list;
        } else {
            return delegate.query(ms, parameter, rowBounds, resultHandler);
        }
    }
}

核心字段與方法:

  • delegate:被裝飾的底層Executor(Simple/Batch/Reuse等)。
  • tcmTransactionalCacheManager,管理緩存的事務(wù)性提交和回滾。
  • query():緩存命中檢查與數(shù)據(jù)查詢的核心邏輯。
  • flushCacheIfRequired():判斷是否需要刷新緩存(如更新操作會觸發(fā)清空相關(guān)緩存)。

6.3 一級緩存(Local Cache)機制

概念

  • 一級緩存是SqlSession級別緩存,每個SqlSession內(nèi)部獨立。

  • 默認(rèn)開啟,不需要額外配置。

工作流程

  • 調(diào)用CachingExecutor.query()時生成CacheKey。
  • 檢查TransactionalCacheManager中的一級緩存是否存在對應(yīng)Key。
  • 若命中,直接返回緩存結(jié)果。
  • 若未命中,調(diào)用底層Executor查詢數(shù)據(jù)庫,并將結(jié)果放入一級緩存。

CacheKey生成規(guī)則

  • MappedStatement ID
  • SQL文本
  • 參數(shù)對象
  • RowBounds偏移量
  • Environment ID(多環(huán)境區(qū)分)

6.4 二級緩存(Namespace Cache)機制

概念

二級緩存是Mapper級別緩存,多個SqlSession共享。

需要在Mapper XML中配置開啟:

<cache
    type="org.apache.ibatis.cache.impl.PerpetualCache"
    eviction="LRU"
    flushInterval="60000"
    size="512"
    readOnly="true"/>

特點

  • 可配置緩存實現(xiàn)(如PerpetualCache、Ehcache)。
  • 可設(shè)置淘汰策略(LRU、FIFO等)、刷新間隔、緩存大小。
  • 支持只讀或可更新模式(readOnly=true時返回對象的深拷貝,保證緩存安全)。

工作流程

  • 查詢時,CachingExecutor先查詢一級緩存。
  • 一級緩存未命中,查詢二級緩存。
  • 二級緩存未命中,調(diào)用底層Executor查詢數(shù)據(jù)庫。
  • 查詢結(jié)果先寫入二級緩存,提交事務(wù)后更新一級緩存。

核心邏輯由TransactionalCacheManager實現(xiàn)事務(wù)性緩存,保證更新操作回滾時不會污染緩存。

6.5 CachingExecutor與Executor協(xié)作關(guān)系

CachingExecutor
    └──> delegate (SimpleExecutor / ReuseExecutor / BatchExecutor)
           └──> JDBC操作

協(xié)作說明

  • 查詢操作:CachingExecutor檢查緩存 -> delegate執(zhí)行SQL -> 結(jié)果回填緩存。
  • 更新操作:CachingExecutor觸發(fā)緩存刷新 -> delegate執(zhí)行更新 -> 事務(wù)提交時清理緩存。
  • 事務(wù)一致性:通過TransactionalCacheManager管理緩存事務(wù)邊界,保證一級/二級緩存與數(shù)據(jù)庫一致。

6.6 示例:開啟二級緩存與查詢緩存命中

Mapper XML示例:

<mapper namespace="com.example.mapper.UserMapper">
    <cache type="org.apache.ibatis.cache.impl.PerpetualCache"
           eviction="LRU"
           flushInterval="300000"
           size="1024"
           readOnly="true"/>
    
    <select id="getUserById" parameterType="int" resultType="User">
        SELECT id, name, age FROM user WHERE id = #{id}
    </select>
</mapper>

測試代碼:

try (SqlSession session1 = sqlSessionFactory.openSession()) {
    UserMapper mapper1 = session1.getMapper(UserMapper.class);
    User user1 = mapper1.getUserById(1); // 查詢數(shù)據(jù)庫
    User user2 = mapper1.getUserById(1); // 命中一級緩存
    session1.commit();
}

try (SqlSession session2 = sqlSessionFactory.openSession()) {
    UserMapper mapper2 = session2.getMapper(UserMapper.class);
    User user3 = mapper2.getUserById(1); // 命中二級緩存
}

結(jié)果說明:

  • session1中重復(fù)查詢命中一級緩存
  • session2查詢命中二級緩存

6.7 使用注意事項與優(yōu)化策略

  • 更新操作刷新緩存insert/update/delete會觸發(fā)相關(guān)緩存清理。
  • 緩存鍵唯一性:復(fù)雜查詢參數(shù)需確保CacheKey唯一,否則可能緩存污染。
  • 緩存粒度:二級緩存粒度為Mapper Namespace,注意跨Mapper數(shù)據(jù)更新可能導(dǎo)致緩存失效。
  • 只讀緩存優(yōu)化:設(shè)置readOnly=true減少對象深拷貝開銷。
  • 事務(wù)邊界管理:通過TransactionalCacheManager確保事務(wù)回滾時緩存一致性。

6.8 小結(jié)

  • CachingExecutor是裝飾器,增強了底層Executor的緩存能力。
  • 一級緩存:SqlSession級別,默認(rèn)開啟。
  • 二級緩存:Mapper級別,需要顯式配置,支持多種實現(xiàn)策略。
  • 事務(wù)性管理:保證緩存與數(shù)據(jù)庫一致性。
  • 性能優(yōu)化:適用于高頻查詢場景,可大幅降低數(shù)據(jù)庫訪問壓力。

7. Executor選型與性能調(diào)優(yōu)

MyBatis中Executor的類型主要包括:SimpleExecutor、ReuseExecutor、BatchExecutor以及緩存增強的CachingExecutor。

不同執(zhí)行器在數(shù)據(jù)庫交互次數(shù)、事務(wù)管理、緩存支持、批量操作性能上存在顯著差異。合理選型對系統(tǒng)性能優(yōu)化至關(guān)重要。

7.1 Executor性能對比概覽

Executor 類型特點優(yōu)點缺點適用場景
SimpleExecutor每次執(zhí)行SQL都創(chuàng)建Statement實現(xiàn)簡單,適合單條操作Statement重復(fù)創(chuàng)建,開銷大單條操作,低并發(fā)
ReuseExecutor復(fù)用Statement減少Statement創(chuàng)建次數(shù),提高性能不支持批量操作多次相同SQL操作
BatchExecutor批處理SQL批量插入/更新性能高對單條操作無優(yōu)勢,調(diào)試復(fù)雜批量數(shù)據(jù)寫入
CachingExecutor緩存封裝Executor減少重復(fù)查詢,提高查詢效率占用內(nèi)存,緩存更新需謹(jǐn)慎高頻查詢、讀多寫少場景

注意:CachingExecutor通常與其他Executor結(jié)合使用,如CachingExecutor(SimpleExecutor),因此在性能分析時需要考慮緩存命中率。

7.2 Executor選型策略

7.2.1 單條操作(插入/更新/刪除)

推薦Executor:SimpleExecutor

理由

  • 操作簡單,Statement創(chuàng)建開銷在單條操作下可接受
  • 易于調(diào)試和事務(wù)管理

7.2.2 重復(fù)執(zhí)行相同SQL

推薦Executor:ReuseExecutor

理由

  • 復(fù)用Statement,減少預(yù)編譯開銷
  • 對小批量重復(fù)操作性能提升明顯

示例配置

<configuration>
  <settings>
    <setting name="defaultExecutorType" value="REUSE"/>
  </settings>
</configuration>

7.2.3 批量數(shù)據(jù)寫入

推薦Executor:BatchExecutor

理由

  • 使用JDBC批處理(addBatch + executeBatch),顯著減少網(wǎng)絡(luò)交互次數(shù)
  • 對大數(shù)據(jù)量插入/更新性能優(yōu)化明顯

示例代碼

try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    for (int i = 0; i < 1000; i++) {
        mapper.insertUser(new User("User" + i, 20 + i % 30));
    }
    session.commit(); // 觸發(fā)批量執(zhí)行
}

7.3 性能測試實驗:SimpleExecutor vs BatchExecutor

實驗場景

  • 插入1000條用戶數(shù)據(jù)
  • 測試兩種Executor的耗時

測試代碼

public void testInsertPerformance() {
    int count = 1000;

    // SimpleExecutor
    long startSimple = System.currentTimeMillis();
    try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.SIMPLE)) {
        UserMapper mapper = session.getMapper(UserMapper.class);
        for (int i = 0; i < count; i++) {
            mapper.insertUser(new User("User" + i, 20 + i % 30));
        }
        session.commit();
    }
    long endSimple = System.currentTimeMillis();

    // BatchExecutor
    long startBatch = System.currentTimeMillis();
    try (SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
        UserMapper mapper = session.getMapper(UserMapper.class);
        for (int i = 0; i < count; i++) {
            mapper.insertUser(new User("User" + i, 20 + i % 30));
        }
        session.commit();
    }
    long endBatch = System.currentTimeMillis();

    System.out.println("SimpleExecutor耗時:" + (endSimple - startSimple) + " ms");
    System.out.println("BatchExecutor耗時:" + (endBatch - startBatch) + " ms");
}

實驗結(jié)果示意

SimpleExecutor耗時:1200 ms
BatchExecutor耗時:180 ms

結(jié)論:

  • BatchExecutor在大批量操作下性能提升顯著(約7倍)
  • 小批量或單條操作時BatchExecutor優(yōu)勢不明顯,SimpleExecutor或ReuseExecutor更適合

7.4 Executor與事務(wù)管理

事務(wù)邊界SqlSession控制:commit/rollback

BatchExecutor注意事項

  • 批量SQL在事務(wù)提交時統(tǒng)一發(fā)送到數(shù)據(jù)庫
  • 回滾操作會取消整個批次執(zhí)行

緩存Executor與事務(wù)結(jié)合:

  • 一級緩存自動在事務(wù)范圍內(nèi)生效
  • 二級緩存由TransactionalCacheManager管理,保證事務(wù)一致性

7.5 高級優(yōu)化建議

組合Executor與緩存

  • 高頻查詢 + 重復(fù)SQL:CachingExecutor(ReuseExecutor)
  • 批量寫入 + 查詢緩存:CachingExecutor(BatchExecutor)

批量操作分批提交

  • 避免一次提交過多,導(dǎo)致JDBC內(nèi)存壓力大
  • 推薦每500~1000條分批提交

監(jiān)控SQL執(zhí)行時間

  • 使用MyBatis插件(Interceptor)監(jiān)控Statement執(zhí)行時間
  • 動態(tài)調(diào)整Executor策略

緩存更新策略

  • 對寫多讀少場景可降低緩存依賴
  • 對讀多寫少場景,啟用二級緩存顯著提升性能

7.6 場景化選型總結(jié)

場景推薦Executor備注
單條查詢/更新SimpleExecutor調(diào)試方便
重復(fù)查詢同SQLReuseExecutor減少Statement創(chuàng)建
大量批量插入/更新BatchExecutor使用JDBC批處理優(yōu)化
高頻查詢CachingExecutor + ReuseExecutor一級/二級緩存加速查詢
批量更新且需緩存CachingExecutor + BatchExecutor保證緩存一致性

7.7 小結(jié)

  • Executor選型應(yīng)結(jié)合操作類型和數(shù)據(jù)量,單條操作不宜使用批處理Executor,大批量操作推薦BatchExecutor。
  • 緩存Executor能顯著提升查詢性能,尤其在讀多寫少場景。
  • 事務(wù)邊界和緩存一致性管理是優(yōu)化性能和保證數(shù)據(jù)正確性的關(guān)鍵。
  • 結(jié)合實際開發(fā)需求,合理選擇Executor類型,并配合緩存和事務(wù)策略,能實現(xiàn)MyBatis性能優(yōu)化的最大化。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文教你如何使用原生的Feign

    一文教你如何使用原生的Feign

    Feign使得 Java HTTP 客戶端編寫更方便,Feign 靈感來源于Retrofit、JAXRS-2.0和WebSocket,這篇文章主要給大家介紹了如何使用原生的Feign的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 詳解Redisson分布式限流的使用及原理

    詳解Redisson分布式限流的使用及原理

    本文介紹了Redisson分布式限流的使用方法和原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Spring中的使用@Async異步調(diào)用方法

    Spring中的使用@Async異步調(diào)用方法

    這篇文章主要介紹了Spring中的使用@Async異步調(diào)用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中StringBuilder常用構(gòu)造方法解析

    Java中StringBuilder常用構(gòu)造方法解析

    這篇文章主要介紹了Java中StringBuilder常用構(gòu)造方法解析,StringBuilder是一個可標(biāo)的字符串類,我們可以吧它看成是一個容器這里的可變指的是StringBuilder對象中的內(nèi)容是可變的,需要的朋友可以參考下
    2024-01-01
  • Stream流排序數(shù)組和List?詳解

    Stream流排序數(shù)組和List?詳解

    這篇文章主要介紹了Stream流排序數(shù)組和List?詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09
  • springboot熱部署知識點總結(jié)

    springboot熱部署知識點總結(jié)

    在本篇文章里小編給大家整理了關(guān)于springboot熱部署的知識點內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。
    2019-06-06
  • Spring MVC @RequestParam注解使用場景分析

    Spring MVC @RequestParam注解使用場景分析

    @RequestParam是Spring MVC中用于綁定HTTP查詢參數(shù)和表單數(shù)據(jù)的注解,支持類型轉(zhuǎn)換、默認(rèn)值及可選參數(shù),適用于簡單數(shù)據(jù)場景,本文給大家介紹Spring MVC @RequestParam注解使用場景分析,感興趣的朋友一起看看吧
    2025-07-07
  • Java內(nèi)存區(qū)域管理詳解

    Java內(nèi)存區(qū)域管理詳解

    這篇文章主要介紹了Java內(nèi)存區(qū)域管理詳解,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 淺談Java安全之C3P0的使用

    淺談Java安全之C3P0的使用

    本文主要介紹了淺談Java安全之C3P0的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • @RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決

    @RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決

    這篇文章主要介紹了@RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論

91国内精品久久久久精品一| 国产麻豆乱子伦午夜视频观看| 国产午夜无码福利在线看| 日韩精品中文字幕播放| 天天草天天色天天干| 成人免费毛片aaaa| v888av在线观看视频| 亚洲av在线观看尤物| 色婷婷精品大在线观看| 国产成人精品一区在线观看| 色哟哟在线网站入口| 91精品国产高清自在线看香蕉网| 国产精品久久久久久久精品视频| 国产又粗又黄又硬又爽| 国产精品视频欧美一区二区| 999热精品视频在线| 天干天天天色天天日天天射| 日本熟妇喷水xxx| 插小穴高清无码中文字幕| 亚洲另类图片蜜臀av| 欧美成人黄片一区二区三区| 97超碰人人搞人人| 91九色国产熟女一区二区| 欧美3p在线观看一区二区三区| 性欧美激情久久久久久久| 亚洲av一妻不如妾| 国产在线91观看免费观看| 欧美综合婷婷欧美综合| 亚洲va国产va欧美精品88| 亚洲最大黄了色网站| 激情国产小视频在线| 人妻丝袜诱惑我操她视频| 国产精品久久久久国产三级试频| 超级av免费观看一区二区三区| 五色婷婷综合狠狠爱| 午夜免费体验区在线观看| 欧美亚洲免费视频观看| 区一区二区三国产中文字幕| 亚洲 国产 成人 在线| 亚洲日产av一区二区在线| 亚洲成人情色电影在线观看| 青青草成人福利电影| 中英文字幕av一区| 美女 午夜 在线视频| 成年人免费看在线视频| 免费看国产又粗又猛又爽又黄视频| 久草视频在线看免费| 欧美成一区二区三区四区| 亚洲午夜高清在线观看| 99精品久久久久久久91蜜桃| 人妻素人精油按摩中出| 男人操女人的逼免费视频| 青青擦在线视频国产在线| 国产黄色片在线收看| 91精品高清一区二区三区| 成熟熟女国产精品一区| mm131美女午夜爽爽爽| 成人av电影免费版| 人妻激情图片视频小说| 亚洲成人三级在线播放| 在线免费观看日本片| 第一福利视频在线观看| 91九色porny蝌蚪国产成人| 性感美女高潮视频久久久 | 少妇人妻二三区视频 | 激情五月婷婷综合色啪| 欧美老妇精品另类不卡片| 亚洲一级 片内射视正片| 欧美viboss性丰满| 超污视频在线观看污污污| 久草视频福利在线首页| 都市家庭人妻激情自拍视频| 亚洲av日韩av第一区二区三区| 在线视频自拍第三页| 亚洲熟妇无码一区二区三区| 精品少妇一二三视频在线| 亚洲成高清a人片在线观看| 欧美色婷婷综合在线| 午夜在线观看岛国av,com| 久草视频首页在线观看| 亚洲中文精品字幕在线观看| 好吊视频—区二区三区| 福利片区一区二体验区| 成人H精品动漫在线无码播放| 绝色少妇高潮3在线观看| 538精品在线观看视频| 九色porny九色9l自拍视频| 成年人黄视频在线观看| 91老熟女连续高潮对白| 国产va精品免费观看| 欧美精品亚洲精品日韩在线| 国产成人精品午夜福利训2021| 亚洲精品三级av在线免费观看| 亚洲一级av大片免费观看| 免费手机黄页网址大全| 91p0rny九色露脸熟女| 密臀av一区在线观看| 成人av在线资源网站| 人妻丝袜精品中文字幕| 国产内射中出在线观看| 蜜臀av久久久久久久| 欧美日韩情色在线观看| 青娱乐极品视频青青草| 2020av天堂网在线观看| 亚洲青青操骚货在线视频| 亚洲av男人的天堂你懂的| av一本二本在线观看| 97精品人妻一区二区三区精品| 五十路老熟女码av| 中文字幕av第1页中文字幕| 在线新三级黄伊人网| 国产精品欧美日韩区二区| 无码中文字幕波多野不卡| 国产真实乱子伦a视频| 亚洲av天堂在线播放| 欧美一级视频一区二区| 天堂v男人视频在线观看| 2019av在线视频| 欧美久久久久久三级网| 久久久久久久一区二区三| 日韩成人性色生活片| 国产片免费观看在线观看| 午夜激情精品福利视频| 中文字幕在线观看极品视频| 人妻素人精油按摩中出| 在线免费91激情四射| 韩国三级aaaaa高清视频| 一色桃子人妻一区二区三区| 5528327男人天堂| 91精品国产综合久久久蜜| 精品av久久久久久久| 国产第一美女一区二区三区四区 | 日日爽天天干夜夜操| 精品一区二区三区三区色爱| 午夜美女福利小视频| huangse网站在线观看| 日韩一区二区三区三州| 亚洲欧美另类自拍偷拍色图| 亚洲熟妇x久久av久久| 中文字幕在线永久免费播放| 亚洲色偷偷综合亚洲AV伊人| 在线观看日韩激情视频| 天天日天天摸天天爱| 大香蕉日本伊人中文在线| 国产熟妇一区二区三区av| 精品人妻一二三区久久| 午夜精品福利91av| 亚洲免费av在线视频| 2020久久躁狠狠躁夜夜躁| 51精品视频免费在线观看| 2020韩国午夜女主播在线| 又粗又硬又猛又爽又黄的| 白嫩白嫩美女极品国产在线观看| 91欧美在线免费观看| 春色激情网欧美成人| 蜜桃专区一区二区在线观看| 女生自摸在线观看一区二区三区 | 成人sm视频在线观看| 黄色的网站在线免费看| 水蜜桃国产一区二区三区| 大香蕉大香蕉大香蕉大香蕉大香蕉| 特黄老太婆aa毛毛片| 蜜臀av久久久久久久| 九一传媒制片厂视频在线免费观看| 国产九色91在线视频| 精品国产在线手机在线| 9色精品视频在线观看| 99国内精品永久免费视频| 免费在线观看污污视频网站| 大骚逼91抽插出水视频| 日本免费一级黄色录像| 91精品免费久久久久久| 精品91高清在线观看| 亚洲高清视频在线不卡| 中文字幕 人妻精品| 亚洲欧洲一区二区在线观看| 91片黄在线观看喷潮| 伊人日日日草夜夜草| 日本在线一区二区不卡视频| www,久久久,com| 久久久久久国产精品| 国产精品sm调教视频| 91亚洲手机在线视频播放| 精品成人啪啪18免费蜜臀| xxx日本hd高清| 影音先锋女人av噜噜色| 久草视频在线一区二区三区资源站 | 韩国亚洲欧美超一级在线播放视频 | 欧亚乱色一区二区三区| 2020久久躁狠狠躁夜夜躁| 免费大片在线观看视频网站| 黑人借宿ntr人妻的沦陷2| 在线免费观看欧美小视频| av视网站在线观看| 丝袜肉丝一区二区三区四区在线| 午夜精品福利一区二区三区p | 黄色三级网站免费下载| 中文字幕 人妻精品| 在线观看欧美黄片一区二区三区| 丝袜美腿欧美另类 中文字幕| 日韩美女搞黄视频免费| 黄色av网站免费在线| 成人蜜臀午夜久久一区| 日韩加勒比东京热二区| 97国产在线观看高清| 青青青青在线视频免费观看| 色秀欧美视频第一页| 青青青视频自偷自拍38碰| 被大鸡吧操的好舒服视频免费| 国产亚洲视频在线二区| 人妻av无码专区久久绿巨人| 亚洲护士一区二区三区| 扒开腿挺进肉嫩小18禁视频| 亚洲综合乱码一区二区| 中文字幕日韩精品就在这里| 人人妻人人爽人人添夜| 性感美女高潮视频久久久| 美女福利视频导航网站| 无忧传媒在线观看视频| 国产露脸对白在线观看| 在线不卡日韩视频播放| 又大又湿又爽又紧A视频| 亚洲免费va在线播放| 色综合天天综合网国产成人 | 五十路在线观看完整版| 午夜精品福利一区二区三区p| 日日夜夜大香蕉伊人| 国产中文精品在线观看| 免费手机黄页网址大全| 91久久国产成人免费网站| 国产91久久精品一区二区字幕| 亚洲人妻视频在线网| 少妇人妻100系列| aⅴ五十路av熟女中出| 插小穴高清无码中文字幕| av俺也去在线播放| 黄片三级三级三级在线观看| 天天日天天爽天天爽| 欧美精品免费aaaaaa| 国产综合视频在线看片| 男女之间激情网午夜在线| 五十路熟女人妻一区二区9933| 精品亚洲国产中文自在线| 日本后入视频在线观看| 亚洲中文精品字幕在线观看| 99精品亚洲av无码国产另类| 色爱av一区二区三区| 亚洲精品国产在线电影| 精品亚洲国产中文自在线| 熟女人妻三十路四十路人妻斩| 男女啪啪视频免费在线观看| 顶级尤物粉嫩小尤物网站| 九色porny九色9l自拍视频| 亚洲av成人网在线观看| 中文字幕在线永久免费播放| 午夜精品久久久久麻豆影视| 久久精品国产23696| 91精品国产黑色丝袜| 国产一区av澳门在线观看| 亚洲国产欧美一区二区三区…| 91九色porny蝌蚪国产成人| 亚洲精品久久综合久| 午夜在线一区二区免费| 国产精品人妻66p| 日韩在线中文字幕色| 动漫av网站18禁| 青青青青爽手机在线| 天天操天天插天天色| 久久精品亚洲成在人线a| 人人妻人人人操人人人爽| 大香蕉大香蕉在线有码 av| 被大鸡吧操的好舒服视频免费| 中文字幕在线第一页成人| 91九色porny国产在线| 六月婷婷激情一区二区三区| 欧美亚洲中文字幕一区二区三区| 青青青aaaa免费| 国产剧情演绎系列丝袜高跟| 成人sm视频在线观看| 国产内射中出在线观看| 在线免费观看黄页视频| 老司机福利精品免费视频一区二区 | 精品乱子伦一区二区三区免费播| 亚洲 图片 欧美 图片| 亚洲欧美人精品高清| 精品黑人巨大在线一区| 日韩a级精品一区二区| 国产精品一二三不卡带免费视频| 18禁无翼鸟成人在线| 日韩美女搞黄视频免费| 日本三极片视频网站观看| 人人爽亚洲av人人爽av| 欧美特级特黄a大片免费| 九一传媒制片厂视频在线免费观看| gogo国模私拍视频| 亚洲欧美日韩视频免费观看| 亚洲的电影一区二区三区| 一个人免费在线观看ww视频 | 免费无毒热热热热热热久| 果冻传媒av一区二区三区| 91香蕉成人app下载| wwwxxx一级黄色片| 久久这里有免费精品| 天天躁夜夜躁日日躁a麻豆| 青青青青青青青青青青草青青| av在线shipin| 婷婷久久一区二区字幕网址你懂得 | 人妻少妇中文有码精品| 激情内射在线免费观看| 一区二区久久成人网| 国产精品午夜国产小视频| 第一福利视频在线观看| 中文字幕 人妻精品| 日韩国产乱码中文字幕| 9久在线视频只有精品| 亚洲图库另类图片区| 在线免费91激情四射| 国产日韩精品一二三区久久久| 成熟丰满熟妇高潮xx×xx| 91人妻人人做人人爽在线| 美女少妇亚洲精选av| 一区二区三区的久久的蜜桃的视频 | 亚洲熟女女同志女同| 亚洲欧美清纯唯美另类| 亚洲成人av一区在线| 国产实拍勾搭女技师av在线| 免费一级黄色av网站| 99婷婷在线观看视频| 中文字幕一区二区人妻电影冢本 | 欧美黑人与人妻精品| 午夜频道成人在线91| 91免费放福利在线观看| 在线观看国产网站资源| 亚洲天堂成人在线观看视频网站| 天天通天天透天天插| 国产成人无码精品久久久电影| 红杏久久av人妻一区| 亚洲高清免费在线观看视频| 超污视频在线观看污污污| 成年人免费看在线视频| 天天做天天干天天舔| 国产精品福利小视频a| 91精品国产91青青碰| 97少妇精品在线观看| 91福利在线视频免费观看| 国产成人自拍视频播放| 亚洲精品午夜久久久久| 香蕉aⅴ一区二区三区| 国产精品久久久久网| 激情色图一区二区三区| 日韩激情文学在线视频| 夜鲁夜鲁狠鲁天天在线| 青娱乐在线免费视频盛宴| 热99re69精品8在线播放| 91av精品视频在线| 男人天堂色男人av| 青草亚洲视频在线观看| 日本一二三中文字幕| 中国黄色av一级片| 五色婷婷综合狠狠爱| 免费费一级特黄真人片| 岛国黄色大片在线观看| 狠狠躁夜夜躁人人爽天天久天啪| 国内精品在线播放第一页| 99精品亚洲av无码国产另类| 国产日韩精品一二三区久久久| 亚洲激情,偷拍视频| 日韩欧美制服诱惑一区在线| 青青青国产免费视频| 黄色在线观看免费观看在线| 亚洲熟妇x久久av久久| 美女av色播在线播放| 99re6热在线精品| av破解版在线观看| 中文字幕午夜免费福利视频| 国产精品久久久久久美女校花| 国产av福利网址大全| 亚洲 自拍 色综合图| 国产1区,2区,3区| 97色视频在线观看| 日本人妻少妇18—xx| 亚洲综合一区成人在线| 国产激情av网站在线观看| 日韩国产乱码中文字幕| 日韩在线视频观看有码在线 | 韩国亚洲欧美超一级在线播放视频| 11久久久久久久久久久| 亚洲男人在线天堂网| 精品久久婷婷免费视频| 中文字幕日韩精品日本| 在线免费观看黄页视频| 91色网站免费在线观看| 91国偷自产一区二区三区精品| 中文字幕日韩91人妻在线| 国产精品系列在线观看一区二区| 天天射夜夜操狠狠干| 国产福利小视频二区| 黄片大全在线观看观看| 播放日本一区二区三区电影| 国产无遮挡裸体免费直播视频| 国产精品自偷自拍啪啪啪| 2021天天色天天干| 国产高清97在线观看视频| 日本在线一区二区不卡视频| 欧美一区二区三区乱码在线播放| 中文字幕日韩精品日本| 欧美男人大鸡吧插女人视频| 五月激情婷婷久久综合网| 午夜精品在线视频一区| 深田咏美亚洲一区二区| 97人人模人人爽人人喊| 欧美国产亚洲中英文字幕| 国产97在线视频观看| 9l人妻人人爽人人爽| 天天日天天干天天干天天日| 天天日天天干天天干天天日| 国产又粗又黄又硬又爽| 亚洲欧美一区二区三区电影| 欧美老鸡巴日小嫩逼| 91亚洲国产成人精品性色| 中文字幕在线观看极品视频| 99热99这里精品6国产| 91亚洲国产成人精品性色| 精品一区二区三四区| 天堂av在线播放免费| 涩涩的视频在线观看视频| 日韩成人免费电影二区| 小穴多水久久精品免费看| 欧美伊人久久大香线蕉综合| 一区二区三区视频,福利一区二区| 99婷婷在线观看视频| 天堂av在线播放免费| 日本真人性生活视频免费看| 在线观看视频一区麻豆| 午夜精品亚洲精品五月色| 久久美欧人妻少妇一区二区三区| 97精品综合久久在线| 青娱乐在线免费视频盛宴| 噜噜色噜噜噜久色超碰| 亚洲美女美妇久久字幕组| 国产精品手机在线看片| 国产精品sm调教视频| av资源中文字幕在线观看| 国产精品一二三不卡带免费视频 | 一区二区三区另类在线| xxx日本hd高清| 亚洲国产成人最新资源| 日韩少妇人妻精品无码专区| 在线网站你懂得老司机| 亚洲欧美另类自拍偷拍色图| 欧美viboss性丰满| 亚洲精品在线资源站| 亚洲熟女久久久36d| 久久www免费人成一看片| 国产麻豆91在线视频| 天天色天天操天天舔| 91在线免费观看成人| 91一区精品在线观看| 婷婷久久一区二区字幕网址你懂得 | 大鸡巴插入美女黑黑的阴毛| 在线观看日韩激情视频| sw137 中文字幕 在线| 视频 国产 精品 熟女 | 日韩近亲视频在线观看| 大胸性感美女羞爽操逼毛片| 日本韩国在线观看一区二区| 国产1区,2区,3区| 中文字幕高清在线免费播放| 亚洲成人av在线一区二区| 人妻凌辱欧美丰满熟妇| 五月精品丁香久久久久福利社| 人妻丝袜诱惑我操她视频| 青青操免费日综合视频观看| 啊啊啊想要被插进去视频| 无忧传媒在线观看视频| 青青热久免费精品视频在线观看| 大鸡巴后入爆操大屁股美女| 亚洲成人情色电影在线观看| 亚洲美女高潮喷浆视频| 国产福利小视频免费观看| 黑人巨大的吊bdsm| 最新中文字幕乱码在线| 日本人妻欲求不满中文字幕| 亚洲综合一区成人在线| 中文字幕在线永久免费播放| 欧美特色aaa大片| 欧亚日韩一区二区三区观看视频| 国产日韩精品电影7777| 天天干夜夜操天天舔| 久久精品美女免费视频| 99精品亚洲av无码国产另类| 五十路av熟女松本翔子| 日韩精品电影亚洲一区| av网址在线播放大全| 97国产精品97久久| 中文字幕视频一区二区在线观看| 可以在线观看的av中文字幕| 欧美男人大鸡吧插女人视频| 久久永久免费精品人妻专区| 18禁美女无遮挡免费| 成人30分钟免费视频| 9色在线视频免费观看| 精品美女福利在线观看| 亚洲熟妇久久无码精品| 91成人精品亚洲国产| 啪啪啪啪啪啪啪免费视频| 亚洲的电影一区二区三区| 激情啪啪啪啪一区二区三区 | 亚洲美女美妇久久字幕组| 91麻豆精品传媒国产黄色片| 成年人黄色片免费网站| 成人av在线资源网站| 午夜在线一区二区免费| 国产黄网站在线观看播放| 人妻最新视频在线免费观看| 中文字幕,亚洲人妻| 免费大片在线观看视频网站| 青青青国产免费视频| 同居了嫂子在线播高清中文| 在线观看视频 你懂的| 中文字幕 亚洲av| 中文字幕在线免费第一页| 亚洲 自拍 色综合图| 日韩欧美国产一区ab| 75国产综合在线视频| 国产精品久久久久久久久福交| 亚洲国产中文字幕啊啊啊不行了| 玩弄人妻熟妇性色av少妇| 男人和女人激情视频| 亚洲av日韩精品久久久久久hd| 日韩美女搞黄视频免费| 亚洲人妻视频在线网| 国产精品sm调教视频| 亚洲av琪琪男人的天堂| 日本午夜爽爽爽爽爽视频在线观看| 欧美另类一区二区视频| 日本五十路熟新垣里子| 少妇ww搡性bbb91| 91免费福利网91麻豆国产精品| 91av中文视频在线| 黄工厂精品视频在线观看 | 亚洲国产欧美一区二区丝袜黑人| 超鹏97历史在线观看| 国产性生活中老年人视频网站| 最新的中文字幕 亚洲| 1000小视频在线| 自拍偷拍 国产资源| 天天日天天爽天天爽| av中文字幕电影在线看| 国产黄色片在线收看| 午夜91一区二区三区| 无忧传媒在线观看视频| 男人操女人逼逼视频网站| 91国内精品自线在拍白富美| 欧美日韩v中文在线| 99热这里只有国产精品6| 视频一区二区三区高清在线| 夜夜骑夜夜操夜夜奸| 国内资源最丰富的网站| 老司机欧美视频在线看| 欧美日韩国产一区二区三区三州| 一色桃子人妻一区二区三区| 国内精品在线播放第一页| 美女操逼免费短视频下载链接| 亚洲精品国品乱码久久久久| 国产综合高清在线观看| 青青草在观免费国产精品| 日比视频老公慢点好舒服啊| 久久久噜噜噜久久熟女av| 大香蕉大香蕉在线看| huangse网站在线观看| 青青青国产免费视频| 亚洲精品中文字幕下载| 中文字幕 亚洲av| 丝袜肉丝一区二区三区四区在线| 91麻豆精品秘密入口在线观看 | 国产成人一区二区三区电影网站| 鸡巴操逼一级黄色气| 激情国产小视频在线| 黄色录像鸡巴插进去| 岛国免费大片在线观看| 日日夜夜大香蕉伊人| 欧美香蕉人妻精品一区二区| 亚洲卡1卡2卡三卡四老狼| 日韩成人综艺在线播放| 五十路在线观看完整版| 91精品综合久久久久3d动漫| 嫩草aⅴ一区二区三区| 2022精品久久久久久中文字幕| 久久久人妻一区二区| 黑人巨大的吊bdsm| 亚洲蜜臀av一区二区三区九色 | 成人H精品动漫在线无码播放| 中国把吊插入阴蒂的视频| 免费福利av在线一区二区三区| 一区二区久久成人网| 欧美日韩激情啪啪啪| 在线免费观看欧美小视频| 国产福利小视频大全| 亚洲免费福利一区二区三区| 欧美少妇性一区二区三区| 人妻3p真实偷拍一二区| 视频在线免费观看你懂得| 久久久久久久精品成人热| 99av国产精品欲麻豆| 日韩三级电影华丽的外出| 美女福利视频网址导航| 久久久久久国产精品| 欧美成人黄片一区二区三区| 日本性感美女写真视频| 欧美一区二区中文字幕电影| 黄色视频在线观看高清无码 | av网站色偷偷婷婷网男人的天堂| 91福利视频免费在线观看| 一本久久精品一区二区| 91精品综合久久久久3d动漫| 日韩美在线观看视频黄| 国产精品午夜国产小视频 | 国产精品精品精品999| 二区中出在线观看老师| 夜鲁夜鲁狠鲁天天在线| 大陆精品一区二区三区久久| 免费黄高清无码国产| 国产黑丝高跟鞋视频在线播放| 阴茎插到阴道里面的视频| 亚洲天堂有码中文字幕视频| 中文字幕免费福利视频6| 国产一区二区三免费视频| 91精品国产麻豆国产| 精品一区二区三区在线观看| 久久农村老妇乱69系列| 亚洲成av人无码不卡影片一| 少妇深喉口爆吞精韩国| 国产不卡av在线免费| 欧美中文字幕一区最新网址| 国产又粗又硬又大视频| 日韩一个色综合导航| 毛茸茸的大外阴中国视频| 国产精品手机在线看片| 夜女神免费福利视频| 人妻少妇一区二区三区蜜桃| 男女第一次视频在线观看| 日韩av中文在线免费观看| 精品一区二区三区三区色爱| 欧美怡红院视频在线观看| 国产精品视频欧美一区二区| 日本一区美女福利视频| 国产精品亚洲а∨天堂免| 北条麻妃av在线免费观看| 亚洲午夜电影之麻豆| 久久久久久cao我的性感人妻| 国产亚洲四十路五十路| 综合精品久久久久97| 成人av天堂丝袜在线观看| 国产性色生活片毛片春晓精品| 久久永久免费精品人妻专区 | 亚洲va国产va欧美精品88| 一区二区在线视频中文字幕 | 精品美女久久久久久| 老师让我插进去69AV| 青青青青视频在线播放| 中文字幕一区二区三区人妻大片 | 97少妇精品在线观看| 美女吃鸡巴操逼高潮视频| 精品成人午夜免费看| 午夜精品福利一区二区三区p | mm131美女午夜爽爽爽| 日韩熟女系列一区二区三区| 夜色福利视频在线观看| 女警官打开双腿沦为性奴| 国产白嫩美女一区二区| 无忧传媒在线观看视频| 天天日天天干天天干天天日| 免费观看国产综合视频| 亚洲精品中文字幕下载| 熟女少妇激情五十路| 一区二区三区久久久91| 久久久精品欧洲亚洲av| 欧美精品国产综合久久| 欧美黑人巨大性xxxxx猛交| 国产高潮无码喷水AV片在线观看| 一区二区三区的久久的蜜桃的视频 | 亚洲av香蕉一区区二区三区犇 | 成年人的在线免费视频| 99热国产精品666| 美女张开腿让男生操在线看| 韩国黄色一级二级三级| 国产精品熟女久久久久浪潮| 中文字幕人妻三级在线观看| 色秀欧美视频第一页| 日本韩国免费福利精品| 在线观看视频污一区| 三级黄色亚洲成人av| 国产精品视频资源在线播放| 欧美日韩情色在线观看| 日韩少妇人妻精品无码专区| 在线制服丝袜中文字幕| 91麻豆精品传媒国产黄色片| 人妻少妇一区二区三区蜜桃| 9色在线视频免费观看| 天天干天天操天天插天天日| 又色又爽又黄的美女裸体| av中文字幕福利网| 做爰视频毛片下载蜜桃视频1| 91亚洲国产成人精品性色| 天堂av在线官网中文| 曰本无码人妻丰满熟妇啪啪| 在线不卡成人黄色精品| 国产一线二线三线的区别在哪| 日韩一区二区三区三州| 91色老99久久九九爱精品| 欧美黑人与人妻精品| 91av精品视频在线| 国产高清女主播在线| 国产大学生援交正在播放| 999热精品视频在线| 中文字幕中文字幕 亚洲国产| 91福利在线视频免费观看| 亚洲高清视频在线不卡| 黄色成年网站午夜在线观看 | 亚洲免费成人a v| 国产黄色高清资源在线免费观看| 丝袜肉丝一区二区三区四区在线| 国产精品日韩欧美一区二区| 亚洲日本一区二区久久久精品| 亚洲人妻30pwc| 白白操白白色在线免费视频| 国产第一美女一区二区三区四区| 亚洲中文字幕人妻一区| 亚洲美女美妇久久字幕组| 欧美一区二区三区在线资源 | 综合页自拍视频在线播放| 亚洲久久午夜av一区二区| 99热久久这里只有精品| 爱爱免费在线观看视频| 2020国产在线不卡视频| 精品一区二区三四区| 在线观看免费av网址大全| 久久一区二区三区人妻欧美| 成人区人妻精品一区二视频| 午夜精品福利一区二区三区p| 亚洲伊人久久精品影院一美女洗澡 | 国产精选一区在线播放| 日本熟妇一区二区x x| 中文字幕+中文字幕| 日韩精品中文字幕播放| 青青伊人一精品视频| 欧美日韩人妻久久精品高清国产| 日本后入视频在线观看| 国产一区二区视频观看| 欧美一区二区三区高清不卡tv| 欧美日韩国产一区二区三区三州| 美女福利视频网址导航| 动漫av网站18禁| 国产亚洲欧美另类在线观看| 中文字幕在线观看国产片| 欧美专区第八页一区在线播放| 国产精品黄色的av| 免费男阳茎伸入女阳道视频| 岛国黄色大片在线观看| 麻豆精品成人免费视频| 久久尻中国美女视频| 伊人成人综合开心网| 日韩在线中文字幕色| 少妇露脸深喉口爆吞精| 亚洲高清国产自产av| av黄色成人在线观看| 成人色综合中文字幕| 1000小视频在线| 最新国产精品拍在线观看| 婷婷久久久综合中文字幕| 中文字幕在线观看极品视频| 亚洲一区制服丝袜美腿| 99精品国产自在现线观看| 免费大片在线观看视频网站| 亚洲 图片 欧美 图片| 免费高清自慰一区二区三区网站| 国产高清97在线观看视频| 久久久久久久精品成人热| 色呦呦视频在线观看视频| 污污小视频91在线观看| 在线观看成人国产电影| 大屁股肉感人妻中文字幕在线| 国产熟妇人妻ⅹxxxx麻豆| 99精品久久久久久久91蜜桃| 天天躁夜夜躁日日躁a麻豆| 爱有来生高清在线中文字幕| 国产精品久久久久网| 日本韩国在线观看一区二区| av一本二本在线观看| 91精品国产综合久久久蜜| 九色porny九色9l自拍视频| 男女啪啪啪啪啪的网站| 日本一区精品视频在线观看| 欧美 亚洲 另类综合| 免费观看污视频网站| 馒头大胆亚洲一区二区| 国产品国产三级国产普通话三级| 黑人乱偷人妻中文字幕| 久久久久只精品国产三级| 2022中文字幕在线| 天天色天天操天天透| 欧美日本在线视频一区| 91人妻精品久久久久久久网站 | 久精品人妻一区二区三区| 精品一区二区三区三区88| 老司机福利精品视频在线| 不卡一不卡二不卡三| 一区二区三区视频,福利一区二区| 日日夜夜精品一二三| 中文字幕在线永久免费播放| 久久久久久久一区二区三| 日韩美女搞黄视频免费| 91久久精品色伊人6882| 久久永久免费精品人妻专区 | 1区2区3区不卡视频| 快点插进来操我逼啊视频| 一区国内二区日韩三区欧美| 91免费观看国产免费| 日本后入视频在线观看| 99精品一区二区三区的区| av在线免费中文字幕| 欧美专区第八页一区在线播放 | 最近的中文字幕在线mv视频| 欧美成人综合视频一区二区| 超碰97人人澡人人| 2019av在线视频| 视频在线亚洲一区二区| 欧美国品一二三产区区别| 最新的中文字幕 亚洲| 日曰摸日日碰夜夜爽歪歪| 亚洲av可乐操首页| 中文字幕亚洲中文字幕| 亚洲成人国产综合一区| 国产白袜脚足J棉袜在线观看| 99视频精品全部15| 五十路熟女人妻一区二| 91快播视频在线观看| 久草电影免费在线观看| 动色av一区二区三区| 91高清成人在线视频| 精品国产成人亚洲午夜| 在线免费观看视频一二区| 大香蕉大香蕉在线有码 av| 久久精品国产23696| 93视频一区二区三区| 性生活第二下硬不起来| 偷拍自拍视频图片免费| 欧美80老妇人性视频| 在线免费观看99视频| 91av精品视频在线| 亚洲视频乱码在线观看| 国产在线观看黄色视频| 黑人进入丰满少妇视频| 国产变态另类在线观看| 天天干天天搞天天摸| 亚洲一区制服丝袜美腿| 99久久中文字幕一本人| 亚洲蜜臀av一区二区三区九色| 扒开让我视频在线观看| 亚洲在线观看中文字幕av| 精品一区二区三区午夜| 香蕉91一区二区三区| 自拍偷拍,中文字幕| 视频在线免费观看你懂得| 亚洲一区二区久久久人妻| 中文字幕在线观看国产片| 国产黄色大片在线免费播放| 欧美日韩情色在线观看| 成年人该看的视频黄免费| 精品一区二区三区午夜| 2017亚洲男人天堂| 日韩av熟妇在线观看| 色综合久久五月色婷婷综合| 亚洲 欧美 精品 激情 偷拍| 亚洲欧美自拍另类图片| 国产男女视频在线播放| 欧美爆乳肉感大码在线观看 | 99久久激情婷婷综合五月天| 久青青草视频手机在线免费观看| 日曰摸日日碰夜夜爽歪歪| 亚洲av成人免费网站| 亚洲男人让女人爽的视频| 97人妻色免费视频| 绝色少妇高潮3在线观看| 97色视频在线观看| 亚洲激情av一区二区| 亚洲欧美日韩视频免费观看| 中文字幕在线第一页成人| 天天通天天透天天插| 亚洲 欧美 精品 激情 偷拍 | 黄色成年网站午夜在线观看| 精品国产高潮中文字幕| 九色视频在线观看免费| 国产精品久久久黄网站| 午夜在线一区二区免费| 亚洲激情,偷拍视频| 精品av国产一区二区三区四区 | 97人妻人人澡爽人人精品| 夜色17s精品人妻熟女| 日韩视频一区二区免费观看| caoporm超碰国产| 亚洲人妻av毛片在线| 亚洲成人线上免费视频观看| 欧美一区二区三区久久久aaa| 一个人免费在线观看ww视频| 日本熟女50视频免费| 日韩中文字幕在线播放第二页| 国产又粗又硬又大视频| 韩国三级aaaaa高清视频 | 青青青青青青草国产| 久久热久久视频在线观看| 91色老99久久九九爱精品| 国产美女一区在线观看| 天天插天天色天天日| 在线免费观看亚洲精品电影| 激情啪啪啪啪一区二区三区| 无忧传媒在线观看视频| 中文字幕av第1页中文字幕| 11久久久久久久久久久| 天天干天天操天天爽天天摸| 欧美乱妇无乱码一区二区| 黑人乱偷人妻中文字幕| av中文字幕在线观看第三页| 国产av福利网址大全| 五月激情婷婷久久综合网| 98视频精品在线观看| 成人高清在线观看视频| 日本脱亚入欧是指什么| 中国无遮挡白丝袜二区精品| 日韩欧美国产一区不卡| 久草电影免费在线观看| 亚洲成人午夜电影在线观看| 91 亚洲视频在线观看| 大鸡吧插入女阴道黄色片| 午夜精品九一唐人麻豆嫩草成人| 亚洲图片偷拍自拍区| 97青青青手机在线视频| 亚洲午夜伦理视频在线 | 国产刺激激情美女网站| 欧美男人大鸡吧插女人视频| aiss午夜免费视频| 黑人解禁人妻叶爱071| 18禁精品网站久久| 东京热男人的av天堂| 日韩不卡中文在线视频网站| 日韩中文字幕福利av| 中文字幕奴隷色的舞台50| 成人av久久精品一区二区| 亚洲丝袜老师诱惑在线观看| 经典国语激情内射视频| 韩国爱爱视频中文字幕| 久久久久久久久久一区二区三区| 国产精品成人xxxx| 精品日产卡一卡二卡国色天香| 亚洲av日韩高清hd| 国产普通话插插视频| 亚洲天堂精品福利成人av| 欧美黄片精彩在线免费观看 | 国产视频精品资源网站| 玩弄人妻熟妇性色av少妇| 五月精品丁香久久久久福利社| 亚洲一区二区三区uij| 人妻素人精油按摩中出| 宅男噜噜噜666免费观看| 国产精品污污污久久| 天天日天天干天天舔天天射| 国产一区二区欧美三区| 国产三级影院在线观看| 91麻豆精品久久久久| tube69日本少妇| av在线shipin| 青草久久视频在线观看| 性欧美日本大妈母与子| 免费在线黄色观看网站| 在线不卡日韩视频播放| av黄色成人在线观看| 天天干天天操天天插天天日| 色婷婷六月亚洲综合香蕉| 国产1区,2区,3区| 中文字幕日韩人妻在线三区| 黄色片年轻人在线观看| 免费福利av在线一区二区三区| 天天日天天摸天天爱| av中文字幕在线观看第三页| 最近中文字幕国产在线| 色天天天天射天天舔| 午夜大尺度无码福利视频 | 97国产福利小视频合集| 国产在线免费观看成人| 动色av一区二区三区| 国产精品成人xxxx| 护士小嫩嫩又紧又爽20p| 搞黄色在线免费观看| 国产又粗又黄又硬又爽| asmr福利视频在线观看| 97欧洲一区二区精品免费| 亚洲熟女久久久36d| 男人天堂av天天操| 人人爽亚洲av人人爽av| 亚洲偷自拍高清视频| 黄色无码鸡吧操逼视频| 亚洲国际青青操综合网站| 成人国产激情自拍三区| 在线免费91激情四射| 亚洲精品亚洲人成在线导航| 成人H精品动漫在线无码播放| av新中文天堂在线网址| 福利视频网久久91| 在线视频精品你懂的| 久久三久久三久久三久久| 亚洲午夜电影之麻豆| 一区二区三区四区视频| 亚洲推理片免费看网站| 久久尻中国美女视频| 亚洲av香蕉一区区二区三区犇| 精内国产乱码久久久久久| 丝袜肉丝一区二区三区四区在线| 欧美一区二区三区四区性视频| 91av中文视频在线| 特大黑人巨大xxxx| 国产美女一区在线观看| 日本午夜爽爽爽爽爽视频在线观看 | 韩国女主播精品视频网站| 久久久久国产成人精品亚洲午夜| 日本啪啪啪啪啪啪啪| 国产精品久久久久久久久福交 | nagger可以指黑人吗| 中文 成人 在线 视频| 亚洲国产精品中文字幕网站| 自拍 日韩 欧美激情| 欧美一区二区三区四区性视频| 黄页网视频在线免费观看| 成人24小时免费视频| 新婚人妻聚会被中出| 天天干天天爱天天色| 免费在线播放a级片| 一区二区三区四区中文| 日本一二三中文字幕| 亚洲精品午夜久久久久| 精品国产在线手机在线| 成人免费做爰高潮视频| 午夜精品亚洲精品五月色| 自拍偷拍亚洲另类色图| 国产污污污污网站在线| 在线亚洲天堂色播av电影| 九色porny九色9l自拍视频| 国产精彩对白一区二区三区| 特一级特级黄色网片| 极品性荡少妇一区二区色欲| 国产变态另类在线观看| 亚洲一区二区三区精品乱码| 青青青aaaa免费| 国产日韩精品一二三区久久久| 亚洲熟女女同志女同| 国产精品sm调教视频| 男人在床上插女人视频| 亚洲男人在线天堂网| 国产九色91在线观看精品| 天堂av在线官网中文| 91人妻精品久久久久久久网站| 日韩亚国产欧美三级涩爱| 自拍偷拍亚洲精品第2页| 在线免费观看日本伦理| 国产成人精品亚洲男人的天堂| 国产中文精品在线观看| 清纯美女在线观看国产| 亚洲综合一区二区精品久久| 美女 午夜 在线视频| 亚洲图库另类图片区| 男女之间激情网午夜在线| 国产精品大陆在线2019不卡| 国产一区二区火爆视频| 国产成人自拍视频播放| 护士小嫩嫩又紧又爽20p| 91免费福利网91麻豆国产精品| 一级黄色片夫妻性生活| 亚洲超碰97人人做人人爱| 最新91精品视频在线| 少妇深喉口爆吞精韩国| 欧美日韩熟女一区二区三区| 中文字幕乱码人妻电影| 国产无遮挡裸体免费直播视频| 五十路av熟女松本翔子| 狠狠地躁夜夜躁日日躁| 可以在线观看的av中文字幕| 欧美韩国日本国产亚洲| 国产精品久久久久久久久福交| 中文字幕成人日韩欧美| 在线免费观看黄页视频| 9l人妻人人爽人人爽| 中字幕人妻熟女人妻a62v网| 亚洲精品 日韩电影| 91人妻精品一区二区在线看| 成年午夜免费无码区| 亚洲熟女久久久36d| 亚洲av色香蕉一区二区三区 | 成人精品在线观看视频| 亚洲成人精品女人久久久| 91精品激情五月婷婷在线| 3344免费偷拍视频| 在线视频国产欧美日韩| 在线免费观看黄页视频| 国产一区二区火爆视频| 日本少妇高清视频xxxxx | 欧美日韩不卡一区不区二区| 欧美一区二区三区乱码在线播放| 自拍偷拍,中文字幕| 9国产精品久久久久老师 | 欧美美女人体视频一区| 韩国黄色一级二级三级| 久久久久久久久久性潮| 欧洲欧美日韩国产在线| 亚洲欧美一卡二卡三卡| 欧美偷拍自拍色图片| 男女啪啪视频免费在线观看 | 国产黄色大片在线免费播放| 天天插天天狠天天操| 欧美中文字幕一区最新网址| 日韩美女福利视频网| 亚洲精品av在线观看| 2021天天色天天干| 色综合久久无码中文字幕波多| 亚洲2021av天堂| 中文字幕视频一区二区在线观看| av在线观看网址av| 国产精品久久久久久美女校花| 国产欧美日韩在线观看不卡| 中文字幕在线永久免费播放| 一区二区麻豆传媒黄片| 亚洲成人熟妇一区二区三区 | 日本欧美视频在线观看三区| 久久丁香婷婷六月天| 中文字幕无码一区二区免费| 久久亚洲天堂中文对白| 高潮喷水在线视频观看| 成人影片高清在线观看| 亚洲免费视频欧洲免费视频| 狠狠嗨日韩综合久久| 色哟哟在线网站入口| 日本美女性生活一级片| 中文字幕一区二区三区人妻大片| 人妻激情图片视频小说| 老司机福利精品免费视频一区二区 | 一区二区视频在线观看免费观看| 熟女在线视频一区二区三区| 深夜男人福利在线观看| 3D动漫精品啪啪一区二区下载| 大陆精品一区二区三区久久| 国产午夜男女爽爽爽爽爽视频| 亚洲美女美妇久久字幕组| 激情五月婷婷综合色啪| 成人30分钟免费视频| 五十路息与子猛烈交尾视频| 1区2区3区4区视频在线观看| brazzers欧熟精品系列| 久久久久国产成人精品亚洲午夜| 日本少妇的秘密免费视频| 99热这里只有精品中文| 天天操天天操天天碰| 91成人精品亚洲国产| 51精品视频免费在线观看| 国产精品视频欧美一区二区 | av老司机亚洲一区二区| 偷拍3456eee| aiss午夜免费视频| 天堂av中文在线最新版| 国产成人综合一区2区| 三级av中文字幕在线观看| 中文字幕人妻三级在线观看| 岛国一区二区三区视频在线| 亚洲在线免费h观看网站| 一区二区视频视频视频| 日韩一区二区三区三州| 很黄很污很色的午夜网站在线观看 | 早川濑里奈av黑人番号| 2020久久躁狠狠躁夜夜躁| 国产片免费观看在线观看| 人妻久久久精品69系列| 亚洲av可乐操首页| 久久这里有免费精品| 自拍偷拍日韩欧美亚洲| 在线观看免费视频网| 人人爽亚洲av人人爽av| 日韩av熟妇在线观看| 黄色成人在线中文字幕| 久久久久久久一区二区三| 91人妻精品久久久久久久网站| 18禁无翼鸟成人在线| 国产va精品免费观看| 国产一区av澳门在线观看| 国产实拍勾搭女技师av在线| 99久久中文字幕一本人| 国产男女视频在线播放| 日韩一区二区电国产精品| 91试看福利一分钟| 99热99这里精品6国产| 国产福利小视频大全| 啊啊好慢点插舔我逼啊啊啊视频| 一区二区视频视频视频| 午夜美女少妇福利视频| 国产精品免费不卡av| 亚洲欧美福利在线观看| 丝袜美腿视频诱惑亚洲无| 国产乱子伦精品视频潮优女| 999九九久久久精品| 成人av在线资源网站| 亚洲丝袜老师诱惑在线观看| 91久久国产成人免费网站| 中文字幕 码 在线视频| 夜夜骑夜夜操夜夜奸| 五月激情婷婷久久综合网| 一区二区免费高清黄色视频| 性生活第二下硬不起来| 视频一区二区在线免费播放| 亚洲欧美一区二区三区爱爱动图| 成人综合亚洲欧美一区 | 中文字幕一区的人妻欧美日韩| 中文字幕日韩人妻在线三区| 午夜在线精品偷拍一区二| 偷拍自拍亚洲视频在线观看| 好男人视频在线免费观看网站| 人妻丝袜诱惑我操她视频| 中文字幕日本人妻中出| 欲乱人妻少妇在线视频裸| 中文人妻AV久久人妻水| 黄色片年轻人在线观看| 中文字幕视频一区二区在线观看| 国产精品视频欧美一区二区| 在线国产中文字幕视频| 精品成人午夜免费看| 国产第一美女一区二区三区四区| 人妻无码色噜噜狠狠狠狠色| 经典国语激情内射视频| 91‖亚洲‖国产熟女| 19一区二区三区在线播放| 天天色天天舔天天射天天爽| 亚洲1卡2卡三卡4卡在线观看 | 日韩熟女系列一区二区三区| 日韩不卡中文在线视频网站 | 人妻少妇亚洲精品中文字幕| 性色av一区二区三区久久久| 婷婷综合亚洲爱久久| 亚洲一区二区人妻av| 免费十精品十国产网站| 午夜精品在线视频一区| 美女福利视频导航网站 | 在线观看的a站 最新| 国产又大又黄免费观看| 一区二区三区四区中文| 国产视频在线视频播放| 亚洲中文字幕校园春色| 亚洲精品国产在线电影| 亚洲欧美清纯唯美另类| 色噜噜噜噜18禁止观看| 国产亚洲国产av网站在线| 欧洲国产成人精品91铁牛tv| 色爱av一区二区三区| 搡老熟女一区二区在线观看| 中文字幕在线第一页成人| 91精品免费久久久久久| 天天日天天透天天操| 久久午夜夜伦痒痒想咳嗽P| 精品av久久久久久久| 国产日韩av一区二区在线| 国产日韩av一区二区在线| 久久久极品久久蜜桃| 18禁美女羞羞免费网站| 黄色男人的天堂视频| 国产又粗又黄又硬又爽| 日韩一区二区电国产精品| 成熟熟女国产精品一区| www久久久久久久久久久| 搞黄色在线免费观看| 成人av久久精品一区二区| 精品一区二区三区欧美| 18禁网站一区二区三区四区| 蝴蝶伊人久久中文娱乐网| 家庭女教师中文字幕在线播放| 国产成人一区二区三区电影网站 | 国产一区自拍黄视频免费观看| 久久丁香花五月天色婷婷| 青青草成人福利电影| 啊慢点鸡巴太大了啊舒服视频| 国产普通话插插视频| 国内精品在线播放第一页| 亚洲色偷偷综合亚洲AV伊人| 欧美日本aⅴ免费视频| 人人妻人人澡欧美91精品| 大香蕉大香蕉在线看| 成人30分钟免费视频| 夜夜操,天天操,狠狠操| 国产白袜脚足J棉袜在线观看| 在线视频免费观看网| 天天色天天爱天天爽| 97欧洲一区二区精品免费| 狠狠鲁狠狠操天天晚上干干| 精品一区二区亚洲欧美| 日本韩国免费一区二区三区视频| 岛国黄色大片在线观看| 日韩美女搞黄视频免费| 精品av国产一区二区三区四区| 制服丝袜在线人妻中文字幕| 亚洲国产美女一区二区三区软件| 免费观看国产综合视频| 人人妻人人澡人人爽人人dvl| 成人国产激情自拍三区| 粉嫩欧美美人妻小视频| 最近中文2019年在线看| 涩爱综合久久五月蜜臀| 93视频一区二区三区| 久久精品亚洲国产av香蕉| 最近的中文字幕在线mv视频| gav成人免费播放| 99精品亚洲av无码国产另类| rct470中文字幕在线| 在线免费观看黄页视频| 不戴胸罩引我诱的隔壁的人妻| 亚洲精品麻豆免费在线观看| 免费高清自慰一区二区三区网站 | 欧美日本国产自视大全| 91免费放福利在线观看| gav成人免费播放| 男女啪啪视频免费在线观看| 国产美女午夜福利久久| 美女张开腿让男生操在线看| 在线观看黄色成年人网站| 伊人开心婷婷国产av| 搞黄色在线免费观看| 国产极品精品免费视频| 久久精品36亚洲精品束缚| 操日韩美女视频在线免费看| 色吉吉影音天天干天天操| 瑟瑟视频在线观看免费视频| 日韩无码国产精品强奸乱伦| av在线观看网址av| 又色又爽又黄又刺激av网站| 把腿张开让我插进去视频| 抽查舔水白紧大视频| 日本裸体熟妇区二区欧美| 丝袜长腿第一页在线| 在线观看的a站 最新| 人妻最新视频在线免费观看| 性感美女福利视频网站| 摧残蹂躏av一二三区| 天天日天天干天天爱| 亚洲最大黄 嗯色 操 啊| 动漫美女的小穴视频| 婷婷综合蜜桃av在线| 涩爱综合久久五月蜜臀| av在线观看网址av| 天天夜天天日天天日| 日韩亚洲高清在线观看| 肏插流水妹子在线乐播下载| 特一级特级黄色网片| 国产精品午夜国产小视频| 大鸡八强奸视频在线观看| 综合色区亚洲熟妇shxstz| 免费av岛国天堂网站| 青青草在观免费国产精品| 人妻无码中文字幕专区| 任你操任你干精品在线视频| 免费高清自慰一区二区三区网站| 日韩午夜福利精品试看| 黄色中文字幕在线播放| 中文字幕日韩精品日本| 欧美精品欧美极品欧美视频| 91亚洲精品干熟女蜜桃频道| 欧美一区二区三区在线资源| 91国内精品久久久久精品一| 精品乱子伦一区二区三区免费播| 精品高潮呻吟久久av| 天天色天天操天天透| 亚洲精品福利网站图片| 日韩三级电影华丽的外出| 亚洲成人黄色一区二区三区 | 久久久久久九九99精品| 97青青青手机在线视频| 激情五月婷婷免费视频| 亚洲欧美综合另类13p| 午夜精品亚洲精品五月色| www久久久久久久久久久| 摧残蹂躏av一二三区| gav成人免费播放| 国产性色生活片毛片春晓精品| 天天艹天天干天天操| 91综合久久亚洲综合| 成人色综合中文字幕| 久久精品36亚洲精品束缚| 日本在线一区二区不卡视频| 亚洲区美熟妇久久久久| 久久这里只有精品热视频| 色哟哟在线网站入口| 人妻3p真实偷拍一二区| asmr福利视频在线观看| 一色桃子久久精品亚洲| 色婷婷六月亚洲综合香蕉| 久久久超爽一二三av| okirakuhuhu在线观看| 日本美女成人在线视频| 班长撕开乳罩揉我胸好爽| 92福利视频午夜1000看| 免费人成黄页网站在线观看国产| 青青青青青免费视频| 91国语爽死我了不卡| 2019av在线视频| 午夜久久久久久久精品熟女| 中文字幕一区二区自拍| 肏插流水妹子在线乐播下载| 欧美黄片精彩在线免费观看| 大鸡巴插入美女黑黑的阴毛| 91九色porny蝌蚪国产成人| 一区二区三区四区五区性感视频| 国产福利小视频大全| 国产密臀av一区二区三| 天天日夜夜操天天摸| 2022国产综合在线干| 动漫美女的小穴视频| 久久久久久久久久久久久97| 绝色少妇高潮3在线观看| 国产揄拍高清国内精品对白| 欧美一区二区三区高清不卡tv| 综合激情网激情五月天| 一区二区久久成人网| 同居了嫂子在线播高清中文| 一区二区视频视频视频| 2o22av在线视频| 欧美偷拍亚洲一区二区| wwwxxx一级黄色片| 国产又粗又黄又硬又爽| 国产极品精品免费视频| 经典国语激情内射视频| 岛国黄色大片在线观看| 天天射夜夜操综合网| 久久久久只精品国产三级| 日本在线不卡免费视频| 欧美成人精品在线观看| 偷拍自拍亚洲美腿丝袜| 亚洲欧美久久久久久久久| 亚洲高清国产拍青青草原| 日韩精品中文字幕播放| 又黄又刺激的午夜小视频| 老司机你懂得福利视频| 国产日本欧美亚洲精品视| 国产成人小视频在线观看无遮挡| 国产不卡av在线免费| 激情综合治理六月婷婷| 99热国产精品666| 人妻熟女在线一区二区| 欧美一区二区中文字幕电影| 国产视频网站一区二区三区 | 777奇米久久精品一区| 国内精品在线播放第一页| 中文字幕成人日韩欧美| 日本一区精品视频在线观看| 91久久综合男人天堂| 91中文字幕免费在线观看| 亚洲av无女神免非久久| 老熟妇xxxhd老熟女| 粉嫩欧美美人妻小视频| 在线制服丝袜中文字幕| 91国产在线视频免费观看| 久久国产精品精品美女| 少妇被强干到高潮视频在线观看 | 日本免费午夜视频网站| 38av一区二区三区| 91免费观看在线网站| 欧美黑人性暴力猛交喷水| 久久精品国产999| 福利在线视频网址导航| 大胸性感美女羞爽操逼毛片| 日韩成人综艺在线播放| 91麻豆精品传媒国产黄色片| 欧美日韩激情啪啪啪| 91国产资源在线视频| 国产变态另类在线观看| 成人av天堂丝袜在线观看| 97年大学生大白天操逼| 丁香花免费在线观看中文字幕| 亚洲一区二区久久久人妻| 日本美女成人在线视频| 唐人色亚洲av嫩草| 亚洲美女美妇久久字幕组| 搡老熟女一区二区在线观看| 日本三极片视频网站观看| 亚洲国产香蕉视频在线播放 | 欧美精品资源在线观看| 国产之丝袜脚在线一区二区三区 | 天天日天天鲁天天操| 在线观看视频网站麻豆| 国产精品国产三级国产精东 | 免费在线观看视频啪啪| 亚洲av自拍天堂网| 一色桃子久久精品亚洲| 日本av在线一区二区三区| 亚洲一区久久免费视频| 国产不卡av在线免费| 天堂va蜜桃一区入口| 精品国产在线手机在线| 一区二区视频视频视频| 中文乱理伦片在线观看| 91成人在线观看免费视频| 一区二区三区在线视频福利| 亚洲一区二区三区av网站| 男人天堂最新地址av| 国产亚洲视频在线观看| 在线 中文字幕 一区| 天天干天天操天天插天天日| 欧美80老妇人性视频| 97超碰免费在线视频| 亚洲国产中文字幕啊啊啊不行了| 亚洲中文精品字幕在线观看| 亚洲美女高潮喷浆视频| 熟妇一区二区三区高清版| 熟女少妇激情五十路| 黄色成人在线中文字幕| 中文字幕在线第一页成人| 久久久久久久精品老熟妇| 成人av中文字幕一区| 国产麻豆国语对白露脸剧情| 9色精品视频在线观看| 好男人视频在线免费观看网站| 欧美日韩高清午夜蜜桃大香蕉| 久久久精品欧洲亚洲av| 亚洲免费福利一区二区三区| 中国老熟女偷拍第一页| 欧美日本aⅴ免费视频| 日韩午夜福利精品试看| 久久尻中国美女视频| 狍和女人的王色毛片| 亚洲免费视频欧洲免费视频| 综合激情网激情五月天| 日日操夜夜撸天天干| 国产激情av网站在线观看| 久草视频中文字幕在线观看| 一区二区三区欧美日韩高清播放| 国产亚洲天堂天天一区| 日本福利午夜电影在线观看| 啊啊好慢点插舔我逼啊啊啊视频 | 97青青青手机在线视频| 天天色天天操天天舔| 成人色综合中文字幕| 亚洲一区二区三区在线高清| 绝顶痉挛大潮喷高潮无码| 97国产福利小视频合集| 欧美成人综合视频一区二区| 午夜频道成人在线91| 热久久只有这里有精品| 黄色成人在线中文字幕| 天堂资源网av中文字幕| 淫秽激情视频免费观看| 色哟哟国产精品入口| 天码人妻一区二区三区在线看| 521精品视频在线观看| 91中文字幕免费在线观看| 97少妇精品在线观看| 在线观看操大逼视频| 激情内射在线免费观看| 男人操女人逼逼视频网站| 啪啪啪18禁一区二区三区| 日本xx片在线观看| 亚洲公开视频在线观看| 91高清成人在线视频| 久久久久久九九99精品| 好吊操视频这里只有精品| 国产三级影院在线观看| 自拍偷拍,中文字幕| 欧美一区二区三区高清不卡tv| 亚洲老熟妇日本老妇| 国产黄色a级三级三级三级| 亚洲Av无码国产综合色区| 天堂资源网av中文字幕| 精品国产成人亚洲午夜| 99精品视频在线观看免费播放 | 偷拍自拍视频图片免费| 99一区二区在线观看| 日本少妇人妻xxxxxhd| 天天日天天透天天操| 男女第一次视频在线观看| 91高清成人在线视频| 最新国产精品拍在线观看| 五月天久久激情视频| 亚洲av人人澡人人爽人人爱| 国产在线自在拍91国语自产精品| 黄色三级网站免费下载| 69精品视频一区二区在线观看| 国产又粗又黄又硬又爽| 亚洲美女自偷自拍11页| 欧美日韩精品永久免费网址| 免费男阳茎伸入女阳道视频 | 五十路av熟女松本翔子| 五十路熟女人妻一区二| 黑人3p华裔熟女普通话| 国产欧美精品不卡在线| 粗大的内捧猛烈进出爽大牛汉子| 亚洲少妇人妻无码精品| 中文字幕国产专区欧美激情| 日韩人妻丝袜中文字幕| 亚洲福利精品视频在线免费观看| 老司机在线精品福利视频| 强行扒开双腿猛烈进入免费版| 99的爱精品免费视频| 2020av天堂网在线观看| 亚洲成人av一区在线| 中文字幕 人妻精品| 日本女大学生的黄色小视频| 欧美老妇精品另类不卡片| 国产精品一区二区av国| 欧洲黄页网免费观看| 亚欧在线视频你懂的| 黑人乱偷人妻中文字幕| 亚洲人妻视频在线网| av乱码一区二区三区| 人妻丝袜诱惑我操她视频| nagger可以指黑人吗| 久久精品亚洲国产av香蕉| 国产成人精品一区在线观看 | 美味人妻2在线播放| 亚洲午夜电影在线观看| 亚洲精品中文字幕下载| 国产va在线观看精品| 在线观看av亚洲情色| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | 色婷婷精品大在线观看| 91久久国产成人免费网站| 国产女人被做到高潮免费视频 | 久久热久久视频在线观看| 久草视频首页在线观看| 婷婷六月天中文字幕| 无码精品一区二区三区人| 亚洲av色香蕉一区二区三区| 蜜桃视频在线欧美一区| 青青草人人妻人人妻| 在线视频免费观看网| 日本免费午夜视频网站| 91‖亚洲‖国产熟女| 国产精彩对白一区二区三区| 黄页网视频在线免费观看| 精品91自产拍在线观看一区| 天天躁夜夜躁日日躁a麻豆| 老司机午夜精品视频资源| 亚洲欧美国产综合777| 中文字幕成人日韩欧美| av天堂资源最新版在线看| 欧美激情精品在线观看| 激情国产小视频在线| 在线免费观看日本片| 2021久久免费视频| av在线播放国产不卡| 播放日本一区二区三区电影| 久草电影免费在线观看| 老司机你懂得福利视频| 欧美色呦呦最新网址| 在线免费观看av日韩| 欧美精品久久久久久影院| 2021国产一区二区| 五十路熟女人妻一区二区9933| 黄色成年网站午夜在线观看| 天天操天天污天天射| 东京干手机福利视频| 91老师蜜桃臀大屁股| 操人妻嗷嗷叫视频一区二区| 人人妻人人人操人人人爽| 在线播放一区二区三区Av无码| av中文字幕网址在线| 三上悠亚和黑人665番号| 天天操夜夜骑日日摸| 精品欧美一区二区vr在线观看 | 亚洲av黄色在线网站| 天堂av在线最新版在线| 91免费福利网91麻豆国产精品| 超级碰碰在线视频免费观看| 免费观看国产综合视频| 偷拍美女一区二区三区| 免费看高清av的网站| 久草视频首页在线观看| 亚洲av自拍偷拍综合| 午夜91一区二区三区| 亚洲伊人久久精品影院一美女洗澡| 91九色porny国产在线| 91国内视频在线观看| 美女骚逼日出水来了| 在线观看的黄色免费网站| 91精品国产高清自在线看香蕉网| 国产日韩精品电影7777| 韩国亚洲欧美超一级在线播放视频| 91精品综合久久久久3d动漫| av俺也去在线播放| 中文字幕在线观看极品视频| 亚洲成人精品女人久久久| 人人妻人人爱人人草| 亚洲欧美人精品高清| 亚洲精品麻豆免费在线观看| 一区二区三区蜜臀在线| av中文字幕网址在线| 大陆av手机在线观看| 一区二区三区综合视频| 黄色片黄色片wyaa| 99久久中文字幕一本人| 亚洲激情唯美亚洲激情图片| 老司机在线精品福利视频| 青青青青视频在线播放| 天天日天天添天天爽| 一区二区三区美女毛片| 欧美男人大鸡吧插女人视频| 亚洲少妇高潮免费观看| 亚洲精品色在线观看视频| 狠狠的往里顶撞h百合| 婷婷午夜国产精品久久久| 日韩欧美国产精品91| 插小穴高清无码中文字幕| 亚洲男人让女人爽的视频| 欧洲精品第一页欧洲精品亚洲| 快插进小逼里大鸡吧视频| 人妻另类专区欧美制服| 激情五月婷婷免费视频| 亚洲图片欧美校园春色| av久久精品北条麻妃av观看| 亚洲天堂av最新网址| 中文字幕熟女人妻久久久| 93精品视频在线观看| 最新国产精品网址在线观看| 适合午夜一个人看的视频| 亚洲精品午夜aaa久久| 亚洲一区久久免费视频| 中文字母永久播放1区2区3区 | 1024久久国产精品| 99亚洲美女一区二区三区| 激情图片日韩欧美人妻| 成人影片高清在线观看 | av网址在线播放大全| 91精品啪在线免费| 亚洲熟女女同志女同| 久久这里只有精品热视频| 国产乱子伦精品视频潮优女| 欧美男同性恋69视频| 日本一道二三区视频久久| 啪啪啪啪啪啪啪免费视频| 人妻久久久精品69系列| av网址在线播放大全| 91精品资源免费观看| 黄页网视频在线免费观看| 91精品国产观看免费| 嫩草aⅴ一区二区三区| 亚洲另类综合一区小说| 欧美国品一二三产区区别| 亚洲人妻av毛片在线| 天天插天天色天天日| 伊人成人综合开心网| 欧美精品激情在线最新观看视频| 亚洲高清一区二区三区视频在线| 欧美天堂av无线av欧美| 亚洲欧美激情国产综合久久久| 欧美视频一区免费在线| 国产白嫩美女一区二区| 最近中文2019年在线看| 不卡一不卡二不卡三| 北条麻妃av在线免费观看| 亚洲中文字字幕乱码| 啊啊啊想要被插进去视频| 国产janese在线播放| 韩国亚洲欧美超一级在线播放视频| 日本在线不卡免费视频| 日韩欧美中文国产在线| 伊人精品福利综合导航| 日本性感美女写真视频| 国产第一美女一区二区三区四区| 黑人借宿ntr人妻的沦陷2| aⅴ五十路av熟女中出| 欧洲亚洲欧美日韩综合| 午夜精品九一唐人麻豆嫩草成人| 在线新三级黄伊人网| 夏目彩春在线中文字幕| 久久久久久久久久性潮| 偷拍美女一区二区三区| 熟妇一区二区三区高清版| 亚洲变态另类色图天堂网| 国产美女一区在线观看| 美女福利视频导航网站| 78色精品一区二区三区| 亚洲熟女久久久36d| 国语对白xxxx乱大交| 国产在线自在拍91国语自产精品| 精品少妇一二三视频在线| 天天艹天天干天天操| 久久这里有免费精品| 人人妻人人爽人人添夜| 欧美一区二区三区高清不卡tv| 色综合久久久久久久久中文| 国产品国产三级国产普通话三级| 边摸边做超爽毛片18禁色戒| 午夜青青草原网在线观看| 初美沙希中文字幕在线| 韩国黄色一级二级三级| 国产精品国色综合久久| 夜夜嗨av蜜臀av| 精品日产卡一卡二卡国色天香| 国产丰满熟女成人视频| 91精品国产综合久久久蜜| 99精品免费观看视频| 超碰在线观看免费在线观看| 日本黄在免费看视频| 中文字幕一区二区亚洲一区| 社区自拍揄拍尻屁你懂的| 成人国产小视频在线观看| 久久永久免费精品人妻专区| 91啪国自产中文字幕在线| 国产一区二区视频观看| 日本av高清免费网站| 青青色国产视频在线| 人妻无码中文字幕专区| 欧美特级特黄a大片免费| 日韩美女精品视频在线观看网站| 蜜臀成人av在线播放| 视频二区在线视频观看| 99人妻视频免费在线| 欧美激情精品在线观看| 2021久久免费视频| 亚洲成人熟妇一区二区三区| caoporm超碰国产| 清纯美女在线观看国产| 91国产资源在线视频| 顶级尤物粉嫩小尤物网站| 欧美黑人性猛交xxxxⅹooo| 国产精品福利小视频a| 99精品久久久久久久91蜜桃| 欧美黑人与人妻精品| 久草视频在线看免费| 国产精品福利小视频a| 91亚洲手机在线视频播放| 在线免费观看欧美小视频| 国产亚洲国产av网站在线| 国产性感美女福利视频| 9l人妻人人爽人人爽| 2020久久躁狠狠躁夜夜躁| 久久久久久性虐视频| 少妇人妻真实精品视频| 福利午夜视频在线合集| rct470中文字幕在线| 亚洲成人av一区久久| 摧残蹂躏av一二三区| 午夜福利人人妻人人澡人人爽| 色婷婷久久久久swag精品| 中文字幕高清免费在线人妻| 综合一区二区三区蜜臀| 毛片av在线免费看| 大香蕉大香蕉在线看| 午夜福利资源综合激情午夜福利资| 不卡一不卡二不卡三| 超级福利视频在线观看| 男生用鸡操女生视频动漫| 亚洲va国产va欧美va在线| 欧美日本在线视频一区| 精品一区二区亚洲欧美| 亚洲最大黄了色网站| jiuse91九色视频| 天天艹天天干天天操| 一区二区麻豆传媒黄片| 色呦呦视频在线观看视频| 久久99久久99精品影院| 大鸡巴操娇小玲珑的女孩逼| 超碰在线中文字幕一区二区| 超pen在线观看视频公开97| 日韩av有码中文字幕| 白嫩白嫩美女极品国产在线观看| 成人区人妻精品一区二视频| 欧美精品一二三视频| 专门看国产熟妇的网站| 中文字幕人妻熟女在线电影| 精品国产在线手机在线| 性感美女诱惑福利视频| 最新国产精品拍在线观看| 欧美一区二区三区高清不卡tv| 午夜在线观看岛国av,com| 在线观看av亚洲情色| 天天日天天天天天天天天天天| 中文字幕在线视频一区二区三区| 亚洲一区二区三区久久午夜| 男人天堂av天天操| 一个人免费在线观看ww视频| 激情色图一区二区三区| 国产视频网站一区二区三区| 久久久久久97三级| 大香蕉伊人国产在线| 中文字幕免费福利视频6| 秋霞午夜av福利经典影视| 狠狠鲁狠狠操天天晚上干干| 欧美美女人体视频一区| 亚洲人妻视频在线网| 在线制服丝袜中文字幕| 桃色视频在线观看一区二区| 馒头大胆亚洲一区二区| 四川五十路熟女av| 国产在线自在拍91国语自产精品| 欧美日韩在线精品一区二区三| 久久久久久久99精品| 亚洲va欧美va人人爽3p| 中文字幕人妻一区二区视频| 伊人网中文字幕在线视频| 红桃av成人在线观看| 特大黑人巨大xxxx| 欧美亚洲自偷自拍 在线| 久久www免费人成一看片| 91麻豆精品久久久久| 91久久综合男人天堂| 亚洲一区二区三区久久受 | 五十路丰满人妻熟妇| 绝顶痉挛大潮喷高潮无码 | 亚洲午夜福利中文乱码字幕| 超碰在线中文字幕一区二区| 大白屁股精品视频国产| 大陆胖女人与丈夫操b国语高清| 东京热男人的av天堂| 欧美少妇性一区二区三区| 亚洲精品无码色午夜福利理论片| 欧美第一页在线免费观看视频| 国产精品三级三级三级| 超碰97免费人妻麻豆| 又粗又硬又猛又爽又黄的| av新中文天堂在线网址| 色花堂在线av中文字幕九九| 亚洲人妻国产精品综合| 久久久人妻一区二区| 日本黄在免费看视频| 红杏久久av人妻一区| 91麻豆精品久久久久| 蜜臀av久久久久久久| 精产国品久久一二三产区区别| 超污视频在线观看污污污| 精品美女久久久久久| 91麻豆精品秘密入口在线观看| 99re国产在线精品| 岛国一区二区三区视频在线| 韩国AV无码不卡在线播放| 日本黄色特一级视频| 亚洲欧美成人综合视频| 天天操夜夜骑日日摸| 国产之丝袜脚在线一区二区三区| 国产精品黄片免费在线观看| 国产精品久久久黄网站| 老司机福利精品视频在线| 亚洲伊人久久精品影院一美女洗澡 | 黑人乱偷人妻中文字幕| 香港一级特黄大片在线播放| 亚洲免费va在线播放| 欧美视频一区免费在线| 免费大片在线观看视频网站| 国产黄色片在线收看| 免费一级特黄特色大片在线观看 | heyzo蜜桃熟女人妻| 蜜桃色婷婷久久久福利在线 | 亚洲av极品精品在线观看| 1769国产精品视频免费观看| 国产亚洲四十路五十路| 久久久久久久久久一区二区三区| 亚洲中文字字幕乱码| 人妻少妇一区二区三区蜜桃| 黑人乱偷人妻中文字幕| 天天日天天添天天爽| 操日韩美女视频在线免费看| 国产91嫩草久久成人在线视频| 快插进小逼里大鸡吧视频| 3337p日本欧洲大胆色噜噜| 亚洲一区自拍高清免费视频| 大鸡巴插入美女黑黑的阴毛| 激情五月婷婷综合色啪| 国产欧美日韩在线观看不卡| 黑人乱偷人妻中文字幕| 2012中文字幕在线高清| 天天操天天干天天插| 亚洲日本一区二区三区| 一级黄片大鸡巴插入美女| 人人在线视频一区二区| 在线观看免费av网址大全| 少妇人妻二三区视频| 欧美成人一二三在线网| 亚洲国产免费av一区二区三区 | 中文字幕日韩91人妻在线| 国产精品人久久久久久| 日本一二三中文字幕| 人妻少妇一区二区三区蜜桃| 日本成人一区二区不卡免费在线| 天天日天天日天天擦| 亚洲av色图18p| 亚洲高清自偷揄拍自拍| 搡老熟女一区二区在线观看| 欧美男同性恋69视频| 国产日韩一区二区在线看| 亚洲欧美国产综合777| 亚洲中文精品人人免费| 国产高清精品极品美女| 午夜蜜桃一区二区三区| 好吊视频—区二区三区| 欧美日本国产自视大全| 国产综合精品久久久久蜜臀| 亚洲国产成人av在线一区| 精品美女福利在线观看| 在线观看的黄色免费网站| 丰满的子国产在线观看| 中文字幕成人日韩欧美| 亚洲精品亚洲人成在线导航 | 最新91精品视频在线| 很黄很污很色的午夜网站在线观看| 欧美亚洲牲夜夜综合久久| 四川五十路熟女av| 亚洲一区二区人妻av| 亚洲激情,偷拍视频| 天天干天天日天天谢综合156| 日韩a级精品一区二区| 红桃av成人在线观看| 99热国产精品666| 视频久久久久久久人妻| 青青青激情在线观看视频| 亚洲美女自偷自拍11页| 亚洲熟色妇av日韩熟色妇在线| 69精品视频一区二区在线观看| 综合精品久久久久97| 天天操天天爽天天干| xxx日本hd高清| 日日夜夜大香蕉伊人| 亚洲福利天堂久久久久久| 91‖亚洲‖国产熟女| 黄色片黄色片wyaa| 亚洲福利天堂久久久久久| 青青社区2国产视频| 青青青国产片免费观看视频| 亚洲成人激情av在线| 一本一本久久a久久精品综合不卡| 久久香蕉国产免费天天| 亚洲免费成人a v| 懂色av之国产精品| 黄色片年轻人在线观看| 一区二区久久成人网| 午夜久久久久久久精品熟女| 国产日韩精品电影7777| 亚洲天堂精品福利成人av| 真实国模和老外性视频| 视频一区 二区 三区 综合| 2022天天干天天操| 国产精品国产三级麻豆| 中文字幕奴隷色的舞台50| 女蜜桃臀紧身瑜伽裤| 不卡一不卡二不卡三| 色哟哟国产精品入口| weyvv5国产成人精品的视频| 成人网18免费视频版国产| 4个黑人操素人视频网站精品91| 日本脱亚入欧是指什么| 欧美精品免费aaaaaa| sspd152中文字幕在线| 天天干天天爱天天色| 高清一区二区欧美系列| 亚洲中文字幕人妻一区| 毛片一级完整版免费| 国产日韩精品一二三区久久久| 久久久久久久久久久免费女人| 欧美成一区二区三区四区| 2017亚洲男人天堂| 日美女屁股黄邑视频| 果冻传媒av一区二区三区| 亚洲精品在线资源站| 三上悠亚和黑人665番号| 姐姐的朋友2在线观看中文字幕| 亚洲另类图片蜜臀av| 18禁污污污app下载| 清纯美女在线观看国产| 3344免费偷拍视频| 国产在线观看黄色视频| 狠狠躁狠狠爱网站视频 | 亚洲福利天堂久久久久久| 日日夜夜精品一二三| 91传媒一区二区三区| 亚洲欧美久久久久久久久| 宅男噜噜噜666免费观看| 国产一区二区欧美三区| 精品黑人巨大在线一区| 国产一区自拍黄视频免费观看| 中文亚洲欧美日韩无线码| av日韩在线免费播放| 天天干天天日天天谢综合156| 日本18禁久久久久久| 久草免费人妻视频在线| 美女福利视频网址导航| 老司机福利精品免费视频一区二区 | 国产中文精品在线观看| 国产中文精品在线观看| 亚洲av日韩av网站| 国产综合精品久久久久蜜臀| 黄色大片免费观看网站| 欧美成人精品欧美一级黄色| 欧美性受xx黑人性猛交| 骚货自慰被发现爆操| 一区二区三区四区五区性感视频| 欧美viboss性丰满| 啊啊好慢点插舔我逼啊啊啊视频| 2o22av在线视频| 51国产成人精品视频| 亚洲av天堂在线播放| 日本熟妇色熟妇在线观看| 四虎永久在线精品免费区二区| 日本熟女精品一区二区三区| 丰满熟女午夜福利视频| 国产真实乱子伦a视频| 亚洲无码一区在线影院| 国产乱子伦精品视频潮优女| 国产精品人久久久久久| 97精品视频在线观看| 国产亚洲精品视频合集| 久草视频首页在线观看| xxx日本hd高清| xxx日本hd高清| 好男人视频在线免费观看网站| 欧美激情电影免费在线| 中文字幕,亚洲人妻| 伊人情人综合成人久久网小说| 国产久久久精品毛片| 精品一区二区三区三区88| 早川濑里奈av黑人番号| 香蕉91一区二区三区| 亚洲精品乱码久久久本| 日本熟妇一区二区x x| 一区国内二区日韩三区欧美| 9国产精品久久久久老师| 久精品人妻一区二区三区| 在线观看的黄色免费网站| 黄色视频成年人免费观看| 亚洲一区制服丝袜美腿| 美女张开两腿让男人桶av| 91福利在线视频免费观看| 亚洲丝袜老师诱惑在线观看| 啊啊好慢点插舔我逼啊啊啊视频| 黄色视频在线观看高清无码| 香蕉av影视在线观看| 国产欧美精品不卡在线| 日本乱人一区二区三区| 天天日天天做天天日天天做| 91在线视频在线精品3| 蜜桃色婷婷久久久福利在线| 黑人3p华裔熟女普通话| 国产自拍在线观看成人| 成熟熟女国产精品一区| 国产卡一卡二卡三乱码手机| 亚洲欧美国产综合777| 色综合久久久久久久久中文| 在线视频自拍第三页| 一区二区熟女人妻视频| 精品区一区二区三区四区人妻| 日曰摸日日碰夜夜爽歪歪| 一个色综合男人天堂| 亚洲精品国产综合久久久久久久久| 超污视频在线观看污污污 | 婷婷久久久久深爱网| 懂色av蜜桃a v| av大全在线播放免费| 欧美第一页在线免费观看视频| 亚洲成av人无码不卡影片一| av中文字幕国产在线观看| 日本少妇高清视频xxxxx| 亚洲av在线观看尤物| 91精品啪在线免费| 国产av福利网址大全| 91麻豆精品秘密入口在线观看| 黑人巨大的吊bdsm| 东京热男人的av天堂| 国际av大片在线免费观看| 欧美黑人性暴力猛交喷水| 亚洲精品亚洲人成在线导航| 人人妻人人爽人人添夜| av资源中文字幕在线观看| 欧美专区第八页一区在线播放| 亚洲狠狠婷婷综合久久app | 清纯美女在线观看国产| v888av在线观看视频| 亚洲一级av无码一级久久精品| 57pao国产一区二区| 888欧美视频在线| 亚洲一区二区三区uij| 一区二区在线观看少妇| 福利视频广场一区二区| 中文字幕—97超碰网| 日本啪啪啪啪啪啪啪| 久久艹在线观看视频| 国产男女视频在线播放| 国产刺激激情美女网站| 欧洲亚洲欧美日韩综合| 丰满少妇翘臀后进式| 91久久综合男人天堂| 欧美日本aⅴ免费视频| 2022精品久久久久久中文字幕| 91超碰青青中文字幕| 青青青国产免费视频| 中国老熟女偷拍第一页| 国产黄色a级三级三级三级| 国产妇女自拍区在线观看| 中文字幕成人日韩欧美| 精品美女久久久久久| 天天日天天干天天爱| 夜夜嗨av蜜臀av| 97色视频在线观看| 中文字幕成人日韩欧美| 日韩欧美中文国产在线 | 100%美女蜜桃视频| 成人激情文学网人妻| 中文字幕国产专区欧美激情 | 亚洲精品 欧美日韩| 国际av大片在线免费观看| 成人影片高清在线观看| 女生被男生插的视频网站| 欧美乱妇无乱码一区二区| 亚洲偷自拍高清视频| 啊啊啊想要被插进去视频| 好太好爽好想要免费| 自拍 日韩 欧美激情| 天天日天天日天天射天天干| 亚洲av琪琪男人的天堂| 色呦呦视频在线观看视频| 国产高清精品一区二区三区| 欧美第一页在线免费观看视频| 福利在线视频网址导航| 亚洲高清国产拍青青草原| asmr福利视频在线观看| 巨乳人妻日下部加奈被邻居中出| 国产丰满熟女成人视频| 人妻在线精品录音叫床| 国产极品美女久久久久久| 午夜福利资源综合激情午夜福利资| 黑人解禁人妻叶爱071| 国产黄色片蝌蚪九色91| 国产亚洲国产av网站在线| 国产精品视频资源在线播放| 91精品一区二区三区站长推荐| 日韩av免费观看一区| 国产黄色高清资源在线免费观看| 天天干天天日天天干天天操| 日本免费一级黄色录像| 精品高跟鞋丝袜一区二区| 夫妻在线观看视频91| 91大屁股国产一区二区| 日韩美女搞黄视频免费| jiuse91九色视频| 天天色天天舔天天射天天爽| 黄色中文字幕在线播放| 欧美viboss性丰满| 丝袜肉丝一区二区三区四区在线看| 亚洲中文字幕校园春色| 天堂av狠狠操蜜桃| 一区二区视频在线观看免费观看 | 啊啊啊想要被插进去视频| 欧洲黄页网免费观看| 午夜精品亚洲精品五月色| 一区二区三区激情在线| 色秀欧美视频第一页| 亚洲午夜精品小视频| 人妻久久无码中文成人| 日本女大学生的黄色小视频| 国产亚洲欧美另类在线观看| 中文字幕人妻一区二区视频| 亚洲av一妻不如妾| 天堂av中文在线最新版| 久久这里只有精彩视频免费| 国产熟妇乱妇熟色T区| 欧美亚洲中文字幕一区二区三区| 亚洲美女自偷自拍11页| 亚洲1区2区3区精华液| 任你操任你干精品在线视频| 亚洲国产美女一区二区三区软件| aiss午夜免费视频| 亚洲中文字幕人妻一区| 欧美熟妇一区二区三区仙踪林| 2018在线福利视频| 亚洲欧美综合在线探花| 青青青青视频在线播放| 噜噜色噜噜噜久色超碰| 最新中文字幕乱码在线| av手机免费在线观看高潮| 人妻激情图片视频小说| 在线视频免费观看网| 人妻少妇性色欲欧美日韩| 国产精品黄色的av| 亚洲午夜福利中文乱码字幕| 100%美女蜜桃视频| 中文字幕人妻av在线观看| 黑人大几巴狂插日本少妇| 亚欧在线视频你懂的| 日本少妇高清视频xxxxx| 一区二区视频在线观看免费观看 | 国产精品女邻居小骚货| 国产精品久久久久久久女人18| 亚洲精品乱码久久久本| 中文字幕日韩无敌亚洲精品| 亚洲高清国产自产av| 伊人综合免费在线视频| 成人动漫大肉棒插进去视频| 亚洲免费成人a v| 91九色porny国产蝌蚪视频| 欧美专区日韩专区国产专区| 免费成人va在线观看| 免费国产性生活视频| 第一福利视频在线观看| 国产一区av澳门在线观看| 国产精品视频一区在线播放| 任你操视频免费在线观看| 成年人的在线免费视频| 亚洲高清国产拍青青草原| 国产精品视频资源在线播放| 91麻豆精品秘密入口在线观看| 97黄网站在线观看| 久久久麻豆精亚洲av麻花| 在线不卡日韩视频播放| 99热碰碰热精品a中文| 中国熟女@视频91| 日韩人妻xxxxx| 成人蜜桃美臀九一一区二区三区| 日本男女操逼视频免费看| 视频在线免费观看你懂得| 午夜dv内射一区区| 色呦呦视频在线观看视频| 一区二区三区蜜臀在线| 亚洲国产成人无码麻豆艾秋| 91免费观看国产免费| 丝袜长腿第一页在线| 成人av久久精品一区二区| 中国视频一区二区三区| 亚洲精品国偷自产在线观看蜜桃| 男人的天堂av日韩亚洲| 中文字幕亚洲久久久| 国内自拍第一页在线观看| 日韩特级黄片高清在线看| 黄色成年网站午夜在线观看 | 中国黄片视频一区91| 亚洲精品三级av在线免费观看| 懂色av之国产精品| 55夜色66夜色国产精品站| 亚洲一区二区三区久久午夜| 五月婷婷在线观看视频免费 | 黑人巨大的吊bdsm| 中出中文字幕在线观看| 日韩成人综艺在线播放| 视频久久久久久久人妻| 亚洲1区2区3区精华液| 91色网站免费在线观看| 亚洲第一黄色在线观看| 青青在线视频性感少妇和隔壁黑丝| 综合激情网激情五月天| 人妻久久久精品69系列| 班长撕开乳罩揉我胸好爽| 久久这里只有精品热视频 | 换爱交换乱高清大片| 色av色婷婷人妻久久久精品高清| 在线不卡日韩视频播放| 99久久99久国产黄毛片| 日本免费午夜视频网站| 中文字幕午夜免费福利视频| 天天干天天操天天摸天天射| 色天天天天射天天舔| 亚洲欧美自拍另类图片| 天天躁日日躁狠狠躁躁欧美av| 久久艹在线观看视频| 一本久久精品一区二区| 蜜臀av久久久久久久| 涩爱综合久久五月蜜臀| 亚洲无线观看国产高清在线| 色呦呦视频在线观看视频| 揄拍成人国产精品免费看视频| 98视频精品在线观看| 农村胖女人操逼视频| 国产男女视频在线播放| 国产亚州色婷婷久久99精品| 亚洲av日韩精品久久久久久hd| 99精品国自产在线人| 欧美va不卡视频在线观看| 亚洲欧美激情人妻偷拍| av中文字幕国产在线观看| 国产女人叫床高潮大片视频| 久久香蕉国产免费天天| 一区二区三区久久中文字幕| 91精品国产综合久久久蜜| 国产精品欧美日韩区二区| 激情五月婷婷免费视频| 人妻最新视频在线免费观看| gav成人免费播放| 色97视频在线播放| 阴茎插到阴道里面的视频| 91九色porny国产蝌蚪视频| 欧美一区二区三区啪啪同性| 真实国模和老外性视频| 91精品国产综合久久久蜜| av成人在线观看一区| 久久久91蜜桃精品ad| 欧美色婷婷综合在线| 人人在线视频一区二区| 久久免费看少妇高潮完整版| av在线免费观看亚洲天堂| av视屏免费在线播放| 久久美欧人妻少妇一区二区三区| 在线播放国产黄色av| 97精品成人一区二区三区 | 成年午夜影片国产片| 91免费放福利在线观看 | av在线资源中文字幕| 日韩视频一区二区免费观看| 国产麻豆91在线视频| 最后99天全集在线观看| 夜色撩人久久7777| 啊啊好大好爽啊啊操我啊啊视频 | 可以免费看的www视频你懂的| 色婷婷综合激情五月免费观看| 欧美日本在线视频一区| 亚洲图片欧美校园春色| av视屏免费在线播放| 欧美激情精品在线观看| 天天操天天干天天插| 亚洲伊人久久精品影院一美女洗澡| 亚洲综合另类欧美久久| 少妇露脸深喉口爆吞精| 亚洲欧美自拍另类图片| 日韩精品中文字幕播放| 国产精品福利小视频a| 亚洲熟女女同志女同| 啊用力插好舒服视频| 五月精品丁香久久久久福利社| 国产午夜亚洲精品麻豆| 一二三区在线观看视频| 日本性感美女写真视频| avjpm亚洲伊人久久| 天天日天天添天天爽| 久久www免费人成一看片| 午夜在线观看一区视频| 阿v天堂2014 一区亚洲|