国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Spring Boot + MyBatis + MySQL讀寫分離

共 23508字,需瀏覽 48分鐘

 ·

2021-09-24 12:12

今日推薦
借助Redis鎖,完美解決高并發(fā)秒殺問題
還在直接用JWT做鑒權(quán)?JJWT真香
Spring Boot 操作 Redis 的各種實現(xiàn)
Fluent Mybatis 牛逼!
Nginx 常用配置清單
這玩意比ThreadLocal叼多了,嚇得我趕緊分享出來。

1.  引言


讀寫分離要做的事情就是對于一條SQL該選擇哪個數(shù)據(jù)庫去執(zhí)行,至于誰來做選擇數(shù)據(jù)庫這件事兒,無非兩個,要么中間件幫我們做,要么程序自己做。因此,一般來講,讀寫分離有兩種實現(xiàn)方式。

第一種是依靠中間件(比如:MyCat),也就是說應(yīng)用程序連接到中間件,中間件幫我們做SQL分離;第二種是應(yīng)用程序自己去做分離。這里我們選擇程序自己來做,主要是利用Spring提供的路由數(shù)據(jù)源,以及AOP。
然而,應(yīng)用程序?qū)用嫒プ鲎x寫分離最大的弱點(不足之處)在于無法動態(tài)增加數(shù)據(jù)庫節(jié)點,因為數(shù)據(jù)源配置都是寫在配置中的,新增數(shù)據(jù)庫意味著新加一個數(shù)據(jù)源,必然改配置,并重啟應(yīng)用。當(dāng)然,好處就是相對簡單。

2.  AbstractRoutingDataSource

基于特定的查找key路由到特定的數(shù)據(jù)源。它內(nèi)部維護了一組目標(biāo)數(shù)據(jù)源,并且做了路由key與目標(biāo)數(shù)據(jù)源之間的映射,提供基于key查找數(shù)據(jù)源的方法。

3.  實踐

關(guān)于配置請參考《MySQL主從復(fù)制配置》
地址:www.cnblogs.com/cjsblog/p/9706370.html
3.1.  maven依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cjs.example</groupId>
    <artifactId>cjs-datasource-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>cjs-datasource-demo</name>
    <description></description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>


            <!--<plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.46</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/myBatisGeneratorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                </configuration>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>-->


        </plugins>
    </build>
</project>
3.2.  數(shù)據(jù)源配置
application.yml
spring:
  datasource:
    master:
      jdbc-urljdbc:mysql://192.168.102.31:3306/test
      username: root
      password123456
      driver-class-name: com.mysql.jdbc.Driver
    slave1:
      jdbc-urljdbc:mysql://192.168.102.56:3306/test
      username: pig # 只讀賬戶
      password123456
      driver-class-name: com.mysql.jdbc.Driver
    slave2:
      jdbc-urljdbc:mysql://192.168.102.36:3306/test
      username: pig # 只讀賬戶
      password123456
      driver-class-name: com.mysql.jdbc.Driver
多數(shù)據(jù)源配置
/**
 * 關(guān)于數(shù)據(jù)源配置,參考SpringBoot官方文檔第79章《Data Access》
 * 79. Data Access
 * 79.1 Configure a Custom DataSource
 * 79.2 Configure Two DataSources
 */


@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties("spring.datasource.master")
    public DataSource masterDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.slave1")
    public DataSource slave1DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.slave2")
    public DataSource slave2DataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    public DataSource myRoutingDataSource(@Qualifier("masterDataSource") DataSource masterDataSource,
                                          @Qualifier("slave1DataSource") DataSource slave1DataSource,
                                          @Qualifier("slave2DataSource") DataSource slave2DataSource) {
        Map<ObjectObject> targetDataSources = new HashMap<>();
        targetDataSources.put(DBTypeEnum.MASTER, masterDataSource);
        targetDataSources.put(DBTypeEnum.SLAVE1, slave1DataSource);
        targetDataSources.put(DBTypeEnum.SLAVE2, slave2DataSource);
        MyRoutingDataSource myRoutingDataSource = new MyRoutingDataSource();
        myRoutingDataSource.setDefaultTargetDataSource(masterDataSource);
        myRoutingDataSource.setTargetDataSources(targetDataSources);
        return myRoutingDataSource;
    }

}
這里,我們配置了4個數(shù)據(jù)源,1個master,2兩個slave,1個路由數(shù)據(jù)源。前3個數(shù)據(jù)源都是為了生成第4個數(shù)據(jù)源,而且后續(xù)我們只用這最后一個路由數(shù)據(jù)源。
MyBatis配置
@EnableTransactionManagement
@Configuration
public class MyBatisConfig {

    @Resource(name = "myRoutingDataSource")
    private DataSource myRoutingDataSource;

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(myRoutingDataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public PlatformTransactionManager platformTransactionManager() {
        return new DataSourceTransactionManager(myRoutingDataSource);
    }
}
由于 Spring 容器中現(xiàn)在有4個數(shù)據(jù)源,所以我們需要為事務(wù)管理器和MyBatis手動指定一個明確的數(shù)據(jù)源。
3.3.  設(shè)置路由key / 查找數(shù)據(jù)源
目標(biāo)數(shù)據(jù)源就是那前3個這個我們是知道的,但是使用的時候是如果查找數(shù)據(jù)源的呢?
首先,我們定義一個枚舉來代表這三個數(shù)據(jù)源
package com.cjs.example.enums;

public enum DBTypeEnum {

    MASTER, SLAVE1, SLAVE2;

}
接下來,通過ThreadLocal將數(shù)據(jù)源設(shè)置到每個線程上下文中
public class DBContextHolder {

    private static final ThreadLocal<DBTypeEnum> contextHolder = new ThreadLocal<>();

    private static final AtomicInteger counter = new AtomicInteger(-1);

    public static void set(DBTypeEnum dbType{
        contextHolder.set(dbType);
    }

    public static DBTypeEnum get() {
        return contextHolder.get();
    }

    public static void master() {
        set(DBTypeEnum.MASTER);
        System.out.println("切換到master");
    }

    public static void slave() {
        // 輪詢
        int index = counter.getAndIncrement() % 2;
        if (counter.get() > 9999) {
            counter.set(-1);
        }
        if (index == 0) {
            set(DBTypeEnum.SLAVE1);
            System.out.println("切換到slave1");
        }else {
            set(DBTypeEnum.SLAVE2);
            System.out.println("切換到slave2");
        }
    }

}
獲取路由key
package com.cjs.example.bean;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.lang.Nullable;

public class MyRoutingDataSource extends AbstractRoutingDataSource {
    @Nullable
    @Override
    protected Object determineCurrentLookupKey() {
        return DBContextHolder.get();
    }

}
設(shè)置路由key
默認(rèn)情況下,所有的查詢都走從庫,插入/修改/刪除走主庫。我們通過方法名來區(qū)分操作類型(CRUD)
@Aspect
@Component
public class DataSourceAop {

    @Pointcut("!@annotation(com.cjs.example.annotation.Master) " +
            "&& (execution(* com.cjs.example.service..*.select*(..)) " +
            "|| execution(* com.cjs.example.service..*.get*(..)))")
    public void readPointcut() {

    }

    @Pointcut("@annotation(com.cjs.example.annotation.Master) " +
            "|| execution(* com.cjs.example.service..*.insert*(..)) " +
            "|| execution(* com.cjs.example.service..*.add*(..)) " +
            "|| execution(* com.cjs.example.service..*.update*(..)) " +
            "|| execution(* com.cjs.example.service..*.edit*(..)) " +
            "|| execution(* com.cjs.example.service..*.delete*(..)) " +
            "|| execution(* com.cjs.example.service..*.remove*(..))")
    public void writePointcut() {

    }

    @Before("readPointcut()")
    public void read() {
        DBContextHolder.slave();
    }

    @Before("writePointcut()")
    public void write() {
        DBContextHolder.master();
    }


    /**
     * 另一種寫法:if...else... 判斷哪些需要讀從數(shù)據(jù)庫,其余的走主數(shù)據(jù)庫
     */

// @Before("execution(* com.cjs.example.service.impl.*.*(..))")
// public void before(JoinPoint jp) {
// String methodName = jp.getSignature().getName();
//
// if (StringUtils.startsWithAny(methodName, "get", "select", "find")) {
// DBContextHolder.slave();
// }else {
// DBContextHolder.master();
// }
// }
}
有一般情況就有特殊情況,特殊情況是某些情況下我們需要強制讀主庫,針對這種情況,我們定義一個主鍵,用該注解標(biāo)注的就讀主庫
package com.cjs.example.annotation;

public @interface Master {
}
例如,假設(shè)我們有一張表member
@Service
public class MemberServiceImpl implements MemberService {

    @Autowired
    private MemberMapper memberMapper;

    @Transactional
    @Override
    public int insert(Member member) {
        return memberMapper.insert(member);
    }

    @Master
    @Override
    public int save(Member member) {
        return memberMapper.insert(member);
    }

    @Override
    public List<Member> selectAll() {
        return memberMapper.selectByExample(new MemberExample());
    }

    @Master
    @Override
    public String getToken(String appId) {
        // 有些讀操作必須讀主數(shù)據(jù)庫
        // 比如,獲取微信access_token,因為高峰時期主從同步可能延遲
        // 這種情況下就必須強制從主數(shù)據(jù)讀
        return null;
    }
}
4.  測試
@RunWith(SpringRunner.class)
@SpringBootTest
public class CjsDatasourceDemoApplicationTests {

    @Autowired
    private MemberService memberService;

    @Test
    public void testWrite() {
        Member member = new Member();
        member.setName("zhangsan");
        memberService.insert(member);
    }

    @Test
    public void testRead() {
        for (int i = 0; i < 4; i++) {
            memberService.selectAll();
        }
    }

    @Test
    public void testSave() {
        Member member = new Member();
        member.setName("wangwu");
        memberService.save(member);
    }

    @Test
    public void testReadFromMaster() {
        memberService.getToken("1234");
    }

}
查看控制臺

5.  工程結(jié)構(gòu)


6.  參考

https://www.jianshu.com/p/f2f4256a2310
http://www.cnblogs.com/gl-developer/p/6170423.html
https://www.cnblogs.com/huangjuncong/p/8576935.html
https://blog.csdn.net/liu976180578/article/details/77684583


推薦文章


1、一款高顏值的 SpringBoot+JPA 博客項目
2、超優(yōu) Vue+Element+Spring 中后端解決方案
3、推薦幾個支付項目!
4、推薦一個 Java 企業(yè)信息化系統(tǒng)
5、一款基于 Spring Boot 的現(xiàn)代化社區(qū)(論壇/問答/社交網(wǎng)絡(luò)/博客)


瀏覽 26
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 在线免费观看黄色小视频| 91精品国产闺蜜国产在线闺蜜 | av资源免费观看| 婷婷视频在线观看| 欧美性爱视频免费看| 好叼操| 五月丁香久久| 抠逼网站| 懂色av蜜臀av粉嫩av分| 三级AV网站| 五月婷婷色综合| 成人AV十八亚洲二区| 成人在线A片| 中文在线字幕高清电视剧| 大地影院在线资源观看| 亚洲大哥天天干| 日韩va亚洲va欧美va高清 | 精品人妻少妇| 青娱乐成人网| 中文字幕无码播放| 一本道综合网| 国产高清无码一区二区| 桃色一区| 欧美性爱中文字幕| 亚洲无码中文人妻| 无码激情18激情视频| 一个人看的www日本高清视频| 狼人香蕉网| 无码精品一区二区| 人人摸人人| 波多野结衣99| 小明成人免费视频| 美女日屄| 黄色日逼视频| 高清无码免费| 日韩毛片在线免费观看| 热久久在线观看| 免费操逼视频在线观看| 五月丁香综合| 亚洲a在线视频| 特级西西人体444www高清大胆 | 欧美一级a| 亚洲精品一区二区三区四区高清| 黄色片无码| 蜜桃视频一区二区三区四区使用方法 | 操逼欧美| 成人免费A片| 草b网站| 99国产在线观看免费视频| 波多野结衣东京热| 国产日逼视频| 影音先锋婷婷| 一本无码视频| jizz在线观看视频| 按摩性高湖婬AAA片A片中国| 成人图片小说| 一区二区黄色| 欧美在线播放| 国产一级A片免费播放| 91精品日韩| 国产精品成人AV片| 欧美一区三区视频z| 午夜三级无码| 91女人18毛片水多的意思| 乳揉みま痴汉电车羽月希免费观看 | 99Re66精品免费视频| 婷婷国产亚洲精品网站| 日韩三级视频| 西西人体444www| 淫荡人妻视频| 国内精品一区二区| 粉嫩99精品99久久久久久特污 | 日韩肏屄网| 色老板在线观看视频| 成人网站一区| 青草视频精品| 男人的天堂免费视频| 亚洲中文免费视频| 天天射综合| 日韩一区二区高清无码| 夜色福利视频| 99久久久国产精品免费蜜臀| 99精品视频16在线免费观看| 一区二区三区四区久久| 狠狠色噜噜狠狠狠7777米奇网| 亚洲少妇无码| 色交视频| 成人网中文字幕| 亚洲激情婷婷| 国产欧美高清在线| 亚洲在线成人视频| 黑人丰满大荫蒂| 我要操视频| 成人三级毛片| 正在播放吴梦梦淫行| 久热激情| 欧美日韩黄片| 自拍天堂| 婷婷五月天激情四射| 日韩1234区| 久久aaa| 婷婷五月天在线观看| 日韩欧美人妻无码精品| 国语对白做受欧美| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇| 青草无码视频| 手机看片福利视频| 手机成人在线视频| 影音先锋无码AV| 蝌蚪窝久久| 日韩99| 国产丰满乱子伦无码| 婷婷久久五月| 91美女操逼视频| 99综合视频| 69堂在线观看| 日韩一级高清| 最新中文字幕在线播放| 中文字幕日韩高清| 日韩中文字幕永久| 免费看黄片的网站| 色色射| 军人妓女院BD高清片在线播放| 在线观看免费黄视频| 色五月天婷婷| 精品无码久久久久久久久app| 五月天久久久久| 欧美一区二区三区在线| 在线观看免费视频黄| 天天干夜夜操| 亚洲天堂网在线视频| 成人先锋AV| AV天天看| 大香蕉伊人青青草| 国产一区二| 人人操人人看人人干| 欧美一级黄色A片| 亚洲日韩欧美性爱| 国内自拍无码| 中文字幕人成人乱| www.色五月| 日韩免费高清无码视频| 无码性爱视频| 中文字幕人妻系列| 婷婷激情丁香五月天| 综合色婷婷一区二区亚洲欧美国产| 五月婷婷日韩| 蜜桃精品在线观看| 亚洲AV无码乱码国产| 日韩欧美A片| 国产精品久久7777777精品无码| 亚洲永久免费| 大伊香蕉在线| 色妞视频精品一区| 丰满人妻精品一区二区在线| 高清毛片AAAAAAAAA郊外| 国产天堂在线| 免费A在线| 久久久久久亚洲精品| 91av视频在线| 夜夜干天天操| 一级黄色视频日逼片| 97国产精品视频人人做人人爱| 国产AV福利| 日韩在线视频91| 91在线欧美| 91久久爽久久爽爽久久片| 一级黄色在线| 亚洲码AV波多野| 亚洲免费在线观看视频| 国产AV无码高清| 91麻豆精品91久久久久同性| 色五月婷婷五月| 日本成人一区二区| 亚洲无码门| 中文乱伦视频| 另类欧美| 99热碰碰热| 色播五月婷婷| 国产日韩一区二区三区| 国产无码一| 国产一二三视频| 强伦轩一区二区三区在线观看| 国产一级a毛一级a毛片视频黑人| 婷婷丁香五月激情| 丰满人妻一区二区三区四区54 | 91精品大屁股白浆自慰久久久| 亚洲五月天色| 一区二区三区精品婷婷| 日本高潮视频| 亚洲AV无码久久寂寞少妇多毛| 人人摸人人操人人摸| www.91麻豆| 丁香婷婷六月| AV手机天堂| 色逼五月| 日本中文字幕无码| 91丨九色丨老农村| 一级黄在线观看| 极品美女扒开粉嫩小泬高潮一| 中文字幕在线有码| 大鸡巴免费视频| 欧美午夜精品一区二区蜜桃| 午夜操逼视频| 欧美性色网| 天堂中文资源在线观看| 中文字幕久久播放| 精品在线免费视频| 99无码人妻| 中文字幕精品视频在线| 裸体黄色一极大片| 久久AV电影| 欧美视频中文字幕| 欧美在线大香蕉| 91理论片| 日韩v欧美v日本v亚洲v国产v| 操大爷影院| 午夜精品久久久| 蜜臀久久99精品久久久久酒店更新时间 | 综合色婷婷| 免费观看操逼| 日韩精品免费在线观看| 天堂8在线视频| 亚洲砖区免费| 亚洲欧美日韩不卡| 九九九九AV| 欧美日韩狠狠操在线观看视频| 桃色AV| www操逼| 欧美手机在线视频| 专区无日本视频高清8| 国产精品国产精品国产专区| 人妻丝袜无码视频专区| 亚洲AV无码成人专区| 大香蕉综合网站| 婷婷五月天电影网| 亚洲高清无码中字| 中国12一13毛片| 日本高清免费视频| 在线中文AV| 人人操人人网站| 免费视频在线观看黄| 久久99精品国产麻豆婷婷洗澡| 性爱一区| 亚洲成人在线播放| 亚洲精品综合| 操逼视频免费| 偷窥美鲍| 无码中文字幕高清| 欧美一区二区三区激情| 日韩ava| 影视先锋成人在线| 国产激情视频在线免费观看| 玖玖爱资源站| 学生妹作爱片| 91精品国产综合久久久蜜臀图片| 亚洲成人视频在线播放| 亚洲日本无码50p| 免费在线亚洲| 干妞网免费视频| 国产精品做爱| 国产一级生活片| 精品操逼视频| 亚洲午夜激情| 国产精品国产三级国产AⅤ中文| 男人插女人网站| 国产女人18毛片水真多成人如厕| 天堂va欧美va亚洲va在线| 亚洲高清无码视频在线播放| 久久欧洲成人精品无码区| 日本一级一片免费视频| jzzijzzij亚洲成熟少妇在线观看| 懂色AV成人| 懂色AV成人| 国产成人自拍偷拍视频| 免费欧美A片| 国产免费av片| 一区二区三区四区高清无码| 中文字幕av久久爽Av| 先锋影音资源网站| 韩日精品视频| 久久w| 欧美成人精品激情在线视频| 亚洲a级毛片| 91爱爱爱爱| www欧美日韩| 无套进入无套内谢| 91国内精品视频| 成人精品三级AV在线看| 中文字幕日韩乱伦| 日批免费视频| 久草视频99| 996re| 日逼图| 男人天堂网AV| 午夜电影福利| 久久99精品国产| 亚洲一区高清无码| 东北成人毛片| 亚洲精品国产精品国自产A片同性 丰满人妻一区二区三区四区不卡 国产1级a毛a毛1级a毛1级 | 99在线观看精品视频| 秋霞久久日| 囯产精品一区二区三区AV做线| 国产黄色三级| 四虎激情影院| 欧美日韩中文在线| www天天操| 老司机午夜免费精品视频| 青青操在线| 青青草无码成人AV片| 91吴梦梦无码一区二区| 天天肏天天干| 亚洲中文字幕人妻。| 人妻无码久久精品| 欧美视频在线观看免费| 日本一区二区三区四区在线观看| 北条麻妃中文字幕在线观看| 亚洲免费清高| 天堂网av在线| 人人妻人人爱人人操| 91狠狠综合久久| 黄色免费视频网站| 亚洲天堂欧美| 97男人的天堂| 一本无码中文字幕| 黑人一级片| 一边做一边说国语对白| 99成人国产精品视频| 国产免费成人在线观看| 国产a片免费看| 操东北女人| 特写毛茸茸BBwBBwBBw| 嫩草国产| 黄色片在线视频| 日韩欧美国产精品| 亚州加勒比无码| 熟妇槡BBBB槡BBBB图| 亚洲欧洲在线视频| 黄色免费视频| jizz在线免费观看| 台湾无码精品| 欧洲一区二区三区| 国产三级成人| 91国产视频在线观看| 蜜桃av秘一区二区三区| 自拍偷拍一区二区| 狠狠的操| 一级黄色视频免费观看| 91视频观看| 大香蕉免费| 欧美不卡一区| 国精自拍| 亚洲免费高清视频| 在线播放a| 亚洲天堂视频在线| 国产狼友| 免费a视频在线观看| 成人无码高清在线观看| 五月天激情性爱| 91精品国产闺蜜国产在线闺蜜 | 久久中文字幕免费| 国产豆花视频| 中文字幕中文字幕一区| 在线免费观看无码视频| 日韩精品欧美一区二区三区| 精品视频在线观看免费| 91成人无码| 中国特级毛片| 懂色Av| 亚洲第一大网站| 麻豆性爱| 久久久久久免费毛片精品| 蜜桃91精品秘入口| www.91AV| 大香蕉现在视频中心一| 国产精品高潮呻吟久久| 亚洲一区二区三区在线++中国 | 亚洲无码视频在线免费观看| 国产精品秘久久久久久久久| 99久久国产热无码精品免费| 免费黄色av| 动漫一区二区| 免费在线a| AAA成人| 操逼视频免费观看| 67194国产| 国产精品久久AV电影| 福利国产在线| 插插插插网| 亚洲69p| 国产性精品| 青青草在线播放| 在线观看中文字幕视频| 超碰在线看| 国产操逼网址| 91拍真实国产伦偷精品| 激情丁香五月婷婷| 国内精品一区二区| www.91com| 色欧美大香蕉| 亚欧成人网站| 欧美怕怕| 成人激情综合网| 高圆圆一区二区三区| 香蕉视频国产| 亚洲精品乱码久久久久久久| 大香蕉欧美| 日韩中文字幕无码中字字幕| 瘦精品无码一区二区三区四区五区六区七区八区| ww久久| 俺来也最新网址| 日韩成人小电影| 91视频在线观看免费大全| 五月婷婷丁香六月| 3D动漫精品一区二区在线播放免费| 亚洲精品成人| 日韩婬乱片A片AAA真人视频| 怡春院日韩| 操B网址| 国产91在线看| av高清无码| 河南乱子伦视频国产| 日韩在线中文字幕亚洲| 加勒比精品在线| 日本特黄视频| 日本A片在线观看| 91看片看婬黄大片女跟女| 奇米影视色偷偷| 亚洲三级黄色视频| 久久久伊人网| 黄色在线免费观看| 久久九九热| 国产欧美精品在线观看| 日韩精品中文字幕无码| 国产综合无码| 大香蕉啪啪| 日韩欧美操| 青草香蕉视频| 91成人视频18| 日韩免费三级| 夜夜骚| 久操免费在线视频| 中国美女一级黄片| 久草资源| 无码秘人妻一区二区三-百度| 香蕉视频a| 制服丝袜人妻| 日韩欧美国产精品综合嫩V| 黄色一级爱爱| 免费的黄色视频| 久久国产乱子伦精品免费午夜...| 2015中文字幕黄色视频| 久久久久久久久免费看无码| 91无码人妻精品一区二区三区四| 北条麻妃在线无码| 国产无套内射视频| 青娱乐国产精品一区二区| 操碰视频| 欧美性高潮| 伊人久久大香蕉视频| 亚洲黄色无码| 另类欧美色图| 久草a视频| 天天日天天操天天干| 五月天精品| 国产毛片18水真多18精品| 免费看一级片| 精品视频网| 猫咪亚洲AV成人无码电影| 黄色视频网站免费在线观看| 丰满人妻一区二区三区四区54 | 蜜挑视频一区二区三区| 欧美淫乱视频| 综合伊人大香蕉| 中文免费高清在线观看视频| 亚洲视频中文字幕| 久久大香蕉精品| 亚洲男女av| 五月激情综合| 中文字幕av免费观看| 精品中文一区二区三区| 日韩人妻精品无码久久| 黄色片在线观看视频| 久久艹精品视频| 91精品婷婷国产综合久久竹菊| 在线观看的av网站| 精品久久久无码| 人人操人人射| 久久黑人| 天堂在线网| 在线观看视频日韩| 成人无码区免费AV毛片| 九九综合伊人7777777| 亚洲色激情| 男女爱爱动态图| 欧美精品成人免码在线| 亚洲免费天堂| 午夜亚洲AV永久无码精品蜜芽 | 精品啪啪| 日韩精品一区二区三| 成人区精品一区二区婷婷| 99re6热在线精品视频| 欧美老妇大BBBBXXXX| 亚洲电影在线观看| 影音先锋av中文字幕| 国产精品国产三级国产AⅤ中文| 黑人干亚洲人| 亚洲高清在线播放| 成人久久久久一级大黄毛片中国| 欧美成人性爱影院| 伊人成人网站| 刘玥91精一区二区三区| av中文无码| 久久日精品| 欧美操屄视频| 人妖毛片| 91视频在线网站| 香蕉污视频| 无码22p| 懂色av,蜜臀AV粉嫩av| 国产精品成人免费视频| 香蕉在线播放| 免费中文字幕| 香蕉久草| 一区二区三区四区高清无码| 一个人看的www日本高清视频| 成人性爱自拍| 亚洲激情在线| 躁BBB躁BBB添BBBBBB| 91AV电影网| 亚洲综合网在线观看| 香蕉婷婷亚洲丁香| 日日摸日日| 国产办公室丝袜人妖| 夜夜欢天天干| 天天日天天操天天摸天天干天日射天天插 | 久久这里精品| 色播av| 国产A片精品| 精品国产无码怀孕| 丰满人妻精品一区二区在线| 国内精品久久久久久久久98| 国产AV一卡| 麻豆传媒嫂子| 97久久久| 大香蕉欧美视频| 亚洲免费成人电影| 亚洲色综合网| 日本久久久久久久久视频在线观看| 俺也去在线视频| 亚洲日韩欧美一区二区| 久草国产在线视频| 在线看一区二区三区| 亚洲性爱工厂| 91无码在线观看| 大香蕉在线伊| 亚洲第一视频在线观看| 日本豆花视频| 成人午夜视频精品一区| 一区二区三区四区无码| 亚洲中文无码字幕| 国产插逼视频| av婷婷五月天| 在线观看av资源| 九九热国产视频| 黄色一级视频在线观看| 中文字幕在线播放av| 黄色片大香蕉| 国产九色91回来了| 亚洲少妇一区| 亚洲色综合久久五月| 久久偷看各类wc女厕嘘嘘偷窃| 国产剧情一区二区| 国产无遮挡又黄又爽在线观看| 国产AV影院| 黄片网站免费看| 狼友视频在线免费观看| 免费看黄色的视频| 欧洲三级网观看| 99精品国产一区二区| 韩日不卡视频| 国产av一区二区三区| 亚洲AV在线免费观看| 日韩人妻精品无码| 国产精品美女视频| 吹潮喷水高潮HD| 亚洲av小说| 西西4444www大胆无吗| 女人的天堂AAA| 三级片视频网站| 免费视频| 91欧美日韩综合| 亚洲福利一区| 黄色工厂这里只有精品| 色综合色综合色综合| 乱伦AV网| 波多野结衣高清av久久直播免| 国产成人av| 免费在线观看黄色视频| 人善交精品一区二区三区| 97精品国产97久久久久久免费| 九一国产| 国产美女一区| 国产精品乱伦片| 亚洲一区图片| 久久黄色视频免费看| 久久丁香五月婷婷五月天激情视频| 日韩三级小说| 日屁视频| 欧美动态视频| eeuss国产| 亚洲最大福利视频| 少妇4p| 天天狠狠操| 琪琪色五月天| 国产精品国产三级国产专区52| 亚洲高清视屏| 一品国精和二品国精的文化意义 | 国产AV一级片| 亚洲AV毛片| 午夜成人网站| 无码人妻在线| 九九九在线视频| 欧美日韩性爱网站| 亚洲精品婷婷| 九七在线视频| 欧美怕怕| 成人免费无码毛片| gogogo高清在线完整免费播放韩国 | 婷婷五月天丁香在线| 国产精品欧美日韩| 婷婷乱伦| 亚洲精品鲁一鲁一区二区三区 | 久久久久久久网站| 欧美成人在线视频网站| 人人色人人操人人干| 大地影视中文第三页最新在线观看| 麻豆精品无码| 欧美性猛交XXXXⅩXX| 国产对白视频| 久草视频2| 国产精品无| 国产精品免费人成网站酒店| 国产成人毛片18女人18精品| 肏逼网站在线观看| 大屌一区二区三区| 午夜精品18视频国产17c| 欧美在线不卡综合| 午夜毛片| 国产av资源| 黄页网站在线观看| 欲色av| 亚洲高清视频在线观看| 欧一美一婬一伦一区| 一区二区三区四区五区在线| 男人天堂网在线| 蜜桃传媒一区二区亚洲AV| 国产精品性爱视频| 亚洲天堂精品在线观看| 天天做天天爱天天爽| 中文在线观看视频| 91福利导航| 亚洲无码网址| 极品无码| 一本色道久久综合亚洲精品久久| 一级黄色视频在线观看| 最新中文字幕在线视频| 久久女人视频| 狠狠操综合| 最近中文字幕免费MV第一季歌词怀孕 | 国产高潮视频| 亚洲色诱| 久久久麻豆| 日韩一区二区三区四区| 免费播放片色情A片| 亚洲在线中文字幕| 欧美成人午夜无码A片秀色直播| 人人摸人人草| 操杨幂| 国产一级a毛一级a毛片视频黑人| 99re6热在线精品视频功能 | x88AV吊钟奶熟女| 成人无码一区二区三区| 色综合一区二区三区| 在线免费观看黄色小视频| 欧美成人在线网站| 噜噜色色噜噜| 国产成人AV在线| 黄色片免费在线观看| 在线观看a片| 黄色视频免费看| 中文字幕乱伦性爱| 亚洲有码人妻| 亚洲欧美婷婷五月色综合| 无码做爰欢H肉动漫网站在线看| 国产A毛片| 黄色免费视频网站| 一本色道久久综合无码人妻四虎| 91x色| 久久成人网豆花视频| 熟妇人妻中文| 99视频精品全部免费看| 中文无码一区二区三区| 人妻操逼| 欧美福利| www.天天日| 亚洲色图欧美| 高清色色女网站| 996热久久| 最好看2019中文在线播放电影 | 一级a看片在线观看| 成人区人妻精品一| 福利精品| 99色网站| 国产成人无码一区二区在线| 天天爽日日澡AAAA片| 欧美操操操| 操逼逼AV| 婚闹不堪入目A片| 国精品无码一区二区三区在线秋菊| 黄色片成人| 久久91精品| 日韩欧美手机在线| 四季AV一区二区夜夜嗨| 亚洲无aV在线中文字幕| 亚欧毛片| 亚洲五月婷婷| 亚洲国产黄片| 51午夜福利| 欧美日韩成人网站| www.日韩av| 日本人妻在线视频| 天天操夜| 五月婷婷深深爱| 日韩成人视频在线观看| 亚洲天堂网站| 99精品视频北条麻妃国产版| 日韩AV成人无码久久电影| 国产精品成| 亚洲无码AV一区二区| 欧美午夜黄片| 亚洲熟女视频| 大鸡吧网站| 黄色成人在线观看| 精品无码久久久久久久久app| 国产美女被| 操b视频在线播放| 免费观看在线无码视频| 青青草手机在线观看| 国产精品久久久久久久久久九秃| 一区二区三区毛片| 麻豆一区| 久草视频在线免费| 蜜臀久久99久久久久久宅男| 国产一区一区| 91热久久| 北条麻妃无码精品AV| 四川w搡BBB搡wBBB搡| AⅤ中文字幕在线免费观看| 美女在线扣穴| 天天日AV| 五月婷婷丁香网| 国产一区二区三区在线视频| 欧美成人性爱视频| 手机看片福利| AV无码国产| jizz国产视频| 天堂网在线播放| 韩国精品一区二区三区| 欧美日韩国产高清| 精品第一页| 操逼视频国产91| 天堂网2018| 六月婷婷网| 黄片午夜| 免费一级a片| 无码任你躁久久久久| 日本一区二区视频在线观看| 伊人免费成人视频| 麻豆传媒电影| 一区二区三区无码在线观看| 男女日皮视频| 欧美一级黄片免费看| 韩国gogogo高清在线完整版| 亚洲成人视频在线免费观看| 天天舔天天日| 国产无码自拍| 日韩视频三区| 亚洲高清无码中字| 黄网站在线播放| 国产丝袜视频| 激情婷婷 | 国产精品av在线播放| 国产AV日韩AV| 久在线| 亚洲人气无码AV| 69国产成人精品二区| 美女扣穴| 丰满少妇一区二区三区| 亚洲免费高清| 肏逼视频免费看| 国产久久性爱| 美女福利在线| 图片区视频区小说区| 久久99久久99久久| 天堂网资源| 久久久久久91| 免费无码成人片在线播放| 日韩一级黄色电影| 国产成人tv| 久久综合在线| JiZZjiZZ亚洲成熟熟妇| 中文字幕三级片| 亚洲精品一线| 免费看的操逼视频| 91蜜桃网| 亚洲电影在线观看| 白峰美羽人妻AND-499| 五月天婷婷黄色| 波多野结衣在线网站| 国产v片| 黄片www.| 操逼爽| 亚洲最大无码| 国产黄色av| 日韩国产成人在线| 五月婷婷色色色| 欧美亚洲成人在线| 午夜艹 | 亚洲另类av| 日本免费黄| 欧美精品无码| 俺去也| 国产精品人妻无码一区牛牛影视| 西西444WWW无码大胆知乎| 国产视频无码| 中文字幕一区二区蜜桃| 日韩一本道在线| 青青操在线| www.骚逼| 西西午夜视频| 亚洲天堂手机在线| 精品九九九九| 日韩欧美综合一区| 亚洲二区视频| 亚洲你懂的| 女人操逼视频| 欧美一级片免费观看| 在线免费看黄色视频| 精品人妻中文字幕| 成人亚洲精品一区二区三区| 亚洲免费成人网| 丁香五月AV| 深爱激情综合| 中文字幕12页| 97视频在线免费观看| 午夜黄电影| 91吴梦梦无码一区二区| 天天草天天| 国产精品一二三| 大鸡巴久久久久| 亚洲免费一级| 中文字幕视频2023| 天堂网影音先锋| 天天插天天日| 国产成人午夜| www.seses| 免费视频无码| 精产国品一区二区区别| 色色网站视频| 老婆被黑人杂交呻吟视频| 中文字幕视频在线| 18禁成人A∨片| 婷婷五月天色色| 久久久网站| 91操操操| 欧美口爆视频| 爱搞视频在线观看| 亚洲无码理论片| 色中色在线视频| 91日韩在线| 99热精品免费| 亚洲视频在线免费播放| 中日美朝美女一级片免费看 | 国产白嫩精品久久久久久| 亚洲无码一二区| 日日干夜夜撸| 欧一美一婬一伦一区?| 91欧美精品| 日逼视频| 嫩草导航| 亚洲清高毛无码毛片| 亚洲无码日| 天堂网亚洲| www.97色色| 一本色道久久综合狠狠| 日韩精品一二区| 久草91| 久9久9久9久9久9久9| 色婷婷亚洲婷婷|