黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術(shù)文章
文章詳情頁

Spring AOP如何實(shí)現(xiàn)注解式的Mybatis多數(shù)據(jù)源切換詳解

瀏覽:63日期:2023-08-03 08:46:11

一、為什么要使用多數(shù)據(jù)源切換?

多數(shù)據(jù)源切換是為了滿足什么業(yè)務(wù)場景?正常情況下,一個微服務(wù)或者說一個WEB項(xiàng)目,在使用Mybatis作為數(shù)據(jù)庫鏈接和操作框架的情況下通常只需要構(gòu)建一個系統(tǒng)庫,在該系統(tǒng)庫創(chuàng)建業(yè)務(wù)表來滿足需求,當(dāng)然也有分為測試庫和正式庫dev/prod,不過這倆庫的切換是使用配置文件進(jìn)行切分的,在項(xiàng)目啟動時或者打成maven JAR包指定environment-dev.properties或者environment-prod.properties。

那么當(dāng)程序運(yùn)行過程中,比如一個controller中既需要查詢數(shù)據(jù)庫A,又需要查詢數(shù)據(jù)庫B,而且兩者都希望用entity(Mybatis中用于與表結(jié)構(gòu)保持一直的bean)來接收查詢結(jié)果,即都希望走M(jìn)ybatis的entity-mapper-mapper.xml這么一套框架。這個時候最原始的方法是在代碼中手動鏈接數(shù)據(jù)庫比如:

var conn:Connection = null try { Class.forName('com.mysql.jdbc.Driver') conn = DriverManager.getConnection('url','username','password') val statement = conn.createStatement() val result = statement.executeQuery('select * from **** where **** ') while(result.next()){ } }

本文所采用的是修改dao層context配置文件添加基于Spring事務(wù)和AOP方式的注解式數(shù)據(jù)源切換。最終實(shí)現(xiàn)的效果如下:

@Transactional //該注解表明該Service類開啟Spring事務(wù),事務(wù)的意思是指具有原子性的一個操作集合(本人理解),該事務(wù)做什么事在dao層的配置文件里配置,后面會講。 @Service //表明為Service類,使用Component也行,Spring在啟動時會掃描該類將該類所需要的bean全部構(gòu)建出來以供使用 @TargetDataSource(name = 'dataSource1') //重點(diǎn),自定義的AOP注解,指定該TestService1類下的所有public方法都使用數(shù)據(jù)源dataSource1 class TestService1{ public void queryAllUser(){ UserMapper userMapper = new UserMapper() userMapper.queryAllUser(); System.out.println('使用數(shù)據(jù)源dataSource1查詢用戶信息') } } @Transactional @Service @TargetDataSource(name = 'dataSource2') class TestService2{ public void queryAllBook(){ BookMapper bookMapper = new BookMapper() bookMapper.queryAllBook(); System.out.println('使用數(shù)據(jù)源dataSource2查詢書籍信息') } }

在每一個需要切換數(shù)據(jù)源的Service層使用TargetDataSource(name= “***”)即可指定當(dāng)前線程的數(shù)據(jù)源,當(dāng)然別忘記@Transactional事務(wù)的添加,該事務(wù)用于Mybatis查詢數(shù)據(jù)時去獲取當(dāng)前線程的數(shù)據(jù)源為哪一個。如此在controller中正常調(diào)用Service中的方法就行了,如果需要查詢兩個數(shù)據(jù)庫那么分別調(diào)用兩個TestService中的方法即可。比如:

//本人目前使用scala語言作為開發(fā)語言,Java沒怎么寫了,還是習(xí)慣Scala,以下程序還是使用Scala語言規(guī)范哈 class testController{ @AutoWired TestService1 testService1; @AutoWired TestService2 testService2; @RequestMapping(value = Array('/test'), produces = Array('application/json;charset=UTF-8'), method = Array(RequestMethod.GET)) def test(): Unit = { val allUser = testService1.queryAllUser() println('使用TestService1查詢數(shù)據(jù)源1中的所有用戶') val allBook = testService2.queryAllBook('33287') println('使用TestService2查詢數(shù)據(jù)源2中的所有書籍信息') } }

二、如何實(shí)現(xiàn)

接下來就詳細(xì)講述如何在Spring MVC和Mybatis的單套數(shù)據(jù)源支持上擴(kuò)展多數(shù)據(jù)源切換能力。以下為雙數(shù)據(jù)源,三數(shù)據(jù)源的實(shí)現(xiàn)方式相同。

1.首先在配置文件中添加第二個數(shù)據(jù)源的鏈接信息。

environment-dev.properties #數(shù)據(jù)源1的鏈接信息 db1.jdbc.username=xxx db1.jdbc.password=xxxxx db1.jdbc.driverClassName=com.mysql.jdbc.Driver db1.jdbc.url=xxxx?useUnicode=true&characterEncoding=utf8 #新添加的數(shù)據(jù)源2的鏈接信息 db2.jdbc.username=xxx db2.jdbc.password=xxxxx db2.jdbc.driverClassName=com.mysql.jdbc.Driver db2.jdbc.url=xxxx?useUnicode=true&characterEncoding=utf8

2.在dao層的context.xml配置文件中添加基于注解的事務(wù)管理以及AOP切面配置

(1)在配置文件中添加雙數(shù)據(jù)源,如下:

<bean class='com.alibaba.druid.pool.DruidDataSource'> <property name='driverClassName' value='${db1.jdbc.driverClassName}'/> <property name='password' value='${db1.jdbc.password}'/> <property name='username' value='${db1.jdbc.username}'/> <property name='url' value='${db1.jdbc.url}'/> <property name='initialSize' value='5'/> <property name='maxActive' value='10'/> </bean> <bean class='com.alibaba.druid.pool.DruidDataSource'> <property name='driverClassName' value='${db2.jdbc.driverClassName}'/> <property name='password' value='${db2.jdbc.password}'/> <property name='username' value='${db2.jdbc.username}'/> <property name='url' value='${db2.jdbc.url}'/> <property name='initialSize' value='5'/> <property name='maxActive' value='10'/> </bean>

(2)使用AbstractRoutingDataSource實(shí)現(xiàn)動態(tài)數(shù)據(jù)源選擇

配置文件中添加

<bean class='common.dao.mysql.dataSourceManage.DynamicDataSource'> <property name='targetDataSources'> <map key-type='java.lang.String'> <entry key='dataSource1' value-ref='dataSource1' /> <entry key='dataSource2' value-ref='dataSource2' /> </map> </property> <!-- 默認(rèn)使用dataSource1的數(shù)據(jù)源 --> <property name='defaultTargetDataSource' ref='dataSource1' /> </bean>

在dao層創(chuàng)建dataSourceManage包,在包中創(chuàng)建如下類DynamicDataSource,DataSourceHolder。

類一:

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return DataSourceHolder.getDataSoure(); } }

類二:

public class DataSourceHolder { //線程本地環(huán)境 private static final ThreadLocal<String> dataSources = new ThreadLocal<String>(); //設(shè)置數(shù)據(jù)源 public static void setDataSource(String customerType) { dataSources.set(customerType); } //獲取數(shù)據(jù)源 public static String getDataSoure() { return (String) dataSources.get(); } //清除數(shù)據(jù)源 public static void clearDataSource() { dataSources.remove(); } }

Spring boot提供了AbstractRoutingDataSource 根據(jù)用戶定義的規(guī)則選擇當(dāng)前的數(shù)據(jù)源,這樣我們可以在執(zhí)行查詢之前,設(shè)置使用的數(shù)據(jù)源。實(shí)現(xiàn)可動態(tài)路由的數(shù)據(jù)源,在每次數(shù)據(jù)庫查詢操作前執(zhí)行。它的抽象方法 determineCurrentLookupKey() 決定使用哪個數(shù)據(jù)源。以上完成數(shù)據(jù)庫操作之前的數(shù)據(jù)源選擇,使用的是DataSourceHolder.getDataSoure();

(3)添加Spring事務(wù),確定在業(yè)務(wù)代碼中查詢數(shù)據(jù)庫時,由Spring事務(wù)去執(zhí)行以上對數(shù)據(jù)源的選擇,這樣既不影響業(yè)務(wù)代碼又能提供事務(wù)的性質(zhì)保證。

在配置文件中添加

<!-- 定義事務(wù)管理器(聲明式的事務(wù)) --> <bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'> <property name='dataSource' ref='dataSource' /> </bean> <!-- 將所有具有@Transactional注解的Bean自動配置為聲明式事務(wù)支持 --> <tx:annotation-driven transaction-manager='dataSourceTransactionManager' /> <bean class='org.mybatis.spring.SqlSessionFactoryBean'> <property name='dataSource' ref='dataSource'/> <property name='mapperLocations'> <list> <value>classpath:common/dao/mysql/mapper/*Mapper.xml</value> </list> </property> </bean>

注意配置sqlSessionFactory中使用的數(shù)據(jù)源需要和事務(wù)配置中的保持一直。以及配置文件的頂層bean需要添加 xmlns:tx='http://www.springframework.org/schema/tx'和xsi:schemaLocation中添加http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd

(4)配置AOP提供Service層注解式聲明使用的數(shù)據(jù)源

首先在配置文件中添加AOP支持xmlns:aop='http://www.springframework.org/schema/aop',xsi:schemaLocation中添加http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd

<!--配置切面的bean DataSourceExchange 自定義的切面類實(shí)現(xiàn)數(shù)據(jù)源切換--> <bean /> <!--配置AOP --> <aop:config> <!--配置切點(diǎn)表達(dá)式 定義dataSourceExchange中的攔截使用范圍--> <aop:pointcut expression='execution(* common.dao.mysql.service.*.*(..))'/> <aop:advisor advice-ref='dataSourceExchange' pointcut-ref='servicePointcut' order='1' /> </aop:config>

其中execution(* common.dao.mysql.service.*.*(..))為service下的所有類(指TestService1和TestService2)的所有public方法都加上切面代理即使用dataSourceExchange處理。

然后在dataSourceManage包下創(chuàng)建DataSourceExchange類實(shí)現(xiàn)AfterReturningAdvice,MethodBeforeAdvice兩個aop通知

import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; import org.springframework.aop.MethodBeforeAdvice; public class DataSourceExchange implements MethodBeforeAdvice, AfterReturningAdvice { @Override public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable { DataSourceHolder.clearDataSource(); } @Override public void before(Method method, Object[] objects, Object o) throws Throwable { //這里TargetDataSource是自定義注解,method為查詢數(shù)據(jù)庫的方法比如一中的queryAllUser(),Objects為傳給該方法的參數(shù)數(shù)組,o為調(diào)用該方法的對象,比如val allUser =//testService1.queryAllUser()中的testService1 if (method.isAnnotationPresent(TargetDataSource.class)) { TargetDataSource dataSource = method.getAnnotation(TargetDataSource.class); DataSourceHolder.setDataSource(dataSource.name()); } else { if (o.getClass().isAnnotationPresent(TargetDataSource.class)) { TargetDataSource dataSource = o.getClass().getAnnotation(TargetDataSource.class); DataSourceHolder.setDataSource(dataSource.name()); } } } }

然后在dataSourceManage包下創(chuàng)建TargetDataSource注解類

import java.lang.annotation.*; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface TargetDataSource { String name() default 'dataSource1'; }

以上配置完成之后即可達(dá)成一中的最終效果。

完整的dao配置文件內(nèi)容如下

<beans xmlns='http://www.springframework.org/schema/beans' xmlns:context='http://www.springframework.org/schema/context' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:tx='http://www.springframework.org/schema/tx' xmlns:aop='http://www.springframework.org/schema/aop' xsi:schemaLocation='http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd '> <context:annotation-config/> <context:component-scan base-package='com.test.common.dao'/> <bean class='com.alibaba.druid.pool.DruidDataSource'> <property name='driverClassName' value='${db1.jdbc.driverClassName}'/> <property name='password' value='${db1.jdbc.password}'/> <property name='username' value='${db1.jdbc.username}'/> <property name='url' value='${db1.jdbc.url}'/> <property name='initialSize' value='5'/> <property name='maxActive' value='10'/> </bean> <bean class='com.alibaba.druid.pool.DruidDataSource'> <property name='driverClassName' value='${db2.jdbc.driverClassName}'/> <property name='password' value='${db2.jdbc.password}'/> <property name='username' value='${db2.jdbc.username}'/> <property name='url' value='${db2.jdbc.url}'/> <property name='initialSize' value='5'/> <property name='maxActive' value='10'/> </bean> <bean class='test.common.dao.mysql.dataSourceManage.DynamicDataSource'> <property name='targetDataSources'> <map key-type='java.lang.String'> <entry key='dataSource1' value-ref='dataSource1' /> <entry key='dataSource2' value-ref='dataSource2' /> </map> </property> <!-- 默認(rèn)使用dataSource1的數(shù)據(jù)源 --> <property name='defaultTargetDataSource' ref='dataSource1' /> </bean> <bean class='org.springframework.jdbc.datasource.DataSourceTransactionManager'> <property name='dataSource' ref='dataSource' /> </bean> <tx:annotation-driven transaction-manager='dataSourceTransactionManager' /> <bean class='org.mybatis.spring.SqlSessionFactoryBean'> <property name='dataSource' ref='dataSource'/> <property name='mapperLocations'> <list> <value>classpath:test/common/dao/mysql/mapper/*Mapper.xml</value> </list> </property> </bean> <!--配置可以批量執(zhí)行的sqlSession --> <!--配置切面的bean --> <bean /> <!--配置AOP --> <aop:config> <!--配置切點(diǎn)表達(dá)式 --> <aop:pointcut expression='execution(* test.common.dao.mysql.service.*.*(..))'/> <aop:advisor advice-ref='dataSourceExchange' pointcut-ref='servicePointcut' order='1' /> </aop:config> <bean class='org.mybatis.spring.mapper.MapperScannerConfigurer'> <property name='basePackage' value='test.common.dao'/> <property name='sqlSessionFactoryBeanName' value='sqlSessionFactory'/> </bean> </beans>

到此這篇關(guān)于Spring AOP如何實(shí)現(xiàn)注解式的Mybatis多數(shù)據(jù)源切換的文章就介紹到這了,更多相關(guān)Spring AOP注解式的Mybatis多數(shù)據(jù)源切換內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 国产亚洲成av片在线观看 | 国产放荡对白视频一区二区 | 青青草成人在线观看 | 影音先锋在线播放 | 色哟哟—国产精品 | 国产传媒中文字幕 | 又黄又爽又色成人免费视频体验区 | 1515hh毛片大全免费 | 夜夜高潮夜夜爽夜夜爱 | 热久久亚洲 | 国产精品人人爱一区二区白浆 | 狠狠av| 久久天天 | 一区二区三区在线视频播放 | 999午夜| 欧美69式性猛交 | 精品久久久噜噜噜久久久 | 91久久久一线二线三线品牌 | 人人摸人人搞人人透 | 欧美精品v国产精品v日韩精品 | 漂亮人妻被中出中文字幕 | 香蕉视频影院 | 久久精品亚洲中文无东京热 | 成人短视频在线免费观看 | 国产精品高潮呻吟久久av免费动漫 | 欧美日韩在线观看成人 | 久久久久久久性潮 | 日日噜噜噜夜夜爽爽狠狠视频 | 欧美成人性影院 | 国产伦精品一区二区三区四区免费 | 国产极品视觉盛宴 | 日韩v欧美v日本v亚洲v国产v | 中文字幕第三页 | 欧美一级特黄视频 | caoporen在线| 欧美3p两根一起进高清免费视频 | 欧美粗大猛烈 | 日韩91av| 精品99视频| 成人精品视频99在线观看免费 | 国产精品又黄又爽又色无遮挡 | 夜色福利院在线观看免费 | 香港三级日本三级妇三级 | 久久久久人妻精品区一 | 国产成人欧美一区二区三区八 | 欧美性受xxxx黒人xyx性爽 | 伊人亚洲天堂 | 色欲久久久天天天综合网精品 | 色综久久综合桃花网 | 亚洲性无码av在线 | 日本理论中文字幕 | 黑人巨大跨种族video | 午夜黄色大片 | 日本黄色不卡 | 曰韩少妇内射免费播放 | 91丨porny丨成人蝌蚪 | 国产亚洲papapa | 91成人动漫 | 欧美a v在线播放 | 热久久伊人 | 日少妇av | 一区二区三区四区五区在线视频 | 丁香婷婷久久久综合精品国产 | 亚洲免费成人av | 国产精品一卡二卡三卡 | 少妇性i交大片免费看 | 欧美日韩欧美 | 国产最新毛片 | 精品伦一区二区三区免费视频 | 少妇性色av| 欧洲日韩在线 | 亚洲视频六区 | 日韩一级片网站 | 91插插插com 91插插插插插插插插 | 精品欧美小视频在线观看 | 欧美成人精品一区 | 国产一二三区av | 成人黄网站片免费视频 | 九草在线视频 | 精品久久成人 | 亚洲欧美综合精品另类天天更新 | 丁香狠狠色婷婷久久综合 | 亚洲精品视频免费看 | heyzo亚洲| 国产成人无码av一区二区 | 国产一级二级三级视频 | 老太婆性杂交视频 | 国产人妻精品无码av在线 | 久久精品第一页 | 免费国产高清 | 欧美12--15处交性娇小 | 欧美黄色aaa | 91丨porny丨国产丝袜福利 | 91青草视频 | www.91在线视频 | 内射中出日韩无国产剧情 | 中文字幕3| 国产成人久久婷婷精品流白浆 | 国产日韩欧美自拍 | 成人av无码一区二区三区 | 午夜av导航| 久热精品在线观看 | 日日射日日干 | 欧美特级黄色录像 | 成年人拍拍视频 | 亚洲欧美另类久久久精品 | 国产综合有码无码中文字幕 | 麻豆免费观看视频 | 伊人久久免费 | 日本爽爽爽爽爽爽在线观看免 | 国产在线观看你懂的 | 精品国精品国产自在久不卡 | 在线无码免费的毛片视频 | 又白又嫩毛又多15p 国产热の有码热の无码视频 | 熟女丝袜潮喷内裤视频网站 | 蜜桃视频网站 | 男人的天堂无码动漫av | 真人一毛片| www午夜精品| 一区二区三区麻豆 | 99精品一区二区 | 精品国产乱码久久久久久蜜柚 | 欧美一级片观看 | 在线国产91 | 免费一级做a爰片久久毛片潮 | 在线观看免费小视频 | 国产黄色在线网站 | 一区=区三区乱码 | 毛茸茸性xxxx毛茸茸毛茸茸 | 国产精品久久久久久无毒偷食禁果 | 性欧美zoo | 中文人妻av久久人妻18 | 爆乳女仆高潮在线观看 | 黄色大视频 | 国产伦精品一区二区三区四区视频 | 香蕉在线影院 | 别cao我了~好爽~轻一点视频 | 亚洲精品国产成人av在线 | 麻豆av一区二区三区久久 | 国产精品久久久久久久久久久久午衣片 | 中文字幕在线官网 | 好吊色综合| 国产欧美日韩综合精品二区 | 两性午夜免费视频 | 欧美精品色图 | aaa极品在线| 亚洲日夜噜噜 | 美女国内精品自产拍在线播放 | 天天躁日日躁狠狠躁喷水 | 岛国av在线不卡 | 亚洲欧美日韩久久一区二区 | 香蕉视频2020 | 欧美日本日韩 | 国产一卡二卡三卡 | 第一毛片 | 性高潮影院 | 久久综合色网 | 伊人久久五月丁香综合中文亚洲 | 天天综合中文字幕 | 中文字幕精品一区二区精品 | 国产乱人伦av在线无码 | 欧美老熟妇乱大交xxxxx | 黄色网址在线视频 | 国产成人精品一区二三区四区五区 | 亚洲一区二区不卡在线观看 | 日本三级日本三级韩国三级视 | 精品国产乱码久久久久久郑州公司 | 99re在线观看 | 男女插插插视频 | 欧美视频免费看欧美视频 | 69日韩| 国产免费激情视频 | 少妇第一次交换又紧又爽 | 99精品视频国产 | 日韩精品一区中文字幕 | 情一色一乱一欲一区二区 | 乱肉放荡艳妇视频6399 | 日韩一区在线播放 | 熟妇与小伙子matur老熟妇e | 日日av拍夜夜添久久免费 | 国产激情a| 免费又黄又爽1000禁片 | 少妇下面好紧好多水真爽播放 | 欧美午夜特黄aaaaaa片 | 45分钟免费真人视频 | 91啪视频在线观看 | 秋霞影院午夜老牛影院 | 天天狠天天操 | 中文字幕+乱码+中文字幕一区 | 国产精品9x捆绑调教视频 | 亚洲香蕉在线视频 | 人妻 日韩 欧美 综合 制服 | 自拍偷拍亚洲区 | 99国产精品欲a | 亚洲精品另类 | 日本韩国在线播放 | 久久成人av | 免费黄色在线网站 | 人妻熟妇乱又伦精品视频app | wwwxxx日本免费 | 97超碰人人澡 | 精品国产三级a∨在线欧美 一本加勒比hezyo无码专区 | 国产天天操 | 无码国产精品一区二区免费16 | 一本岛高清乱码2020叶美 | 粉嫩无套白浆第一次 | 最近中文字幕免费 | 中文字幕在线亚洲精品 | 六月婷婷激情 | 欧美日本日韩 | 3d动漫精品啪啪一区二区 | 中文字幕+乱码+中文乱码www | 国产精品国产三级国产专区51区 | 欧洲成人综合网 | 摸摸大奶子| 国产精品热久久高潮av袁孑怡 | 毛片毛片毛片毛片毛片 | 久久夜视频 | 天天操夜夜干 | 少妇资源 | 亚洲精品乱码久久久久v最新版 | 再深点灬舒服灬太大了快点91 | 国产精品96久久久 | 免费在线观看成人 | 国产情侣av在线 | 久久精品高清一区二区三区 | 日本成人黄色 | 爱豆国产剧免费观看大全剧集 | 久久久国产精品免费 | 大江大河第3部48集在线观看 | 秋霞在线视频观看 | 波多野成人无码精品电影 | 成人性生生活性生交免费 | 国产成人精品无码免费看 | 色欧美88888久久久久久影院 | 亚洲日韩精品a∨片无码 | 波多野结衣黄色网址 | 欧美国产高清 | 久久久免费观看视频 | 欧美一二三四五区 | 乱码一区二区三区 | 国产人成视频在线观看 | av岬奈奈美一区二区三区 | 婷婷六月综合 | 中国女人裸体乱淫 | 91丨九色丨蝌蚪丨老板 | 欧美、另类亚洲日本一区二区 | 国产在线精品一区二区 | 日韩视频免费在线 | 久久中文一区 | 精品国产一区二区三区久久久蜜月 | 18禁真人抽搐一进一出免费 | 国产一区免费视频 | 国产成年无码久久久久毛片 | 国产在线精品一区二区三区 | 91久久国产视频 | 色资源网站 | 先锋影音中文字幕 | 一个人免费观看的www视频 | av资源在线看 | 亚洲色大成网站www久久九九 | 国产精品亚洲综合一区二区三区 | 亚洲国产成人精品青青草原导航 | 仁科百华av解禁在线播放 | 国产一区二区免费在线 | 亚洲国产成人久久一区二区三区 | 欧美午夜理伦三级在线观看 | 国产亚洲片 | 中国少妇的呻吟xvideos | 国产女人成人精品a区 | 久久97精品久久久久久久不卡 | 国产一线在线观看 | 污污的视频在线免费观看 | 女人一级大片 | 无码午夜人妻一区二区不卡视频 | 国产在线国偷精品产拍免费yy | 免费的黄色片 | 日躁夜躁狠狠躁2001 | 伊人五月综合 | 永久av在线免费观看 | 国产精品9999久久久久 | 国产精品精品视频一区二区三区 | 国产精品亚洲日韩欧美色窝窝色欲 | av在线片| 国产精品毛片久久久久久久明星 | 91在线看视频免费 | 无套中出极品少妇白浆 | 鲁一鲁一鲁一鲁一av | 性的免费视频 | 蜜桃精品噜噜噜成人av | 久久精品入口九色 | 人妻丰满av无码久久不卡 | 草草在线视频 | 国产精品黄色大片 | 国产91天堂素人搭讪系列 | 91最新地址永久入口 | 粉嫩av一区| 日本sm一区二区三区调教 | 日韩欧美性视频 | 丁香五月亚洲综合在线 | 日本aaaa级毛片 | 亚洲伊人久久综合 | 午夜视频色 | 99久久99久久精品免费看蜜桃 | 一本大道久久卡一卡二卡三乱码 | 久久中文字幕伊人小说小说 | 亚洲乱码无码永久不卡在线 | 少妇性饥渴无码a区免费 | 国产三级精品在线观看 | 在线中文字幕一区二区 | 国产甜淫av片免费观看 | 在线 色| 国产精品情侣高潮呻吟 | 欧美在线看 | 催眠淫辱の教室3在线观看 村上凉子在线播放av88 | 欧美性一级 | 91成人短视频免费版 | 免费一级毛毛片 | 国产精品爱久久久久久久 | 二级黄色大片 | 久久久综合网 | 久久午夜电影网 | 日韩性大片| 大狠狠大臿蕉香蕉大视频 | 免费欧美大片 | 欧美精品1区2区3区 欧美精品91爱爱 | 人人干人人舔 | 国产黄a三级三级三级看三级男男 | 亚洲品牌自拍一品区9 | 久久久久无码国产精品不卡 | 69大片视频免费观看视频 | 免费无遮挡无码永久在线观看视频 | 色月阁| 91porny真实丨国产18 | 国产高清一区 | 欧美精品久久久久性色 | 久久亚洲一区二区三区四区五区 | 双性人bbww欧美双性 | 人妻夜夜爽天天爽三区麻豆av网站 | 色婷婷狠| 四虎影视4hu4虎成人 | 欧美精品小视频 | 99热九九这里只有精品10 | 欧美xxxx中国 | 爽爽窝窝午夜精品一区二区 | 成人在线午夜视频 | 美女撒尿毛片视频免费看 | 亚洲日韩av一区二区三区中文 | 国产精品久久久久av | 乱淫a欧美裸体超级xxxⅹ | 国产一级精品绿帽视频 | 亚洲www啪成人一区二区麻豆 | 午夜777| 国产免费一区二区三区免费视频 | 丝袜美腿一区二区三区 | 亚洲国产123 | 成人免费av片 | 四虎国产精品永久在线国在线 | 欧美日韩国产亚洲沙发 | 欧美一区二区三区激情视频 | www日韩avcom| 五月婷婷视频在线观看 | 波多野结衣操 | 日韩欧美一 | 成人在线免费小视频 | 草草浮力地址线路①屁屁影院 | 日韩在线观看不卡 | 国产成年网站 | 亚洲18禁私人影院 | 日韩亚洲国产中文字幕欧美 | 日韩精品一区二区三区中文字幕 | 日韩播放 | 青青青国产在线 | 少妇人妻偷人精品视频 | 免费的毛片视频 | 亚洲色图 在线视频 | 日韩欧美国产成人精品免费 | 欧美大波乳人伦免费视频 | 亚洲婷婷综合网 | 日出水了特别黄的视频 | 午夜精品影院 | 农村真人裸体丰满少妇毛片 | 在线欧美日韩 | 欧美丰满熟妇bbbbbb | 成人综合社区 | 日韩久久精品一区二区三区 | 依人在线 | 成年人在线观看视频网站 | 亚洲啪啪 | 黄色av片三级三级三级免费看 | 瘾攵女强h文1v1| 国产免费自拍 | 国产做a爱免费视频在线观看 | 中文字幕一区视频 | 91网站永久免费看 | 亚洲欧洲日本综合aⅴ在线 国语自产偷拍精品视频偷 午夜无码区在线观看 | 久久久久国色av免费观看性色 | 久久综合综合久久 | 无码国产成人午夜电影在线观看 | 亚洲精品久久久久久久小说 | 国久久久| 欧美性猛交xxxx免费看蜜桃 | 国产中文字幕久久 | 成人做爰高潮片免费视频美国 | 成年网站在线观看 | 91看片淫黄大片一级在线观看 | 人妻少妇久久中文字幕 | 99精品视频免费版的特色功能 | 国内精品第一页 | 97人妻人人揉人人躁人人 | 天天看片中文字幕 | 99在线国产 | 日本特黄特刺激一级猛片 | 色婷婷五月综合亚洲小说 | 欧美福利视频网站 | 少妇一级淫片免费观看 | 国产免费无遮挡吸乳视频 | 国产激情久久久久影院老熟女 | 精品国产91久久久久久久妲己 | 一个人免费在线观看视频 | 日韩欧美日韩 | 国产suv精品一区二区五 | yy111111少妇影院免费观看 | 国产精品久久久久无码人妻 | 国产精品嫩草久久久久 | 熟女俱乐部五十路六十路 | 国产专区一区二区 | 五月天婷婷综合网 | 国产专区国产av | 51国偷自产一区二区三区 | 8090理论片午夜理伦片 | 日本麻豆一区二区三区视频 | 麻豆射区| 国内一区二区三区 | 老妇女性较大毛片 | 欧美精品videos性欧美 | 国产精品美女久久久久av超清 | 色欲av亚洲一区无码少妇 | 人善交video另类hd侏儒 | 东京热无码av一区二区 | 岛国一区二区 | 乱女伦露脸对白在线播放 | 日韩五码| 国产欧美日韩成人 | 国产三级三级看三级 | 中文字幕在线日亚洲9 | 偷看少妇做爰过程裸体 | 国产男女猛烈无遮挡免费视频 | 国产男女无遮挡猛进猛出 | 欧美一级射 | av一本久道久久波多野结衣 | 国产精品麻豆成人av电影艾秋 | 人妻丰满熟妇无码区免费 | 大肉大捧一进一出好爽app | 国产成人午夜精品 | 国产乱人伦精品一区二区三区 | 久久久精品一区 | 国产亚洲欧美日韩俺去了 | 久久婷婷五月综合色精品 | 久成人| mm131美女视频 | 毛片999| 国产精品毛片一区二区三区 | 国产在线视欧美亚综合 | 久久精品亚洲精品国产欧美kt∨ | 亚洲精品国产乱码在线看蜜月 | 亚洲综合网在线 | 国产乱人伦av麻豆网 | 少妇不卡视频 | 日本强好片久久久久久aaa | 亚洲精品国产精品国自产观看 | 欧美少妇b | 999av视频| 香蕉视频在线看 | 亚洲大片免费看 | 国产精品高潮呻吟久久久久久 | 国产精品久久人 | 国产日视频| 精品久久久无码人妻中文字幕 | 97免费超碰 | 欧美大片免费观看网址 | 亚洲综合久久网 | 91久久免费视频 | 国产又粗又猛又爽视频上高潮 | 亚州av片| 在线天堂中文www官网 | 亚洲v欧美v日韩v国产v | 成年人免费视频观看 | 国产在线视频自拍 | 国产刺激的三3p交换视频 | 91丨九色| av中文在线观看 | 国产黄a三级三级三级老年人 | 18性欧美xxxⅹ性满足 | 欧美大片aaaaa免费观看 | 国产性色av免费观看 | 日韩欧美视频二区 | 成人首页| 国产精品无码翘臀在线看 | 亚洲成av人片香蕉片 | 日韩中文字幕不卡 | 麻豆精品一区二区综合av | 亚洲成人精品久久久 | 日本黄色生活片 | 99精品国产成人一区二区 | 在线观看91精品国产网站 | 国产精品久久久久久久一区探花 | 初尝情欲h名器av | 久久夜色撩人精品国产小说 | 国产98在线 | 石榴视频成人在线观看 | 男女无遮挡做爰猛烈视频 | 日韩区在线 | 日日噜噜噜夜夜爽爽狠狠视频97 | 国产国语videosex另类 | av明星换脸无码精品区 | 中文字幕乱码视频32 | 视频丨9l丨白浆 | 国产福利一区二区 | 欧美激情喷水 | 日本内谢少妇xxxxx8老少交 | 天天干,天天爽 | 天堂在线免费观看视频 | 二个男人躁我一个视频 | 神马一区二区三区 | 懂色av噜噜一区二区三区av88 | 色图在线观看 | 国产精品99一区二区三区 | 六月婷婷啪啪 | 啃乳做爰猛烈床戏三级 | 久久国产精品无码网站 | 极品毛片 | 美女隐私免费 | 影音先锋在线资源无码 | 初尝黑人巨砲波多野结衣 | 亚洲精品动漫成人3d无尽在线 | 亚洲欧美精品午睡沙发 | 沈阳45老熟女高潮喷水亮点 | 成人aaa视频| 巨胸美女狂喷奶水www网站 | 可以直接观看的av | 欧美激情在线一区二区 | 自拍啪啪| 久草免费新视频 | 亚洲毛片在线看 | 九色91porny| 四虎影视18库在线影院 | 狠狠躁18三区二区一区ai明星 | 久久美女性网 | 国产不卡一 | 婷婷无套内射影院 | 一本色道久久综合亚洲精品不卡 | 18禁女裸乳扒开免费视频 | 色老头一区二区三区 | 国产亚洲成av人片在线观看桃 | 黄色一级在线视频 | 制服丝袜第一页在线 | 天堂久久久久久久 | 国产精品久久久久久久av福利 | 78m78成人免费网站 | h欧美 | 好吊妞视频这里只有精品 | 久久久午夜精品理论片中文字幕 | 青草精品| 小sao货水好多真紧h无码视频 | 看黄色a级片 | 亚洲日韩精品欧美一区二区 | 亚洲伊人色综合网站小说 | 天天操夜夜操视频 | 午夜精品久久久久久久久 | 久久精品老司机 | 国产精品久久久久一区二区国产 | 国产香蕉在线视频 | 亚洲精品久久久久 | 在线成人免费 | 美女网站免费福利视频 | 亚洲精品久久久久中文第一暮 | 国产911视频| 欧洲精品视频在线观看 | 老太脱裤子让老头玩xxxxx | 人与禽物交videos另类 | av狠狠干| 欧美在线性 | 国产又黄又大又粗的视频 | 亚洲中文字幕无码一区在线 | 国产小视频免费 | 久久婷婷激情 | 亚洲精品小视频 | 亚洲自拍天堂 | av一卡二卡| 91精品久久久久久久久不口人 | 无码av天堂一区二区三区 | 国产精品大尺度 | 九九热免费精品视频 | 日韩中文字幕在线一区二区 | 亚洲va在线∨a天堂va欧美va | 欧美日韩伊人 | 韩国av免费在线 | 亚洲自拍偷拍av | 精产国品一二三产区m553麻豆 | 你懂的网址在线观看 | 国产一区二区网 | 干干操操 | 成人av免费在线看 | av图片在线观看 | 国产98色在线 | 日韩 | 女主和前任各种做高h | 亚洲激情网 | 高清视频一区 | 天天综合网天天综合色 | 国产又黄又猛又粗又爽的视频 | 久久久久久久久久久91 | 欧美特黄一级视频 | 久久久国产精品消防器材 | 狠狠操中文字幕 |