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

SpringBoot+MyBatis+MySQL讀寫分離(實(shí)例)

共 10812字,需瀏覽 22分鐘

 ·

2020-11-18 07:58

作者:狂亂的貴公子

來源:cnblogs.com/cjsblog/p/9712457.html


1. 引言

讀寫分離要做的事情就是對于一條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)(不足之處)在于無法動態(tài)增加數(shù)據(jù)庫節(jié)點(diǎn),因?yàn)閿?shù)據(jù)源配置都是寫在配置中的,新增數(shù)據(jù)庫意味著新加一個(gè)數(shù)據(jù)源,必然改配置,并重啟應(yīng)用。當(dāng)然,好處就是相對簡單。


2. AbstractRoutingDataSource

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


3. 實(shí)踐

關(guān)于配置請參考:

https://www.cnblogs.com/cjsblog/p/9706370.html

3.1. maven依賴


<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.0modelVersion>

????<groupId>com.cjs.examplegroupId>
????<artifactId>cjs-datasource-demoartifactId>
????<version>0.0.1-SNAPSHOTversion>
????<packaging>jarpackaging>

????<name>cjs-datasource-demoname>
????<description>description>

????<parent>
????????<groupId>org.springframework.bootgroupId>
????????<artifactId>spring-boot-starter-parentartifactId>
????????<version>2.0.5.RELEASEversion>
????????<relativePath/>?
????parent>

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

????<dependencies>
????????<dependency>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-starter-aopartifactId>
????????dependency>
????????<dependency>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-starter-jdbcartifactId>
????????dependency>
????????<dependency>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-starter-webartifactId>
????????dependency>
????????<dependency>
????????????<groupId>org.mybatis.spring.bootgroupId>
????????????<artifactId>mybatis-spring-boot-starterartifactId>
????????????<version>1.3.2version>
????????dependency>
????????<dependency>
????????????<groupId>org.apache.commonsgroupId>
????????????<artifactId>commons-lang3artifactId>
????????????<version>3.8version>
????????dependency>

????????<dependency>
????????????<groupId>mysqlgroupId>
????????????<artifactId>mysql-connector-javaartifactId>
????????????<scope>runtimescope>
????????dependency>
????????<dependency>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-starter-testartifactId>
????????????<scope>testscope>
????????dependency>
????dependencies>

????<build>
????????<plugins>
????????????<plugin>
????????????????<groupId>org.springframework.bootgroupId>
????????????????<artifactId>spring-boot-maven-pluginartifactId>
????????????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ù)源配置

package?com.cjs.example.config;

import?com.cjs.example.bean.MyRoutingDataSource;
import?com.cjs.example.enums.DBTypeEnum;
import?org.springframework.beans.factory.annotation.Qualifier;
import?org.springframework.boot.context.properties.ConfigurationProperties;
import?org.springframework.boot.jdbc.DataSourceBuilder;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;

import?javax.sql.DataSource;
import?java.util.HashMap;
import?java.util.Map;

/**
?*?關(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?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配置

package?com.cjs.example.config;

import?org.apache.ibatis.session.SqlSessionFactory;
import?org.mybatis.spring.SqlSessionFactoryBean;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;
import?org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import?org.springframework.jdbc.datasource.DataSourceTransactionManager;
import?org.springframework.transaction.PlatformTransactionManager;
import?org.springframework.transaction.annotation.EnableTransactionManagement;

import?javax.annotation.Resource;
import?javax.sql.DataSource;

@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手動指定一個(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è)線程上下文中

package?com.cjs.example.bean;

import?com.cjs.example.enums.DBTypeEnum;

import?java.util.concurrent.atomic.AtomicInteger;

public?class?DBContextHolder?{

????private?static?final?ThreadLocal?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)

package?com.cjs.example.aop;

import?com.cjs.example.bean.DBContextHolder;
import?org.apache.commons.lang3.StringUtils;
import?org.aspectj.lang.JoinPoint;
import?org.aspectj.lang.annotation.Aspect;
import?org.aspectj.lang.annotation.Before;
import?org.aspectj.lang.annotation.Pointcut;
import?org.springframework.stereotype.Component;

@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)制讀主庫,針對這種情況,我們定義一個(gè)主鍵,用該注解標(biāo)注的就讀主庫

package?com.cjs.example.annotation;

public?@interface?Master?{
}

例如,假設(shè)我們有一張表member

package?com.cjs.example.service.impl;

import?com.cjs.example.annotation.Master;
import?com.cjs.example.entity.Member;
import?com.cjs.example.entity.MemberExample;
import?com.cjs.example.mapper.MemberMapper;
import?com.cjs.example.service.MemberService;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.stereotype.Service;
import?org.springframework.transaction.annotation.Transactional;

import?java.util.List;

@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?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. 測試

package?com.cjs.example;

import?com.cjs.example.entity.Member;
import?com.cjs.example.service.MemberService;
import?org.junit.Test;
import?org.junit.runner.RunWith;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.boot.test.context.SpringBootTest;
import?org.springframework.test.context.junit4.SpringRunner;

@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)



題外話: 目前小哈正在個(gè)人博客(新搭建的網(wǎng)站,域名就是犬小哈的拼音)?www.quanxiaoha.com?上更新《Go語言教程》,畢竟Go自帶天然的并發(fā)優(yōu)勢,后端的同學(xué)還是要學(xué)一下的,這個(gè)教程系列小哈會一直更新下去,目前已經(jīng)更新到 Go語言的基礎(chǔ)語法了,歡迎小伙伴們訪問哦~

END


有熱門推薦?

1.?Java 身份證號碼識別系統(tǒng) !

2.?高可用解決方案:同城雙活?異地雙活?異地多活?怎么實(shí)現(xiàn)?

3.?一款 PO VO DTO 轉(zhuǎn)換神器,求求你別在到處找工具類了!

4.?面試管:用了HTTPS就安全了嗎?HTTPS 會被抓包嗎?

最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

謝謝支持喲 (*^__^*)

瀏覽 43
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 亚洲欧美国产精品专区久久| 肉片无遮挡一区二区三区免费观看视频 | 伊人激情五月天| 先锋影音在线| 狠狠色噜噜狠狠狠888| 亚洲伊人av| 黄色视频网站在线| 日韩在线观看一区| 久久嫩草国产成人一区| 亚洲婷婷在线视频| 久久三级片电影| 日韩性爱网站| 成人片网址| 成人网站毛片| 人人干天天操| 国产小黄片在线| 色五月视频在线| 麻豆传媒视频观看| 一区二区三区毛片| 无码一道本一区二区无码| 美女乱伦视频| 日韩视频二区| 久久久久久久久久久亚洲| 三级免费无限AV| 成人免费无码婬片在线| 91狠狠色丁香婷婷综合久久| 黑人猛躁白人BBBBBBBBB | 日韩A| 西西人体大胆ww4444| 婷婷亚洲天堂| 麻豆自拍偷拍视频| 特级西西人体www高清大胆| 精品乱子伦一区二区三区下载| 中文人妻| 蜜臀久久99精品久久久老牛影视| 99久久精品国产精品有折扣吗| 亚l洲视频在线观看| 69成人在线电影| 国产成人自拍视频在线| 欧美黑人操逼视频| 日日夜夜老司机| 婷婷久久综合久色| 日韩一级无码视频| 婷婷午夜精品久久久久久性色AV| 国产Av高清| 黄视频免费| 99热国品| 日本一区中文字幕| 自拍偷拍福利视频网站| 五月激情婷婷基地| 久久草| 天天干,夜夜操| 蜜桃av在线播放| 国产插穴| 人人爽久久涩噜噜噜网站| 网站啪啪| 国产精品乱伦片| 啪啪视频m3u8| 日韩性无码| 激情日逼| 色婷婷艹| 日逼视频网站| 91精品无码| 无码人妻一区二区一牛影视| 国产精品国产精品国产专区不卡| 日本无码免费视频| 日韩大片在线观看| 午夜资源网| 国产毛片精品一区二区色欲黄A片| 午夜老司机福利一二三区| 亚洲综合免费观看高清完整版在线观 | 三级乱伦视频| 操B视频在线免费观看| 久久久亚洲AV| 五月天婷婷操逼视频| 亚洲日韩在线播放| 肏屄网站| 久久av电影| 一本道高清无码视频| 国产成人精品视频免费| 色婷婷一区二区| 一本一道无码免费看视频| 黄色视频小说| 9l农村站街老熟女| 综合久久中文字幕| 丁香婷婷激情五月| 操逼操逼逼| 日韩五码在线| 久久久xxx| 无码六区| 黄色电影av| 亚洲第一成年人网站| 亚洲Aⅴ| 操美女91| 国产3p绿帽骚妻视频| 国产成人免费观看视频| 思思热在线视频播放| 在线观看一区二区视频| 99热中文字幕在线观看| 黄色免费在线观看网站| 香蕉网站操逼片| 日本一区二区三区免费看| 中文字幕乱码免费综合久久| 亚洲国产熟妇综合色专区| 日本高清色清di免费观看| 日韩成人精品中文字幕| 亚洲欧美大香蕉视频网| 天堂无线av无码av| 正在播放李彩斐被洋老外| 亚洲小视频| 黄网国产手机在线观看| 欧洲黑人成人A版免费视频| 久久R5| 五月天干美女| 中字一区人妻水多多| 四虎无码丰满人妻| 午夜免费播放观看在线视频| 成人区色情综合小说| 国产操屄网| av福利在线观看| 操你啦青青草| 免费福利在线视频| 西西444WWW无码视频软件功能介绍 | 毛片视频网站| 97人妻无码一区二区| 熟女人妻人蜜桃视频| 日韩国产av| 亚洲性爱在线观看| 青青青操| 色tv在线| 中国免费视频高清观看| 五月天婷婷AV| 东方AV免费在线观看| 69伊人| 亚洲三级AV| 成人在线黄片| 午夜黄色视频在线观看| av中文无码| 一本色道久久综合无码人妻软件| 成人在线不卡| 欧美日本在线观看| 婷婷99狠狠躁天天躁| 河南少妇搡BBBB搡BBBB| 免费国产视频| 搞黄免费视频视频| 败火老熟女ThePorn视频| 亚洲俺去了| 亚洲七区| 九九精品网| 老太婆擦BBBB撩BBBB| 91超碰大香蕉| 国产乱子伦-区二区三区四区| 国产精品久久久久久久久夜色| 极品少妇AV| 亚洲自拍偷拍视频| 黄色伊人| 日韩美女毛片| 亚洲影院第一页在线观看| 亚洲成av| 天天躁夜夜躁av| 男人的天堂免费视频| 三级片中文| 日本一级片在线观看| 人妻FrXXeeXXee护士| 强奷伦奷片91| 38D蜜桃臀| av福利在线观看| 学生妹一级大片| 日本免费色视频| 亚洲AV无码精品国产| 中文字幕高清无码视频| 中日韩无码| 中文字幕第一区| 91国产精品| 久草黄色电影| 蜜桃无码视频小说网站| 婷婷三级| 五月丁香激情综合| 911久久| 九九视频免费在线观看| 97人妻| 日本高清视频www| 成人动漫一区| 宅男噜噜噜66一区二区| AV在线一区二区三区| 综合在线视频| 97成人视频| 人妻少妇av中文字幕乱码牛牛| 麻豆成人无码| 毛片a级| 欧美亚洲日韩在线观看| 亚洲香蕉在线视频| 在线观看黄网| 色婷婷AV| 99精品一区二区三区| 国产亚洲无码激情前后夹击| 亚洲热在线| AV无码高清| 国产麻豆AⅤMDMD0071| 精品久久久999| 校园春色亚洲色图| 刘玥一区二区三区| 黄色影片在线观看| 久精品视频| 亚洲成人网站视频| 精品AAA| 中文字幕有码在线看| 亚洲欧洲AV| 山东wBBBB搡wBBBB| 99草自拍| 亚洲精品久久久久久久蜜桃| 午夜综合在线| 蜜臀AV成人精品| 婷婷五月色| 999久久精品| 99色热视频| 国产三级网址| 黄色成人在线免费观看| 91在线观看高清18| 日韩v欧美v日本v亚洲v国产v| A片黄色| 中国一级黄色毛片| 午夜av影院| 洞av| 国产福利在线导航| 青在线视频| av资源在线播放| 亚洲无码二区| 日本一区二区视频在线观看| 一区二区三区精品无码| 国产精品视频久久久| 亚洲av影院| 97精品人妻麻豆一区二区| 91久久久青青青青草| 丁香五月六月| 国产又粗又大| 黄片免费无码| 日韩中文字幕av在线| 国产插逼视频| 亚洲日韩电影| 青青草在线观看免费| 三级内射| 欧美性69| 日本性爱中文字幕| 亚洲欧美在线视频免费| 毛片黄色| 国产A片免费看| 操逼电影免费| 黄色成人在线观看视频| 性无码一区二区三区在线观看| 五月天乱伦小说| 99热66| 男人天堂中文字幕| 欧美亚洲国产一区二区三区 | 亚洲人妻无码在线| 一级A片免费黄色视频| 国产黄色片在线免费观看| av青青草原| 人人操人人插| 91成人综合| 台湾久久| 91午夜福利| 久久久久久麻豆| 精品欧美成人片在线| 国产免费高清| 蜜臀色欲AV无码人妻| 五月婷婷黄色| 十八女人高潮A片免费| 日韩一级电影在线观看| 姐弟乱伦性爱| 专业操美女视频网站| 日本黄色大片网站| 国产美女高潮视频| 欧美成人无码片免费看A片秀色| 操小逼视频| 欧美啊啊啊| 精精品人妻一区二区三区| 在线观看国产欧美| 色婷婷久久综合| 大香蕉999| 一级二级无码| 特黄色视频| 欧美午夜福利在线观看| 久草A片| 久久人人操人人| AA片免费网站| 黄色毛片av| 久久免费视频,久久免费视频| 国产中文字幕在线视频| 1024国产在线| 一级无码在线观看| 久久精品福利视频| 精品乱子伦一区二区在线播放| 人人操人人骑| 日韩视频中文字幕| 精品国产AV无码一区二区三区| 日韩美女操逼| 日韩精品欧美一区二区三区| 国产91白丝在线播放| 毛片视频网站| 亚洲午夜福利一区二区三区| 久草毛片| 大香蕉精品在线| 亚洲黄色在线免费观看| 国产免费AV网站| 女人的天堂AV在线观看| www伊人| 亚洲精品中文字幕无码| 色五月婷婷视频| 九九热av| 91熟女丰满原味| 豆花视频无码| 熟妇槡BBBB槡BBBB| 北条麻妃二区三区| 国产精品福利小视频| 大屌色片| 特级西西444www无码视频免费看 | 草久影院| 污污污污污www网站免费民国| 色色五月天视频| 东京热精品视频| 激情五月天亚洲| 一二三区视频| 日韩三级片AV| 亚洲免费观看高清完整版在va线观看 | 97色色超碰| 偷偷撸在线| 亚洲国产成人AV| 狠狠操av| 欧美成人A片AAA片在线播放| 西西西444www无码视| 国产乱码精品一区二区三区的特点| 日B无码| 日韩毛片在线观看| 蜜桃视频com.www| 图片区视频区小说区| 亚洲中文字幕免费观看视频| 亚洲乱伦中文字幕| 体内射精免费视频| 成人精品一区二区三区中文字幕| 99re在线| 性爱日韩| 久久精品一区二区三区四区五区| 精品国产区一区二| 91天天干| 欧美级黑寡妇毛片app| 国产精品网站在线观看| 欧美日韩V| 中文字幕国产在线| 婷婷好色五月天| 九九热在线精品| 日本三级久久| 欧美成人免费电影| 97这里只有精品| 安微妇搡BBBB搡BBBB| 加勒比DVD手机在线播放观看视频| 大香蕉伊人综合网| 国产又粗又大又爽91嫩草| 久久夜夜操| 中文字幕第4页| av牛牛| 日本无码嫩草一区二区| av手机在线| 亚洲一级av| 日韩一区二区三区无码电影| 爽好紧别夹喷水网站| 国产色婷婷精品综合在线播放| 免费乱伦| 国产精品乱伦片| 精品国产无码怀孕| 久久久久久久免费无码| 日韩一级一级| 日韩在线观看av| 日本人妻视频| 午夜综合网| 精品乱子伦一区二区三区,亚洲国产成| 国产99久久久| 日本不卡视频| 污污污污污www网站免费观看| 2025精品精品视频| 国产av三级片| 欧美午夜片| 久操视频在线观看免费| 国际精品久久久| 嫩BBB槡BBBB槡BBBB撒尿| 国产一毛a一毛a在线观看| 在线免费看a| 午夜福利免费在线观看| a网站在线观看| 色欲色欲一区二区三区| 伊人大香蕉久久| 欧美AAAAAAAAAA特级| 亚洲热在线| 四川少妇搡bbw搡bbbb| 超碰中文字幕| 要操逼网| 亚洲一线播放| 奇米91| 亚洲一卡| 无码av在线播放| 欧美v亚洲| 日韩A级片| 日韩欧美成人在线视频| 亚洲va在线∨a天堂va欧美va | 免费一级电影| 亚洲日韩免费| 影音先锋资源| JlZZJLZZ亚洲美女18 | 中文字幕一本道| 91免费视频网站| 亚洲综合在线播放| 国产黄色AV片| 日本激情视频| 国产suv精品一区二区6精华液| 亚洲第一色网站| 在线观看18s| 天天看天天干| 亚洲日韩欧美在线观看| 日韩欧美中文在线观看| 人人肏| 老妇槡BBBB| 午夜福利无码视频| 中国老女人性爱视频| 91精品国产闺蜜国产在线闺蜜| 国产精品久久久久久亚洲影视| 人人爱久久| 东京热精品视频| 成年免费视频| 免费aa片| 一区二区三区在线免费观看| 免费在线观看Av| 精品视频一区二区| 国产经典午夜福利视频合集| 亚洲vs无码蜜桃少妇| 午夜无码熟妇丰满人妻| 激情视频综合网| 日韩免费视频| 免费一级A毛片夜夜看| 五月天婷婷小说| 毛片在线视频| 91看片看婬黄大片| 亚洲综合伊人无码| 亚洲专区视频| 俺去俺来也在线www色情网| 亚洲猛男操逼欧美国产视频| 男人的天堂视频网站| 国产免费观看AV| 91在线精品秘一区二区黄瓜| 99在线国产| 撸撸综合网| 91免费观看视频| 人人看人人爱| 亚洲天堂福利| 深爱婷婷| 黄色在线免费观看网站| 丰满的人妻一区二区10| 狠狠干在线| 国产无套进入免费| 中文字幕天堂网| 中文字幕第83页| 熟妇熟女一区二区三区| 夜夜网站| 日本黄色视频免费观看| 亚洲自拍小说| 青草成人在线| 国产一级无码| 韩国三级HD久久精品HD| 日韩AV免费在线播放| 婷婷五月天中文字幕| 国产经典午夜福利视频合集| 婷婷激情六月| 97国产视频| 成人大香蕉网站精品免费| 天天操天天干天天| 免费看黄片网站| 国产精品无码成人AV在线播放 | 久久久久女人精品毛片九一| 狠狠干狠狠色| sm国产在线调教视频| 天堂精品在线| 色婷婷视频在线| 伊人在线视频观看| 国产一级A片在线观看| 91人妻无码一区二区三区| 天天操天天操天天操天天操| 99精品亚洲| 黑人无码| 一级黄色片视频| 国产欧美岛国| 精品无码在线观看视频| 久久这里只有| av色色| 国产无码电影在线观看| 日韩人妻精品无码久久边| 日本A在线| 无码人妻精品一区二区蜜桃漫画 | 中文字幕在线观看免费高清电影| 欧美三级理论片| 秋霞网一区二区| 黄色操逼网站| 日本中文字幕在线播放| wwwwww黄| 91麻豆国产福利精品| 男女草逼| 三级自拍| 男女拍拍拍拍| 国产精品日韩欧美| 99婷婷| 三级自拍| 91天天看| 精国产品一区二区三区A片 | 人人爽人人爽人人爽| 天天玩天天操| 先锋影音成人资源| 高清无码免费在线视频| 日韩视频一区二区三区| 性爱视频免费| 91一起草高清资源| 99九九99九九九99九他書對| 天天干,夜夜操| 婷婷五月一区| 日韩a√| AV超碰| 91在线无码精品秘国产三年| 日韩高清av| 精品视频在线观看免费| 亚洲免费观看高清完整| 大秀91视频| 91小宝寻花一区二区三区三级 | 操大逼视频免费国产| 18禁免费网站| 性欧美| 天天日天天摸| 国产一级婬乱片免费| 亚洲夜夜爱| 98色色| 欧美黄色三级片| 99reav| 欧美最猛黑A片黑人猛交蜜桃视频 色噜噜狠狠一区二区三区300部 | 日本在线不卡一区| 人人看人人干| 亚洲综合一区二区| 久久污| 亚州v| 午夜视频无码| 韩国中文字幕HD久久精品| 天堂网在线视频| 久久久久久高清毛片一级| 麻豆视频一区二区三区| 国产女人水真多18毛片18精品 | 狠狠91| JlZZJLZZJlZZ亚洲女人17| 午夜av在线| 欧美成人在线观看视频| AV性爱在线| 91天天看| 免费的a片| 西西4444WWW无视频| 国产拍拍拍| 午夜看黄片| 成人毛片100免费观看| 亚洲无码AV在线观看| 亚洲一在线| 国产成人高清在线| 操逼网址| 电影91久久久| 欧美日韩成人视频| 婷婷亚洲天堂| www.日韩一区| 国产第页| 爆菊花综合网| 安徽少妇搡bbw搡bbbb| 久久在线视频| 亚洲免费在线视频观看| 97人人射| 黄色电影一区二区| 婷婷成人视频| 国产3p露脸普通话对白| 中文字幕日本电影| 人人草人人| 国产高清无码视频在线观看| 一卡二卡无码| 肏屄视频免费| 一级午夜福利| 蜜桃视频app| 草久av| 操逼色| 日本乱伦电影中文字幕| www日韩| 第一福利视频| 国产操操操| 午夜福利aaa| 成年免费视频| 婷婷五月天啪啪| 足交在线播放| A免费观看| 99日韩无码| 脓肿是什么原因引起的,该怎么治疗| 9I成人免费版| 大香蕉在线网| 日韩麻豆| 自拍乱伦| 欧美亚洲自拍偷拍| 内射老太太| 中国一级片| 久久成人久久爱| 黄色a片网站| 国内一级A片| 韩国精精品视频| 91视频观看| 日韩欧美中文字幕在线观看| 3D动漫精品啪啪一区二区下载| 熟女18p| 国产又大又黄| 色欲网| 色欲AV网站| 日韩高清欧美| 亚洲日逼网站| 夜夜嗨av一区二区三区| www.777熟女人妻| 狠狠干,狠狠操| 国产免费一区二区三区免费视频| 国产一级黄片| 91人妻人人澡人人精品| 亚洲一级av| 91丨九色丨熟女老版| 美女黄片| 黄色成人网站免费在线观看| 91露脸熟女四川熟女在线观看| 亚色视频| 国产夫妻自拍AV| A级免费毛片| 欧美AAA片| 青青草原在线免费| 蜜桃亚洲AV无码一区二区三区| 日爽夜爽| 黄色视频在线观看地址| AⅤ天堂| 国产伦理一区| 大香蕉99热| 国产精品欧美激情| 亚州精品成人片| 中午字幕在线观看| AAA级片| 加勒比日韩无码| 亚洲免费在线看| 亚洲日韩免费在线观看| AV影院在线| 亚洲欧美熟妇久久久久久久久| 在线综合国产欧美| 佳佳女王footjob超级爽| 欧美色成人免费在线视频| 丁香六月婷婷久久综合| 国产成人秘一区二区三区东京热| 无码激情视频| jizz亚洲| 青青草原av| 国产视频久久| 成人在线网站| 国产特級黃色大片| 青草中文娱乐网在线| ⅴA日本成人| 大香蕉av一区二区三区在线观看| 青娱乐三级在线免| 神马Aⅴ| 天堂AV色| 偷拍92| 久久精品v| 丁香花中文字幕| 天天操天天操天天操天天| 性满足BBwBBWBBw| 欧洲精品在线视频| 国产91页| 欧美日韩在线观看一区二区三区| 91精品久久久久久综合五月天| 欧美日韩人妻| 成人一级a片| 日韩WWW| 97国产精品人人爽人人做| 欧洲第一无人区观看| 日本中文字幕免费| 日韩熟妇无码中文字慕| 自拍做爱视频| 喷水在线观看| 无码操逼视频| 中文字幕免费高清在线观看| 亚洲综合91| 黄片aaa| 无码视频免费在线观看| 午夜精东影业果冻传媒| 人人色人人色| 成人午夜黄色| 超碰激情| AV天堂手机| 久久yy| 99热99re6国产线播放| 天天干免费视频| 亚洲秘无码一区二区三区| 色婷婷久综合久久一本国产AV| 无码入口| 内射欧美| 伊人小视频| 九色PORNY9l原创自拍| 久操视频网| 91狠狠综合久久| 婷婷久久综合| 久久婷视频| 18禁网站在线看| 婷婷丁香五月花| 亚洲精品无| 草草影院CCYYCOM屁屁影院合集限制影院| 国产熟睡乱子伦午夜视频_第1集 | 香蕉视频啪啪啪| 久久大香蕉精品| 亚洲在线第一页| 欧美性BBB槡BBB槡BBB| 国产成人va| 青娱乐亚洲自拍| 亚洲成人在线免费观看| 日本A视频| 91性爱嫩逼视频| 中文原创麻豆传媒md0052| 欧一美一婬一伦一区二区三区自慰国 | 成人免费精品视频| 日韩高清无码网站| 欧美啪啪啪| 翔田千里av| 俺去俺来也www色视频| 免费操逼| 日韩一级性爱| 五月一区| 日韩亚洲精品中文字幕| 河南乱子伦视频国产| www男人天堂| 无码AⅤ一区二区三区| 有码在线| 91人妻人人澡人人爽人人精品| 国产性爱一级片| 九九惹伊人| 精品色哟哟| 一级黄色免费看| 精品在线第一页| 九九热精品视频在线观看| 午夜天堂| 黄色网址av| 吴梦梦无码| 黄片网站在线免费观看| 欧美亚洲成人电影| 99ri国产| 欧美日韩国产高清| 男女拍拍| 91精品国产成人www| 日日爱99| 黄色A片免费视频| 国产一级片在线| 成人黄网免费观看视频| 黑人av在线| 长泽梓黑人初解禁BDD07| 超碰91免费在线观看| 婷婷五月天电影网| 天堂一区二区18| www.A片| 久免费视频| 中文字幕不卡AV在线观看| 大香焦伊人国产| 亚洲在线资源| 国产黄色片视频| 亚洲免费一区二区| 九九久久精品| 国产欧美激情| 亚洲人妖在线| 草逼逼| 亚洲欧美日韩一区| 国产色av| 三洞齐开Av在线免费观看| 日日碰狠狠躁久久躁婷婷| 53岁露大奶熟女偷情贴吧| 久久国产精品一区二区三区| 性爱福利社| 天天射天天| 体内射精免费视频| 国产精品午夜在线| 一本一本久久a久久精品牛牛影视| 国产精品无码天天爽视频| 久久精品免费观看| 国产欧美在线不卡| 国产91高跟丝袜| 免费成人三级片| 丁香五月激情五月| 在线播放你懂的| 国外亚洲成AV人片在线观看| 精品久久免费一区二区三区| 内射婷婷| 四川乱子伦95视频国产| 五月天激情网站| 国产精品自拍一区| 无码五月天| 亚洲一级免费视频| 黄片大全在线观看| 91性爱嫩逼视频| 99色天堂| 五月丁香激情综合| 日韩免费视频一区二区| 人人操人人爽| 69伊人| 操逼激情网| 国产成人午夜福利在线| 夜夜骚AV一二三区无码| 午夜福利sw| 中文字幕视频免费| a4yy午夜福利| 大香蕉毛片| 欧美综合视频在线观看| 人人干人人妻| 乱伦网址| 亚洲AV免费在线观看| 综合插插| 欧美群交videotv群交| 伊人久久爱| 人妻人人操| 国产黄色视频在线播放| 大香蕉这里只有精品| 最新AV在线| 无码高清视频| 四川BBB操BBB| 丁香五月天av| 安徽妇搡BBB搡BBBB户外老太太| 国产欧美一区二区三区视频| 精品中文字幕视频| 成人AV中文字幕| www亚洲无码A片贴吧| 亚洲激情性爱| 免费的黄片| 亚欧洲精品在线视频免费观看| 国产XXXX| 欧美色图网址| 亚洲无码人妻视频| 欧美成人A| 日韩A人人| 黄色大片在线播放| 亚洲人妻无码一区| 欧美黄片在线| 日韩av电影免费在线观看| 欧美黄色性爱| 成人欧美大片黄18| 中文字幕日韩无码电影| 肏逼免费视频| 91丨PORNY丨丰满人妻网站| 亚洲精品乱码久久久久| 欧一美一婬一伦一区二区三区自慰国 | 青青伊人久久| 三级片AAA成人免费| 午夜视频成人| 久久精品国产精品| 啪啪啪啪网站| 国产欧美综合在线观看| 国产a级视频| a视频在线| 日本一区二区精品| 成人a片视频| 99内射| 色五月婷婷五月天激情| 免费十无码| 免费在线观看黄色| 在线观看黄片网站| 人人摸人人操人人干| 51妺嘿嘿午夜福利| 国产在线观看97| 国产精品久久久久久精| 午夜在线观看视频18| JlZZJLZZJlZZ亚洲女人17| 日韩情色| 91精品视频在线播放| 日韩aaa视频| 91丨九色丨国产在线| 欧美1区| 欧美色图狠狠操| 一区二区入口| 国产黄色三级片| 国产高清无码网站| 亚洲无套内射| 国产91在线视频| 久久一级A片| 黄色视频网站国产| 久久丁香五月婷婷五月天激情视频 | 免费无码在线播放| 午夜aaa| 大香蕉一本| 91视频www| 视频一区在线观看| 狠狠狠狠狠狠狠狠狠狠| 成人在线免费网站| 三级片在线看片AV| 日本暖暖视频| 1级毛片| 人操人人人操| 色五月在线观看| 无码高清在线播放| 久综合网| 91视频18|