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

Spring Boot + MyBatis + MySQL讀寫分離

共 23438字,需瀏覽 47分鐘

 ·

2021-09-29 12:51

關(guān)注我們,設(shè)為星標(biāo),每天7:30不見不散,架構(gòu)路上與您共享 

回復(fù)"架構(gòu)師"獲取資源


1.  引言


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

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

2.  AbstractRoutingDataSource

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

3.  實(shí)踐

關(guān)于配置請(qǐng)參考《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-url: jdbc:mysql://192.168.102.31:3306/test
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
    slave1:
      jdbc-url: jdbc:mysql://192.168.102.56:3306/test
      username: pig # 只讀賬戶
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
    slave2:
      jdbc-url: jdbc:mysql://192.168.102.36:3306/test
      username: pig # 只讀賬戶
      password: 123456
      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<Object, Object> 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個(gè)數(shù)據(jù)源,1個(gè)master,2兩個(gè)slave,1個(gè)路由數(shù)據(jù)源。前3個(gè)數(shù)據(jù)源都是為了生成第4個(gè)數(shù)據(jù)源,而且后續(xù)我們只用這最后一個(gè)路由數(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個(gè)數(shù)據(jù)源,所以我們需要為事務(wù)管理器和MyBatis手動(dòng)指定一個(gè)明確的數(shù)據(jù)源。
3.3.  設(shè)置路由key / 查找數(shù)據(jù)源
目標(biāo)數(shù)據(jù)源就是那前3個(gè)這個(gè)我們是知道的,但是使用的時(shí)候是如果查找數(shù)據(jù)源的呢?
首先,我們定義一個(gè)枚舉來代表這三個(gè)數(shù)據(jù)源
package com.cjs.example.enums;

public enum DBTypeEnum {

    MASTER, SLAVE1, SLAVE2;

}
接下來,通過ThreadLocal將數(shù)據(jù)源設(shè)置到每個(gè)線程上下文中
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();
// }
// }
}
有一般情況就有特殊情況,特殊情況是某些情況下我們需要強(qiáng)制讀主庫,針對(duì)這種情況,我們定義一個(gè)主鍵,用該注解標(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,因?yàn)楦叻鍟r(shí)期主從同步可能延遲
        // 這種情況下就必須強(qiáng)制從主數(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");
    }

}
查看控制臺(tái)

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





到此文章就結(jié)束了。如果今天的文章對(duì)你在進(jìn)階架構(gòu)師的路上有新的啟發(fā)和進(jìn)步,歡迎轉(zhuǎn)發(fā)給更多人。歡迎加入架構(gòu)師社區(qū)技術(shù)交流群,眾多大咖帶你進(jìn)階架構(gòu)師,在后臺(tái)回復(fù)“加群”即可入群。







這些年小編給你分享過的干貨

1.SpringBoot物流管理項(xiàng)目,拿去學(xué)習(xí)吧(附源碼)

2.ERP系統(tǒng),自帶進(jìn)銷存+財(cái)務(wù)+生產(chǎn)功能,拿來即用(附源碼)

3.帶工作流的SpringBoot后臺(tái)管理項(xiàng)目快速開發(fā)(附源碼)
4.最好的OA系統(tǒng),拿來即用,非常方便(附源碼)

5.SpringBoot+Vue完整的外賣系統(tǒng),手機(jī)端和后臺(tái)管理,附源碼!

6.SpringBoot+Vue 可視化拖拽編輯的大屏項(xiàng)目(附源碼)

轉(zhuǎn)發(fā)在看就是最大的支持??

瀏覽 36
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产精品秘精东影业| 亚洲综人网| 国产91一区在线精品| 久久久久久久国产精品| 五月丁香999| 日本道在线视频| 成人午夜视频精品一区| av免费网站| 欧美久草| 亚洲最大黄色视频| 日本国产视频| 色欲一区二区三区| 日本无码久久嗯啊流水| 婷婷五月色| 大伊人久久| 日韩区一中文字幕a∨| 91大吊| 亚洲欧美日韩无码| 另类av| 黄色91| 亚洲精品色| 粉嫩小泬BBBBBB免费看| 18禁网站在线播放| 黄色免费高清视频| 久久久婷婷| 亚洲一区在线视频| HEZ-502搭讪绝品人妻系列| 色综合天天操| 青娱乐成人电影| 中文字幕一区三区人妻视频| 日韩无码人妻久久一区二区三区| 久久精品视频免费| 国产最新视频| 热久久免费| 免费黄色视频网站大全| 国产一级性爱| 老司机午夜免费精品视频| 中文无码日本高潮喷水| 国产激情欧洲在线观看一区二区三区| 99re视频在线| 成人国产AV| 高清无码中文字幕在线观看| 欧美大香蕉伊人| 荫蒂添的高潮免费视频| 波多野结衣无码网站| 青娱乐国产AV| 亚洲图片激情乱伦小说| 国产色情性黄片Av网站| 免费无码一区二区三区| 大鸡吧在线视频| 成人av中文字幕| 国产精品porn| 久操视频免费看| 清清草在线视频| 五月婷婷狠狠爱| 国产欧美激情| 午夜福利高清在线观看| 欧美A∨| 高清免费无码视频| 91在线无码精品秘蜜桃入口| 精品一区二区ww| 内射免费网站| 五月婷婷色播| 久操久| 国产91久久婷婷一区二区| 熟女影音先锋| 一区二区三区小视频| 久久成人A片| 淫荡五月天视频导航| 黃色一级一片免费播放| 国产三级片网址| 欧美激情网址| 五月天久久久| 怡春院av| 中文无码日本一级A片久久影视| 91精品国产综合久久久蜜臀主演| 人人色人人操人人干| 日韩美女免费视频| 中文字幕无码在线观看视频| V天堂| 欧美黄色免费在线观看| 国产中文字字幕乱码无限| 成人做爱黄片| 高清毛片AAAAAAAAA郊外| 一级黄A片| 99精品视频北条麻妃国产版 | 欧美a片在线观看| 黄网在线播放| 校园春色亚洲无码| 成年人免费视频在线观看| 国内精品久久久久久久久98| 三级在线网站| 天天日天天干天天草| 99精品在线播放| 亚洲视频在线观| 日韩三级视频在线观看| 亚洲天堂美女| 亚洲精品系列| 日韩AV免费在线播放| 国产高清自拍| 韩国日本美国免费毛片| 亚洲高清视频无码| 免费在线无码视频| 欧美黄色免费在线观看| 亚洲AV播放| 亚洲免费黄色视频| 3344gc在线观看入口| 51妺嘿嘿午夜福利| 免费一区二区三区四区| 日韩欧美在线中文| 超碰二区| 自拍三级| 草在线| 伊人久久视频| 超碰在线看| 久久久国产精品视频| 中文字幕免费视频| 少妇白浆| 成人操b视频| 国产一区一区| 麻豆md0049免费| 中文在线a√在线8| 无码高清一区二区| 男女拍拍视频| 日韩vA| 亚洲精品美女视频| 无码人妻一区二区三区在线视频不卡| 精品无码久久久| 欧美日本国产| 国产精品无码一区二区在线欢| 欧美色色色| 女同一区二区三区| 国产v亚洲| 草逼视频免费看| 中文字幕乱码中文字幕| 大香蕉一级片| 99国产在线| 日本黄A级A片国产免费| 操逼视频下载| 久久久久久五月天| 黄色AV免费在线观看| 狠狠干影院| 中文字幕亚洲视频| 99成人电影| 天天舔九色婷婷| 国产一級A片免费看| 少妇高潮喷水| 久久精品免费观看| 大香蕉最新国产2025| 激情a| 成人黄色免费视频| 四川少妇搡bbw搡bbbb| 国产福利在线播放| 一级AA视频| 天天色天天| 老司机av| 先锋资源在线视频| 亚洲成人福利电影| 国产和日韩中文字幕| 日本黄色免费视频| 国产成人网| 精品乱子伦一区二区三区免费播放 | 一级性爱毛片| 俺来也俺去也www色官| 乱伦乱伦乱伦中文字幕| 免费的一级A片| 777免费观看成人电影视频| 激情99| 日韩精品免费| 99热免费在线| 中文字幕免费在线视频| 欧美一级A片免费看| 欧美成人黄色小说| 天天干天天色| 一级a免一级a做免费线看内裤的注意事项 | 久久久久久免费一级A片| 99久久婷婷国产综合精品青牛牛| 青草伊人av| 亚洲133| 无码视频播放| 色久综合| 99精品视频免费观看| 亚洲综合日韩在线| 久久黄网| 黄片久久| 日韩成人无码一区二区| 美女一区| 瑟瑟视频在线观看| 天天日天天操天天射| 天天av天天av天天爽| 人人操AV| 老熟女痒到不行-ThePorn| 亚洲资源网| 国产女人18毛片水真多18精品| 加勒比在线| 婷婷五月情| 日本少妇高潮| 熟妇槡BBBB槡BBBB| www.sese| 在线观看中文字幕av| 99精品免费视频| 亚洲无码第一页| 天天伊人| 黄色日逼视频| 久久久久久久| 久久人妻无码中文字幕系列| 午夜操一操一级| 久久久久久无码视频| 日韩欧美人妻无码精品| 欧美精产国品一二三区| 日韩二区| 成人性生活一级片| 午夜亚洲AV永久无码精品蜜芽 | 亚洲午夜剧场| 成年人在线观看| 久久久久久国际四虎免费精品视频| 亚洲一区中文字幕成人在线| 日韩一欧美| 久久成人18免费网站波多野结衣| 91宗合| 狠狠色av| 91精品国产成人做爰观看奶头 | 九色91PORNY国产| 一级看片免费视频| 2021天天操| 亚洲色久悠悠| AV网站在线播放| 蝌蚪窝在线观看| 国产成人A片| 逼特逼| 国产精品外围| 黃色毛片A片AAAA级20| 大肉大捧视频免费观看| 一本色道久久无码人妻精品69 | 国产亚洲精品午夜福利巨大软件| a√免费看| 蜜臀网在线| 男女啪啪动态图| 中文字幕第5页| 欧美日韩在线一区| 黄色A片网站| 久草福利在线| 在线播放中文字幕| 超碰天天干天天摸| 亚洲欧美国产另类| 亚洲美穴| 真人一级毛毛片| 大鸡巴草逼| 五月天婷婷激情视频| 久热精品免费| 懂色av粉嫩av蜜臀av| 亚洲AV永久无码精品| 五月婷婷激情网| 91国产爽黄在线相亲| 久久大香蕉视频| 手机看片福利永久| 成人五月天黄色电影| 亚洲香蕉视频网站| 色视频免费观看| 日韩人妻精品中文字幕专区不卡| eeuss一区二区| 天天夜夜人人| 中文天堂| 久久国产乱子伦精品免费女,网站| 超碰乱交av在线| 小黄片高清无码| 中文字幕无码免费| 婷婷五月天影视| 东方AV在线免费观看| 中文乱伦视频| 欧美五月婷婷| 亚洲精品乱码久久久久久按摩观| 欧美aaaaaa| 操屄视频免费观看| 久热免费| 爱搞搞就要搞搞| 97人妻在线| 亚洲口味重一级黄片| 国产精品无码一区二区三| 亚洲天堂国产视频| 国产又猛又黄又爽| 日韩小视频在线观看| 狠狠操综合网| 欧美人妻视频在线| 亚洲综合中文字幕在线播放| 狠狠操电影| 中文字幕不卡视频| 中文字幕综合| 色av影音先锋无吗一区| 国产女人与禽zOz0性| 亚洲免费视频网| 免费A在线| 夜夜骑夜夜| AV免费网站| 免费无码婬片A片AA片| 91视频网站免费观看| 亚洲无码18禁| 69成人网站| AA黄色电影| 中文字幕永久在线视频| 精品无码一区二区三区免费| 丝袜足交视频| 国产香蕉视频| 韩国无码成人电影啊荒| 大香蕉老师| 一区二区三区四区免费观看| 三级网站在线| 国产一精品一aⅴ一免费| A片免费网址| 一区二区免费看| 亚洲色图15p| 黄色不卡视频| 91九色91蝌蚪91成人| 国产激情无码视频| 99大香蕉视频| 欧美日韩加勒比| 日韩不卡中文字幕| 激情深爱五月| 国产第二页| 亚洲五月六月| 成人免费视频网| 亚洲中文无码字幕| 精品孕妇一级A片免费看| 2025无码视频| 三级久久久| 日本三级片免费观看| 一区二区三区四区av| 欧美日本在线观看| 日本久久久久久久久视频在线观看| 四虎最新地址| 天天操夜操| 婷婷久久综合| AAAA毛片视频| 成人免费乱码大片a毛片蜜芽| 无码AⅤ一区二区三区| 性A免费在线播放| av六月天| 性爱av天堂| 91麻豆精品| 欧美一级三级| 337p大胆色噜噜噜噜噜| 日日撸视频| 欧美精产国品一二三产品价格| 欧美成人性爱视频| 国产一区免费视频| 亚洲精品国偷拍自产在线观看蜜桃 | 99天天操| 丁香六月激情| 国产亚洲精品久久久波多野结衣 | 亚洲AV无码成人精品区天堂小说 | 北条麻妃无码| 五月婷婷黄色| 特级西西444www精品视频| 中文无码AV| 99热只有精| 性猛交AAAA片免费看蜜桃视频| 大香蕉伊人网在线| 亚洲AV大片| 中文字幕在线看| 免费日比视频| 亚洲va国产va天堂va久久 | 美女视频一区二区三区| 性爱AV天堂| 丁香五月欧美| 无码熟妇人妻无码AV在线天堂| 人人妻人人爽人人精品| 成人无码日本动漫电影| 亚洲AV无码成人精品区大猫| 国产一级婬片A片免费妖精视频| 成人性爱在线视频| 色婷婷视频在线观看| 欧美午夜激情视频| 无码视频一区| 国产伦理一区| 国产三级91| 亚洲人成77777| 久久666| 在线免费高清无码| 精品人妻一区二区蜜桃视频| 操美逼| 黄片大全免费看| 亚洲欧美国产另类| 日本操b| 欧美视频在线免费| 一级内射视频| 成人黄网在线观看| 精品成人无码| 亚欧综合在线| 99久久久久久久| 亚洲成人精品一区| 亚洲精品一区二三区不卡| 五月天婷婷在线视频| 五月婷婷在线播放| 精品无码AV一区二区三区| 国产精品扒开腿做爽爽爽A片唱戏| 色老板综合| 日本精品视频在线观看| 亚洲在线资源| 黄片在线视频| 成人午夜在线观看| 北条麻妃99精彩视频| 国产黄色无码| 日本黄在线播放| 蜜桃视频成人app| 我要看黄色一级片| 激情91| 91干干| 波多野吉衣视频| 亚州无码一区| 中国免费毛片| 国产十八岁在线观看| 成人午夜啪免费视频在线观看软件| 日韩在线小视频| 一区二区三区观看| 午夜黄色操逼视频| 国产精品视频免费看| 一级婬片A片AAAAA毛片| 亚洲久久无码| 日韩AV成人电影| 99色播| 国产香蕉在线| 国产亲子乱婬一级A片借种 | av电影在线观看| 亚洲秘无码一区二区三区| www.尤物| 国产一区二区成人久久919色| 久久久久久久久久久久成人 | 久久久激情| 蜜臀久久99精品久久久久久牛牛| 久久538| 444444在线观看免费高清电视剧木瓜一 | 五月丁香啪啪啪| 中文字幕在线视频免费观看| 人人上人人操| www.天天干| 成人伊人综合| av黄色网址| 嫩BBB嗓BBBB榛BBBB| 色哟哟无码| 能看毛片的网站| 性色网站| 91丨PORNY丨丰满人妻网站| 国产精品美女久久久| 97中文字幕| x88AV吊钟奶熟女| 亚洲三级在线免费观看| 无码视频在线播放| www国产精品| 婷婷黄色网| 成人视频在线观看18| 91女人18毛片水多的意思 | 免费黄片在线看| 中文字幕在线观看不卡| 国产毛片精品一区二区色欲黄A片| 无码不卡一区| 综合一区二区| 欧美午夜网站| 围内精品久久久久久久久久‘变脸| 在线观看不卡av| 精品一区二区三区蜜桃臀www| 最新超碰| 三级片网站视频| 精品码A片18| 北条麻妃九九九精品视频免费观看| 欧美视频一区| 欧美一级婬片免费视频黄| 五月丁香亭亭| 欧美aⅴ| 国产精品9999久久久久仙踪林| 国产不卡在线| 亚洲色图一区二区三区| 人妻HDHDHD96XXXX| 综合久久av| 韩国GOGOGO高清| 天天干天天干天天日| 亚洲国产精品成人久久蜜臀| 久久公开视频| www.97cao| 免费+无码+精品| www.a日逼| 国产精品无码在线观看| 亚洲在线视频播放| 欧美色视频在线观看| 国产视频激情| 国内自拍视频网站| 69国产成人精品二区| 国产国产国产在线无码视频| 三级久久| JUY-579被丈夫的上司侵犯后的第7天,我 | 无码人妻精品一区二区蜜桃漫画| 亚洲乱伦av| 男人的天堂视频在线观看| 国产操穴视频| 中文字幕亚洲在线| 婷婷五月天社区| 影音先锋日韩资源| 日本中文字幕在线播放| 国产美女高潮视频| 久色91| 日本韩国高清无码| 国产精品美女在线观看| 在线三级av| 国产青草视频在线观看| www.日韩系列| 伊人青草视频9| 亚洲操逼网| 国产乱伦免费| 欧美黄色小视频| 一本道在线无码| 亚洲精品成人av无码| 成人色色网站| 密臀av在线| 超碰成人网| 偷拍视频第一页| 日韩亚洲在线观看| 一级片麻豆| 91大熟女91大腚女人| 人妻人人干| 色福利网| 蜜桃网一区二区| 黄色一级aa片| 国产免费操逼| 日韩va亚洲va欧美va高清| 毛片在线看片| 九九九热精品| 18禁网站在线看| 黄色一级在线| 青草成人在线| 国产青草视频在线观看| 日韩国产综合| 伊人久久久久久久久久久| 欧洲精品在线免费观看| 麻豆黄色电影| 婷婷日韩在线| 一级片网址| 亚洲AV无码久久久| 午夜偷拍视频| 久久国产亚洲| H片免费在线观看| 日日艹夜夜艹| 成人中文字幕在线观看| 欧美AA视频| 亚州天堂| 亚洲精品成人av无码| 五月丁香婷中文| 一本色道久久综合熟妇| 亚洲精品一区二三区不卡| 大香蕉91| 丁香五月在线观看| 手机看片午夜福利网| 日本无码区| 欧美性爱动态| 中文字幕无码Av在线| 欧美日韩在线观看中文字幕| 欧美插菊花综合网| 欧美精品性爱视频| 亚欧成人网站| 爱搞搞视频| 又大又黄又爽| 91三级视频| 天堂在线免费视频| 国产无码一区二区| 北条麻妃久久网站| 免费+无码+精品| 国产亚洲精品久久久波多野结衣 | 成人影片在线观看网站18| 91视频观看| 中文字幕乱码免费综合久久| 亚洲精品乱码久久久久久蜜桃欧美 | 久久77777| 亚洲另类色图| 三级片在线视频| 亚洲欧美大香蕉视频网| 日本黄在线播放| 免费看黄视频| 色黄网站在线观看| 色色婷婷五月| 性久久久久久久| 超碰AV在线| 按摩忍不住BD中文字幕| 91巨乳| 91久久午夜无码鲁丝片久久人妻| 一级a免一级a做免费线看内祥| 无码人妻精品一区二区三区蜜臀百度 | 国产欧美在线看| 日本親子亂子倫XXXX50路| 热99| 美国一级A片草草视频| 日韩欧美国产成人| 高清无码视频免费| 日本色视频| 国产精品人妻AⅤ在线看| 久久精品中文字幕| 操逼AⅤ| 热久久最新| www.91com| 国产精品theporn| 欧美淫乱视频| 久久h| 国内自拍99| 91爱搞在线| 免费在线观看黄视频| 在线无码人妻| 国产精品后入| 996久久| 肏屄在线观看| 欧美午夜影院| 夜夜骑天天| 日韩亚洲天堂| 99在线精品视频观看| 欧美另类| 一区二区三区在线观看视频| 亚洲一线播放| 九九九网站| 人人射在线| 国产黄色A片| 五月婷婷免费视频| 1插菊花网| 91麻豆精品91久久久ios版| 成人自拍偷拍| 国产1024在线| 亚洲在线第一页| 色婷婷影院| 伊人在综合| 国产aaaaaaaaaa| 69成人免费视频| 国产AV大全| 精品久草| 日韩欧美操逼视频| 亚洲天堂在线免费观看| 亚洲成人精品| 蜜桃久久久亚洲| wwwAV| 国产美女裸体网站| 日本一级婬片A片免费播放一| 毛片精品| 这里有精品| 911国产视频| jzzijzzij亚洲成熟少妇在线播放| 青青草视频在线免费观看| 加勒比久久久| 中文字幕无码网站| 国产粉嫩| 美女AV网站| 家庭乱伦AV| 男人天堂影院| 91日韩高清| 国产91探花秘入口| 色天堂色天使| 人人操人人摸人人爽| 第一福利视频| 草逼A片| 极品一线天小嫩嫩真紧| 亚洲AV成人无码精在线| 做爱A片| 精品久久一区| 久久亚洲中文字幕乱码| 国产精品国产精品国产专区不52| 久久艹大香蕉| 在线播放日韩| 午夜爽爽爽| 国产又爽又黄A片免费观看| 天堂网一区二区三区| 四川BBB搡BBB搡多人乱| 亚洲aV影院| 波多在线视频| 日韩免费| 日本黄色A片免费看| 在线免费观看黄色电影| 人妻无码精品久久人妻成人| 日本A片免费观看| 99国产视频| 青娱乐日韩| A片一级片| 免费国产精品视频| 三级片91| 亚洲无码高清电影| 强伦轩一区二区三区四区| 最新中文字幕视频| 色婷婷精品视频| 国产美女自拍| www.五月天| 天天色播| www.操操操| 国产免费无码一区二区| 午夜视频网站| 日韩视频一区二区| 少妇人妻一区二区三区| 91在线播放视频| 我要看黄色一级片| 国产AⅤ爽aV久久久久成人| 欧美性一区| 日韩精品91| 99伊人在线| 中文字幕+乱码+中文乱码电影 | 精东影业AV无码精品| 超碰自拍私拍二区三区区| 欧美成人视频网| A片免费在线观看| 精品视频在线观看免费| 成人视频网站18| 亚洲无码视频看看| 91外围女视频| 91精品在线免费观看| 人人妻人人澡人人爽久久con| 国产精品秘久久久久久| 少妇被躁到高潮无码| 日韩成人网站在线观看| 91狠狠爱| 日日夜夜拍| 亚洲视频在线观看播放| 亚洲AV成人精品日韩在线播放| 久久久久久免费一级A片| 亚洲成人视屏| 黄色视频网站观看| 午夜av无码| 国产成人午夜高潮毛片| AV毛片| 大地资源38页| а√在线中文网新版地址在线| 精品一区二区久久久久久久网站 | 亚洲不卡中文字幕| 国产精品视频在线看| 久久久久性爱| 日韩精品一二| 亚洲激情网站| 人妻啪啪视频| 午夜艹| 亚洲小黄片| 中国熟睡妇BBwBBw| 久久逼逼| 色五月激情网| 后入少妇视频| www.精品视频| 亚洲人妖在线| 玖玖在线视频| 天堂网在线观看| 国产寡妇亲子伦一区二区三区四区| 中文字幕乱码中文字乱码影响大吗 | 四季AV一区二区夜夜嗨| 午夜无码福利视频| 少妇大战28厘米黑人| 国产精品无码在线播放| 好吊视频一区二区三区红桃视频you| 九色国产视频| 亚洲一区二区免费视频| 中文无码在线| 91色综合| 日韩在线视频第一页| 亚洲视频在线观看免费| 国产精品免费人成人网站酒店| 欧美精品操逼| 成人免费毛片AAAAAA片| 日韩三级久久| 青娱乐国产精品| 图片区视频区小说区| 国产精品码一本A片| 超碰在线人人干| 亚洲区视频| 国产欧美日韩在线视频| 香蕉大综合| 亚洲欧洲免费视频| 狠狠干在线观看| 骚BBBB槡BBB槡BBB| 国产精品操逼| 夜夜操网站| 精品一区二区免费| 性爱网站免费看| www.人人操| 午夜神马影院| 伊人大香蕉在线网| 亚洲网站在线观看| 69视频国产| 翔田千里无码播放| 操日视频| 色色色综合| 一二三区视频| 男人天堂视频网站| 日韩av中文字幕在线播放| 久久精品中文字幕| 久久艹逼| 学生妹内射| 无码一级A片| 99热综合| 狼友无码| 欧美一级欧美三级在线观看| 女人18片毛片60分钟翻译| 久久嫩草在线影院| 91在线播放视频| 高清无码视频观看| 99热只有精| 黄色一级生活片| 亚洲AV无码乱码| 国产午夜在线观看| 黄色片大全| 亚洲精品成人网站| 在线啪| 久久机热| 精品天堂| 超碰97在线免费| 大香蕉综合在线观看| 日韩电影免费在线观看| 亚洲天堂中文字幕| 真实国产乱子伦毛片| 色五月AV| 欧美污视频在线观看| 白丝久久| 超碰91在线| 日本久久电影| 亚洲激情四射| 成人片毛片| 一区免费在线观看| 一道本无码免费视频| 操老女人视频| 一区二区三区电影高清电影免费观看 | 永久久久久久久| 午夜久久福利| 麻豆疯狂做受XXXX高潮视频| 91成人在线观看国产| 免费看黃色AAAAAA片| 成人无码日韩| 美女天天干| 麻豆AV免费看| 香蕉在线播放| 52妺嘿嘿午夜福利在线| 激情性爱婷婷色五月| 久久一本| 日韩在线综合| 日韩中文字码无砖| AV资源网站| AV高清无码在线| 亚洲免费观看高清完| 日韩免费网| 天天噜天天操| 亚洲精品一区无码A片丁香花| 美女天天操| 国产又爽又黄免费网站在线观看 | 波多野结衣无码一区二区| 亚洲中文幕| 无码乱码在线观看| 久久青娱乐| 欧美三级欧美一级| 五月天堂婷婷| 国产在线一二三| 操青青| 国产欧美综合在线三区| 99热这里有精品| 激情一区二区| 午夜成人精品视频| 一级特黄大片录像i| 激情综合五月| 久久午夜影院| 69AV在线播放| 北条麻妃精品| 欧美日韩一二| 欧美XXX视频| 天堂中文资源库| 日本A片免费观看| 99久久婷婷国产综合精品hsex| 五月天久久精品| 一级特黄妇女高潮AA片免费播放| 中文字幕在线乱| 综合精品7799| 国产熟睡乱子伦午夜视频_第1集 | 丰满人妻一区二区三区46| 亚洲图片在线| 人人摸人人操人人看| 午夜av电影| 尻屄视频网站| 中文字幕日韩有码| 天天日天天操天天爽| 人妻18无码人伦一区二区三区精品| 日韩乱伦网站| 狠狠91| 澳门无码视频| 亚洲精品秘一区二区三区影| 在线无码中文字幕| 超碰极品| 久久婷婷国产麻豆91天堂| 国产精品一区二区三区在线| 97中文字幕在线| 六月婷婷中文字幕| 大茄子熟女AV导航| 亚洲黄色小视频| 99久久精品国产精品有折扣吗 | 一本一道伊人99久久综| 一曲二曲三曲在线观看中文字| 熟练中出-波多野结衣| 久久久偷拍| 日韩人妻一区二区三区| 亚洲无码免费观看视频| www.bbbb| 夜夜骚精品人妻av一区| 国产高清无码片| 四川搡BBBBB搡BBB| 中文字幕精品久久久久人妻红杏Ⅰ | 亚洲久爱| ThePorn精品无码| 亚洲成人av无码| 人妻精品久久久久中文字幕69|