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

這才是批量Update的正確姿勢(shì)!

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
有位小伙伴問(wèn)了我一個(gè)問(wèn)題:批量更新你們一般是使用when case嗎?還是有其他的批量更新方法?

前言

最近我有位小伙伴問(wèn)我,在實(shí)際工作中,批量更新的代碼要怎么寫(xiě)。

這個(gè)問(wèn)題挺有代表性的,今天拿出來(lái)給大家一起分享一下,希望對(duì)你會(huì)有所幫助。

1.案發(fā)現(xiàn)場(chǎng)

有一天上午,在我的知識(shí)星球群里,有位小伙伴問(wèn)了我一個(gè)問(wèn)題:批量更新你們一般是使用when case嗎?還是有其他的批量更新方法?

我的回答是:咱們星球的商城項(xiàng)目中,有批量更新的代碼可以參考一下,這個(gè)項(xiàng)目中很多代碼,大家平時(shí)可以多看看。

然后我將關(guān)鍵代碼發(fā)到群里了,這是批量重置用戶密碼的業(yè)務(wù)場(chǎng)景:

<update id="updateForBatch" parameterType="cn.net.susan.entity.sys.UserEntity">
    <foreach collection="list" item="entity" separator=";">
        UPDATE sys_user
        SET password = #{entity.password},update_user_id=#{entity.updateUserId},update_user_name=#{entity.updateUserName}
        <where>
            id = #{entity.id}
        </where>
    </foreach>
</update>

有小伙伴說(shuō),第一次見(jiàn)到這種寫(xiě)法,漲知識(shí)了。

還有小伙伴問(wèn),上面這種寫(xiě)法,跟直接for循環(huán)中update有什么區(qū)別?

for(UserEntity userEntity: list) {
   userMapper.update(userEntity);
}

直接for循環(huán)需要多次請(qǐng)求數(shù)據(jù)庫(kù),網(wǎng)絡(luò)有一定的開(kāi)銷,很顯然沒(méi)有批量一次請(qǐng)求數(shù)據(jù)庫(kù)的好。

2.其他的批量更新寫(xiě)法

有小伙說(shuō),他之前一直都是用的case when的寫(xiě)法。

類似下面這樣的:

<update id="updateForBatch" parameterType="cn.net.susan.entity.sys.UserEntity">
  update sys_user
  <trim prefix="set" suffixOverrides=",">
      <trim prefix="password = case id" suffix="end,">
          <foreach collection="list" item="item">
              when #{item.id} then #{item.password}
          </foreach>
      </trim>
      <trim prefix="update_user_id = case id" suffix="end,">
          <foreach collection="list" item="item">
              when #{item.id} then #{item.updateUserId}
          </foreach>
      </trim>
      <trim prefix="update_user_name = case id" suffix="end">
          <foreach collection="list" item="item">
              when #{item.id} then #{item.updateUserName}
          </foreach>
      </trim>
  </trim>
  <where>
      id in (
      <foreach collection="list" separator="," item="item">
          #{item.id}
      </foreach>
      )
  </where>
</update>

但這種寫(xiě)法顯然需要拼接很多條件,有點(diǎn)復(fù)雜,而且性能也不太好。

還有些文章中介紹,可以使用在insert的時(shí)候,可以在語(yǔ)句最后加上ON DUPLICATE KEY UPDATE關(guān)鍵字。

<update id="updateForBatch" parameterType="cn.net.susan.entity.sys.UserEntity">
    insert into sys_user
    (id,username,password) values
    <foreach collection="list" index="index" item="item" separator=",">
        (#{item.id},
        #{item.username},
        #{item.password})
    </foreach>
    ON DUPLICATE KEY UPDATE
     password=values(password)
</update>

在插入數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)會(huì)先判斷數(shù)據(jù)是否存在,如果不存在,則執(zhí)行插入操作。如果存在,則執(zhí)行更新操作。

這種方式我之前也用過(guò),一般需要?jiǎng)?chuàng)建唯一索引。

因?yàn)楹芏鄷r(shí)候主鍵id,是自動(dòng)增長(zhǎng)的或者根據(jù)雪花算法生成的,每次都不一樣,沒(méi)法區(qū)分多次相同業(yè)務(wù)參數(shù)請(qǐng)求的唯一性。

因此,建議創(chuàng)建一個(gè)唯一索引,來(lái)保證業(yè)務(wù)數(shù)據(jù)的唯一性。

比如:給username創(chuàng)建唯一索引,在insert的時(shí)候,發(fā)現(xiàn)username已存在,則執(zhí)行update操作,更新password。

這種方式批量更新數(shù)據(jù),性能比較好,但一般的大公司很少會(huì)用,因?yàn)榉浅H菀壮霈F(xiàn)死鎖的問(wèn)題。

因此,目前批量更新數(shù)據(jù)最好的選擇,還是我在文章開(kāi)頭介紹的第一種方法。

3.發(fā)現(xiàn)了一個(gè)問(wèn)題

群里另外一位小伙伴,按照我的建議,在自己的項(xiàng)目中嘗試了一下foreach的這種批量更新操作,但代碼報(bào)了一個(gè)異常:

sql injection violation, multi-statement not allow

這個(gè)異常是阿里巴巴druid包的WallFilter中報(bào)出來(lái)了。

它里面有個(gè)checkInternal方法,會(huì)對(duì)sql語(yǔ)句做一些校驗(yàn),如果不滿足條件,就會(huì)拋異常:

而druid默認(rèn)不支持一條sql語(yǔ)句中包含多個(gè)statement語(yǔ)句,例如:我們的批量update數(shù)據(jù)的場(chǎng)景。

此外,MySQL默認(rèn)也是關(guān)閉批量更新數(shù)據(jù)的,不過(guò)我們可以在jdbc的url要上,添加字符串參數(shù):&allowMultiQueries=true,開(kāi)啟批量更新操作。

比如:

datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/console?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
      username: root
      password: root

這個(gè)改動(dòng)非常簡(jiǎn)單。

但WallFilter中的校驗(yàn)問(wèn)題如何解決呢?

于是,我上網(wǎng)查了一下,可以通過(guò)參數(shù)調(diào)整druid中的filter的判斷邏輯,比如:

spring:
  datasource:
    url: jdbc:xxx&serverTimeznotallow=Asia/Shanghai&rewriteBatchedStatements=true&allowMultiQueries=true
    username: xxx
    password: xxx
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      filter:
        wall:
          config:
            multi-statement-allow: true
            none-base-statement-allow: true

通過(guò)設(shè)置filter中的multi-statement-allow和none-base-statement-allow為true,這樣就能開(kāi)啟批量更新的功能。

4.一直不生效

普通使用druid的datasource配置,通過(guò)上面這樣調(diào)整是OK的。

但有些小伙伴發(fā)現(xiàn),咱們的商城項(xiàng)目中,通過(guò)上面的兩個(gè)地方的修改,還是一直報(bào)下面的異常:

sql injection violation, multi-statement not allow

這是怎么回事呢?

答:咱們商城項(xiàng)目中的訂單表,使用shardingsphere做了分庫(kù)分表,并且使用baomidou實(shí)現(xiàn)多個(gè)數(shù)據(jù)源動(dòng)態(tài)切換的功能:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.1.1</version>
</dependency>

我們是使用了baomidou包下的數(shù)據(jù)源配置,這個(gè)配置在DynamicDataSourceProperties類中:

/**
 * Copyright ? 2018 organization baomidou
 * <pre>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * <pre/>
 */
package com.baomidou.dynamic.datasource.spring.boot.autoconfigure;

import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.hikari.HikariCpConfig;
import com.baomidou.dynamic.datasource.strategy.DynamicDataSourceStrategy;
import com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy;
import com.baomidou.dynamic.datasource.toolkit.CryptoUtils;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.core.Ordered;

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * DynamicDataSourceProperties
 *
 * @author TaoYu Kanyuxia
 * @see DataSourceProperties
 * @since 1.0.0
 */
@Slf4j
@Getter
@Setter
@ConfigurationProperties(prefix = DynamicDataSourceProperties.PREFIX)
public class DynamicDataSourceProperties {

    public static final String PREFIX = "spring.datasource.dynamic";
    public static final String HEALTH = PREFIX + ".health";

    /**
     * 必須設(shè)置默認(rèn)的庫(kù),默認(rèn)master
     */
    private String primary = "master";
    /**
     * 是否啟用嚴(yán)格模式,默認(rèn)不啟動(dòng). 嚴(yán)格模式下未匹配到數(shù)據(jù)源直接報(bào)錯(cuò), 非嚴(yán)格模式下則使用默認(rèn)數(shù)據(jù)源primary所設(shè)置的數(shù)據(jù)源
     */
    private Boolean strict = false;
    /**
     * 是否使用p6spy輸出,默認(rèn)不輸出
     */
    private Boolean p6spy = false;
    /**
     * 是否使用seata,默認(rèn)不使用
     */
    private Boolean seata = false;
    /**
     * 是否使用 spring actuator 監(jiān)控檢查,默認(rèn)不檢查
     */
    private boolean health = false;
    /**
     * 每一個(gè)數(shù)據(jù)源
     */
    private Map<String, DataSourceProperty> datasource = new LinkedHashMap<>();
    /**
     * 多數(shù)據(jù)源選擇算法clazz,默認(rèn)負(fù)載均衡算法
     */
    private Class<? extends DynamicDataSourceStrategy> strategy = LoadBalanceDynamicDataSourceStrategy.class;
    /**
     * aop切面順序,默認(rèn)優(yōu)先級(jí)最高
     */
    private Integer order = Ordered.HIGHEST_PRECEDENCE;
    /**
     * Druid全局參數(shù)配置
     */
    @NestedConfigurationProperty
    private DruidConfig druid = new DruidConfig();
    /**
     * HikariCp全局參數(shù)配置
     */
    @NestedConfigurationProperty
    private HikariCpConfig hikari = new HikariCpConfig();

    /**
     * 全局默認(rèn)publicKey
     */
    private String publicKey = CryptoUtils.DEFAULT_PUBLIC_KEY_STRING;
}

這個(gè)類是數(shù)據(jù)庫(kù)的配置類,我們可以看到master和druid的配置是在同一層級(jí)的,于是,將application.yml文件中的配置改成下面這樣的:

spring:
  application:
    name: mall-job
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          username: root
          password: 123456
          url: jdbc:mysql://localhost:3306/susan_mall?serverTimeznotallow=Asia/Shanghai&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
          driver-class-name: com.mysql.cj.jdbc.Driver
       druid:
        wall:
          multiStatementAllow: true
          noneBaseStatementAllow: true

這樣改動(dòng)之后,商城項(xiàng)目中使用foreach這種批量更新數(shù)據(jù)的功能OK了。

5.最后

本文由一位球友的問(wèn)題開(kāi)始,討論了批量更新的四種常見(jiàn)方式:

  • for循環(huán)中一條條更新。
  • foreach拼接update語(yǔ)句后批量更新。
  • 使用case when的方式做判斷。
  • 使用insert into on duplicate key update語(yǔ)法,批量插入或者批量更新。

雖說(shuō)有很多種方式,但我個(gè)人認(rèn)為批量update的最佳方式是第2種方式。

但需要需要的地方是,使用foreach做批量更新的時(shí)候,一次性更新的數(shù)據(jù)不宜太多,盡量控制在1000以內(nèi),這樣更新的性能還是不錯(cuò)的。

如果需要更新的數(shù)據(jù)超過(guò)了1000,則需要分成多批更新。

此外,如果大家遇到執(zhí)行批量update操作,不支持批量更新問(wèn)題時(shí):

sql injection violation, multi-statement not allow

首先要在數(shù)據(jù)庫(kù)連接的url后面增加&allowMultiQueries=true參數(shù),開(kāi)啟數(shù)據(jù)的批量更新操作。

如果使用了druid數(shù)據(jù)庫(kù)驅(qū)動(dòng)的,可以在配置文件中調(diào)整filter的參數(shù)。

spring:
  datasource:
    druid:
      filter:
        wall:
          config:
            multi-statement-allow: true
            none-base-statement-allow: true

主要是multi-statement-allow設(shè)置成true。

如果你還使用了其他第三方的數(shù)據(jù)庫(kù)中間件,比如我使用了baomidou實(shí)現(xiàn)多個(gè)數(shù)據(jù)源動(dòng)態(tài)切換的功能。

這時(shí)候,需要查看它的源碼,確認(rèn)它multi-statement-allow的配置參數(shù)是怎么配置的,有可能跟druid不一樣。

責(zé)任編輯:姜華 來(lái)源: 蘇三說(shuō)技術(shù)
相關(guān)推薦

2019-01-02 10:49:54

Tomcat內(nèi)存HotSpot VM

2021-11-05 10:36:19

性能優(yōu)化實(shí)踐

2017-06-12 16:17:07

2020-06-28 16:28:24

Windows 10WindowsU盤(pán)

2020-08-05 07:27:54

SQL優(yōu)化分類

2018-07-30 11:21:30

華為云

2019-06-27 17:18:02

Java日志編程語(yǔ)言

2025-01-10 06:30:00

2021-05-26 05:33:30

5G網(wǎng)絡(luò)運(yùn)營(yíng)商

2021-05-21 13:10:17

kill -9微服務(wù)Java

2024-09-09 11:11:45

2025-04-25 10:28:40

2019-12-04 18:45:00

華為Mate X

2021-11-25 07:43:56

CIOIT董事會(huì)

2021-11-10 16:03:42

Pyecharts Python可視化

2021-12-15 07:24:56

SocketTCPUDP

2021-06-21 09:36:44

微信語(yǔ)音轉(zhuǎn)發(fā)

2024-08-07 10:24:04

2013-11-28 14:34:30

微軟WP

2020-12-08 10:23:42

程序員PPT開(kāi)發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日韩午夜| 成人午夜在线| 91蜜桃婷婷狠狠久久综合9色| 欧美成人一区在线| 中文写幕一区二区三区免费观成熟| 黄页视频在线播放| 国产高清不卡一区| 高清一区二区三区日本久| 亚洲av人人澡人人爽人人夜夜| 擼擼色在线看观看免费| 成年人午夜久久久| 国产98色在线| 三级全黄做爰视频| 久久精品色综合| 亚洲国产精品精华液网站| 好吊妞www.84com只有这里才有精品 | 日本在线观看www| 国产一区二区久久| 91国产精品电影| 熟女少妇内射日韩亚洲| 未满十八勿进黄网站一区不卡| 亚洲精品免费电影| 国内精品久久久久久久果冻传媒| 草莓视频18免费观看| 国产精品久久久久无码av| 精品久久久久一区| 国产视频在线视频| v天堂福利视频在线观看| 不卡av电影在线播放| 国产精品久久久久久影视| 欧洲第一无人区观看| 九九亚洲视频| 精品欧美乱码久久久久久| 久草在在线视频| 日韩激情av| 亚洲国产成人一区二区三区| 福利视频一区二区三区| 中文字幕精品一区二区精| 极品尤物久久久av免费看| 亚洲欧美日韩图片| 国产精品一级无码| yiren22亚洲综合| 欧美日韩国产综合视频在线观看中文| 亚洲一区二区三区欧美| 国产肥老妇视频| 日韩国产欧美在线视频| 国内精品久久久久久影视8| a级在线观看视频| 国产精品亚洲欧美一级在线| 日本韩国精品在线| 一级性生活视频| 亚洲麻豆精品| 国产亚洲综合在线| 精品在线不卡| 国产91久久久| 国产一区二三区好的| 国产福利成人在线| xxxx.国产| 伊人久久亚洲热| 精品国产一区二区三区久久久| 丝袜美腿中文字幕| 美国成人xxx| 亚洲国产高清高潮精品美女| 杨幂一区二区国产精品| 亚洲最大的免费视频网站| 91官网在线免费观看| 久久久久久久久久久视频| 金瓶狂野欧美性猛交xxxx| 最新日韩在线视频| 中文字幕成人一区| 黄色动漫在线观看| 亚洲国产精品精华液2区45| 免费观看成人在线| 欧美成人免费| 国产拍欧美日韩视频二区| 欧美日韩国产综合在线| 黄色片在线免费看| 国产日韩欧美精品一区| 神马影院我不卡| 麻豆app在线观看| 久久久噜噜噜久久中文字幕色伊伊 | 五月天久久综合网| 免费在线视频你懂得| 久久综合狠狠综合久久激情 | 精品国产亚洲av麻豆| 国产精品综合一区二区三区| 国产在线拍偷自揄拍精品| 99国产在线播放| 日韩av一区二区三区| 国产精品久久久久久亚洲影视| 91禁在线观看| 国产精品99精品久久免费| 成人午夜电影在线播放| 污污的视频网站在线观看| 91免费看`日韩一区二区| 欧美一区二区视频17c| a√资源在线| 综合久久给合久久狠狠狠97色| 欧美一级中文字幕| 蜜桃av.网站在线观看| 日韩欧美在线网址| 国产极品美女高潮无套久久久| 人人鲁人人莫人人爱精品| 欧美怡红院视频| 日韩视频在线观看一区二区三区| baoyu135国产精品免费| 亚洲精品美女久久久| www.av欧美| 91综合在线| 欧美激情免费视频| 国产一区二区视频免费| 国产一区999| 久久精品水蜜桃av综合天堂| 成人深夜直播免费观看| 黄色www视频| 国产女人aaa级久久久级 | 久久久国产精品入口麻豆| 亚洲成人精品视频| 日本爱爱爱视频| 国内精品美女在线观看| 日韩美女av在线免费观看| 一级黄色片免费看| proumb性欧美在线观看| 特级西西444www大精品视频| 欧美韩日亚洲| 欧美日韩免费一区二区三区| 亚洲av午夜精品一区二区三区| 久久综合欧美| 久久久在线观看| 国产精品51麻豆cm传媒 | 国产日韩欧美成人| 五月婷婷在线观看视频| **欧美大码日韩| 九色porny91| 久久精品色综合| 欧美成人久久久| 日韩中文字幕高清| 成人免费视频免费观看| 国产又粗又大又爽的视频| 深夜成人福利| 亚洲国产欧美一区二区三区同亚洲| 91n在线视频| 视频一区在线播放| 国产午夜精品一区| 成人在线播放免费观看| 欧美天堂一区二区三区| 亚洲国产果冻传媒av在线观看| 天天色天天射综合网| 国产精品久久久久久av福利| 亚洲 另类 春色 国产| 亚洲天堂网中文字| 日本三区在线观看| 538任你躁精品视频网免费| 日韩一区av在线| 少妇一级淫片日本| 久久精品日韩一区二区三区| 丰满爆乳一区二区三区| xvideos.蜜桃一区二区| 色综合色综合久久综合频道88| 亚洲天堂手机版| 亚洲国产精品传媒在线观看| 国产视频一视频二| 欧美三级午夜理伦三级小说| 欧美精品国产精品日韩精品| 精品国产一级片| 一区二区三区免费| 又色又爽又黄18网站| 黄色成人av网站| 成人资源av| wwww在线观看免费视频| 亚洲精品一区二区三区在线观看| 免费在线观看a级片| 激情综合网天天干| 日韩av影视| 成人精品国产亚洲| 中文字幕精品一区二区精品| 中文字幕av无码一区二区三区| 国产精品美女久久久久aⅴ| 91n.com在线观看| 欧美肉体xxxx裸体137大胆| 国产999视频| 国产98在线| 欧美日本一道本在线视频| 黑人と日本人の交わりビデオ| 麻豆视频观看网址久久| 自拍另类欧美| 老司机aⅴ在线精品导航| 国产精品igao视频| av在线下载| 亚洲免费人成在线视频观看| 亚洲一区中文字幕永久在线| 超碰在线99| 欧美一级免费大片| 国产精品久久久久久久久久久久久久久久久 | 青青草在线视频免费观看| 欧美午夜电影网| 九九热国产在线| 日本一区二区三区国色天香 | 欧美在线免费视频| 国产午夜精品久久久久免费视| 亚洲国模精品一区| 亚洲资源在线播放| 精品国产老师黑色丝袜高跟鞋| 中国1级黄色片| 91啪亚洲精品| 亚洲免费观看在线| 免费在线一区观看| 黄色网页免费在线观看| 欧美在线黄色| 免费在线成人av电影| 动漫av在线免费观看| 91精品一区二区三区综合| 久久精品99| 亚洲国产高清在线观看| 国产精品第1页| 国产资源在线观看入口av| 日韩一区二区三区在线播放| 青青青草原在线| 亚洲国产欧美一区二区丝袜黑人 | 亚洲欧美成人一区二区在线电影| va视频在线观看| 欧美色网站导航| youjizz在线视频| 亚洲高清免费在线| 玖玖爱这里只有精品| 国产精品免费丝袜| 色无极影院亚洲| 91视频.com| 稀缺小u女呦精品呦| 国产一区二区女| 亚洲欧美偷拍另类| 日韩国产成人精品| 无码无遮挡又大又爽又黄的视频| 亚洲人成高清| 免费视频爱爱太爽了| 综合激情网站| 日本三级福利片| 91久久国产| 国产精品av免费| 色琪琪久久se色| 亚洲一区三区| 国内精品久久久久久久久电影网| 欧美日韩大片一区二区三区| 亚洲免费福利一区| 奇米精品在线| 国产一区二区观看| 日韩欧美一区二区三区四区| 亚洲色图美女| 欧美一区二区视频在线| 国产午夜一区| 天天综合色天天综合色hd| 精品视频免费| 在线一区亚洲| 欧美福利视频| 妺妺窝人体色777777| 日韩亚洲国产精品| 男人用嘴添女人下身免费视频| 国产农村妇女毛片精品久久莱园子| 日日碰狠狠添天天爽超碰97| 久久久精品五月天| 亚洲欧美另类动漫| 亚洲最大网站| 欧美日韩久久久一区| 国产精品久久久久久久久毛片 | 精品一区av| 性欧美.com| 91精品观看| 无码粉嫩虎白一线天在线观看 | 日本一本a高清免费不卡| 成人爱爱网址| 国产精品视频网站| 国产亚洲久久| 国产在线精品一区| 国产欧美日韩精品高清二区综合区| 亚洲图片都市激情| 欧美国产91| 国产精品视频一区二区三区四区五区| 日韩一区精品视频| 亚洲精品无码久久久久久久| 99国产麻豆精品| 青青草华人在线视频| 亚洲日本丝袜连裤袜办公室| 免费观看一级视频| 一本久道中文字幕精品亚洲嫩 | 日韩国产高清视频在线| 丁香在线视频| 欧美激情videoshd| 婷婷激情一区| 99在线视频播放| 欧州一区二区| 国产乱子伦精品无码专区| 久久久久国产精品一区二区| 肉色超薄丝袜脚交| 99国产精品视频免费观看| 久久嫩草捆绑紧缚| 亚洲成人精品影院| 一级黄色免费看| 日韩精品亚洲元码| 国产网站在线免费观看 | 欧美日韩破处视频| 国产精选在线观看91| 成人av国产| av无码久久久久久不卡网站| 热久久国产精品| 日韩av手机在线播放| 国产精品久久福利| 一级黄色免费网站| 欧美一区二区三区爱爱| 浮生影视网在线观看免费| 国产+成+人+亚洲欧洲| 激情亚洲小说| 就去色蜜桃综合| 在线电影一区| 日本一本在线视频| 国产精品网友自拍| 综合激情网五月| 337p日本欧洲亚洲大胆色噜噜| 秋霞午夜在线观看| 国产97人人超碰caoprom| 国产91精品入| 久久久99精品视频| 蜜臀av性久久久久av蜜臀妖精| 成人网站免费观看| 亚洲午夜三级在线| 国产黄色高清视频| 久久精品影视伊人网| 91天天综合| 日韩电影免费观看高清完整| 国产精品久久久久9999高清| 国产大学生视频| 亚洲妇熟xx妇色黄| 精品美女www爽爽爽视频| 久久亚洲精品中文字幕冲田杏梨| 91福利精品在线观看| 欧美亚洲另类在线一区二区三区| 亚洲免费成人| 欧美夫妇交换xxx| 亚洲成a天堂v人片| 免费看黄色一级视频| 久久99久久久久久久噜噜| 欧美h版在线观看| 99精品一区二区三区的区别| 韩国视频一区二区| 久久国产精品国语对白| 在线成人高清不卡| 中文av资源在线| 97在线中文字幕| 亚洲性图久久| 国产原创剧情av| 午夜精品久久久久久久久久| 天天干视频在线观看| 97超碰蝌蚪网人人做人人爽| 欧美人妖在线观看| jizzjizzxxxx| 国产亲近乱来精品视频| 中文字幕一区二区免费| 精品国产拍在线观看| 欧美影院精品| 国产精品视频网站在线观看| 成人精品亚洲人成在线| 天天操天天干视频| 亚洲日本成人网| 久久天天久久| 蜜桃网站在线观看| 99精品一区二区三区| 在线精品免费视| 最近2019年手机中文字幕| 成人动漫视频在线观看| 久久99久久久久久| www成人在线观看| 中文字幕视频在线播放| 久久亚洲私人国产精品va| eeuss鲁片一区二区三区| 2022亚洲天堂| 国产精品区一区二区三区| 国产精品一区二区av白丝下载| 久久久久久国产三级电影| 亚洲人和日本人hd| 男生操女生视频在线观看| 亚洲第一av色| 国产三区四区在线观看| 亚洲www永久成人夜色| 在线观看视频免费一区二区三区| 18禁裸乳无遮挡啪啪无码免费| 欧美日韩一区二区欧美激情| av免费在线免费观看| 快播日韩欧美| 国产乱码精品一区二区三区五月婷 | 国产精品网站大全| 午夜欧美精品| www在线观看免费视频| 欧美一区二区女人| 欧美成人影院| 欧美日韩激情四射| 中文字幕精品一区| 蜜臀久久精品久久久久| 国产精品永久免费视频| av成人激情| 永久免费看黄网站| 亚洲亚裔videos黑人hd|