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

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

基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實現(xiàn)代碼

瀏覽:114日期:2023-03-17 16:03:08

通常業(yè)務(wù)開發(fā)中,我們會使用到多個數(shù)據(jù)源,比如,部分數(shù)據(jù)存在mysql實例中,部分數(shù)據(jù)是在oracle數(shù)據(jù)庫中,那這時候,項目基于springboot和mybatis,其實只需要配置兩個數(shù)據(jù)源即可,只需要按照

dataSource -SqlSessionFactory - SqlSessionTemplate配置好就可以了。

如下代碼,首先我們配置一個主數(shù)據(jù)源,通過@Primary注解標識為一個默認數(shù)據(jù)源,通過配置文件中的spring.datasource作為數(shù)據(jù)源配置,生成SqlSessionFactoryBean,最終,配置一個SqlSessionTemplate。

@Configuration@MapperScan(basePackages = 'com.xxx.mysql.mapper', sqlSessionFactoryRef = 'primarySqlSessionFactory')public class PrimaryDataSourceConfig { @Bean(name = 'primaryDataSource') @Primary @ConfigurationProperties(prefix = 'spring.datasource') public DataSource druid() {return new DruidDataSource(); } @Bean(name = 'primarySqlSessionFactory') @Primary public SqlSessionFactory primarySqlSessionFactory(@Qualifier('primaryDataSource') DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources('classpath:mapper/*.xml'));bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return bean.getObject(); } @Bean('primarySqlSessionTemplate') @Primary public SqlSessionTemplate primarySqlSessionTemplate(@Qualifier('primarySqlSessionFactory') SqlSessionFactory sessionFactory) {return new SqlSessionTemplate(sessionFactory); }}

然后,按照相同的流程配置一個基于oracle的數(shù)據(jù)源,通過注解配置basePackages掃描對應的包,實現(xiàn)特定的包下的mapper接口,使用特定的數(shù)據(jù)源。

@Configuration@MapperScan(basePackages = 'com.nbclass.oracle.mapper', sqlSessionFactoryRef = 'oracleSqlSessionFactory')public class OracleDataSourceConfig { @Bean(name = 'oracleDataSource') @ConfigurationProperties(prefix = 'spring.secondary') public DataSource oracleDruid(){return new DruidDataSource(); } @Bean(name = 'oracleSqlSessionFactory') public SqlSessionFactory oracleSqlSessionFactory(@Qualifier('oracleDataSource') DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources('classpath:oracle/mapper/*.xml'));return bean.getObject(); } @Bean('oracleSqlSessionTemplate') public SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier('oracleSqlSessionFactory') SqlSessionFactory sessionFactory) {return new SqlSessionTemplate(sessionFactory); }}

這樣,就實現(xiàn)了一個工程下使用多個數(shù)據(jù)源的功能,對于這種實現(xiàn)方式,其實也足夠簡單了,但是如果我們的數(shù)據(jù)庫實例有很多,并且每個實例都主從配置,那這里維護起來難免會導致包名過多,不夠靈活。

現(xiàn)在考慮實現(xiàn)一種對業(yè)務(wù)侵入足夠小,并且能夠在mapper方法粒度上去支持指定數(shù)據(jù)源的方案,那自然而然想到了可以通過注解來實現(xiàn),首先,自定義一個注解@DBKey:

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.TYPE})public @interface DBKey { String DEFAULT = 'default'; // 默認數(shù)據(jù)庫節(jié)點 String value() default DEFAULT;}

思路和上面基于springboot原生的配置的類似,首先定義一個默認的數(shù)據(jù)庫節(jié)點,當mapper接口方法/類沒有指定任何注解的時候,默認走這個節(jié)點,注解支持傳入value參數(shù)表示選擇的數(shù)據(jù)源節(jié)點名稱。至于注解的實現(xiàn)邏輯,可以通過反射來獲取mapper接口方法/類的注解值,然后指定特定的數(shù)據(jù)源。

那在什么時候執(zhí)行這個操作獲取呢?可以考慮使用spring AOP織入mapper層,在切入點執(zhí)行具體mapper方法之前,將對應的數(shù)據(jù)源配置放入threaLocal中,有了這個邏輯,立即動手實現(xiàn):

首先,定義一個db配置的上下文對象。維護所有的數(shù)據(jù)源key實例,以及當前線程使用的數(shù)據(jù)源key:

public class DBContextHolder { private static final ThreadLocal<String> DB_KEY_CONTEXT = new ThreadLocal<>(); //在app啟動時就加載全部數(shù)據(jù)源,不需要考慮并發(fā) private static Set<String> allDBKeys = new HashSet<>(); public static String getDBKey() {return DB_KEY_CONTEXT.get(); } public static void setDBKey(String dbKey) {//key必須在配置中if (containKey(dbKey)) { DB_KEY_CONTEXT.set(dbKey);} else { throw new KeyNotFoundException('datasource[' + dbKey + '] not found!');} } public static void addDBKey(String dbKey) {allDBKeys.add(dbKey); } public static boolean containKey(String dbKey) {return allDBKeys.contains(dbKey); } public static void clear() {DB_KEY_CONTEXT.remove(); }}

然后,定義切點,在切點before方法中,根據(jù)當前mapper接口的@@DBKey注解來選取對應的數(shù)據(jù)源key:

@Aspect@Order(Ordered.LOWEST_PRECEDENCE - 1)public class DSAdvice implements BeforeAdvice { @Pointcut('execution(* com.xxx..*.repository.*.*(..))') public void daoMethod() { } @Before('daoMethod()') public void beforeDao(JoinPoint point) {try { innerBefore(point, false);} catch (Exception e) { logger.error('DefaultDSAdviceException', 'Failed to set database key,please resolve it as soon as possible!', e);} } /** * @param isClass 攔截類還是接口 */ public void innerBefore(JoinPoint point, boolean isClass) {String methodName = point.getSignature().getName();Class<?> clazz = getClass(point, isClass);//使用默認數(shù)據(jù)源String dbKey = DBKey.DEFAULT;Class<?>[] parameterTypes = ((MethodSignature) point.getSignature()).getMethod().getParameterTypes();Method method = null;try { method = clazz.getMethod(methodName, parameterTypes);} catch (NoSuchMethodException e) { throw new RuntimeException('can’t find ' + methodName + ' in ' + clazz.toString());}//方法上存在注解,使用方法定義的datasourceif (method.isAnnotationPresent(DBKey.class)) { DBKey key = method.getAnnotation(DBKey.class); dbKey = key.value();} else { //方法上不存在注解,使用類上定義的注解 clazz = method.getDeclaringClass(); if (clazz.isAnnotationPresent(DBKey.class)) {DBKey key = clazz.getAnnotation(DBKey.class);dbKey = key.value(); }}DBContextHolder.setDBKey(dbKey); } private Class<?> getClass(JoinPoint point, boolean isClass) {Object target = point.getTarget();String methodName = point.getSignature().getName();Class<?> clazz = target.getClass();if (!isClass) { Class<?>[] clazzList = target.getClass().getInterfaces(); if (clazzList == null || clazzList.length == 0) {throw new MutiDBException('找不到mapper class,methodName =' + methodName); } clazz = clazzList[0];}return clazz; }}

既然在執(zhí)行mapper之前,該mapper接口最終使用的數(shù)據(jù)源已經(jīng)被放入threadLocal中,那么,只需要重寫新的路由數(shù)據(jù)源接口邏輯即可:

public class RoutingDatasource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() {String dbKey = DBContextHolder.getDBKey();return dbKey; } @Override public void setTargetDataSources(Map<Object, Object> targetDataSources) {for (Object key : targetDataSources.keySet()) { DBContextHolder.addDBKey(String.valueOf(key));}super.setTargetDataSources(targetDataSources);super.afterPropertiesSet(); }}

另外,我們在服務(wù)啟動,配置mybatis的時候,將所有的db配置加載:

@Bean @ConditionalOnMissingBean(DataSource.class) @Autowired public DataSource dataSource(MybatisProperties mybatisProperties) {Map<Object, Object> dsMap = new HashMap<>(mybatisProperties.getNodes().size());for (String nodeName : mybatisProperties.getNodes().keySet()) { dsMap.put(nodeName, buildDataSource(nodeName, mybatisProperties)); DBContextHolder.addDBKey(nodeName);}RoutingDatasource dataSource = new RoutingDatasource();dataSource.setTargetDataSources(dsMap);if (null == dsMap.get(DBKey.DEFAULT)) { throw new RuntimeException( String.format('Default DataSource [%s] not exists', DBKey.DEFAULT));}dataSource.setDefaultTargetDataSource(dsMap.get(DBKey.DEFAULT));return dataSource; }@ConfigurationProperties(prefix = 'mybatis')@Datapublic class MybatisProperties { private Map<String, String> params; private Map<String, Object> nodes; /** * mapper文件路徑:多個location以,分隔 */ private String mapperLocations = 'classpath*:com/iqiyi/xiu/**/mapper/*.xml'; /** * Mapper類所在的base package */ private String basePackage = 'com.iqiyi.xiu.**.repository'; /** * mybatis配置文件路徑 */ private String configLocation = 'classpath:mybatis-config.xml';}

那threadLocal中的key什么時候進行銷毀呢,其實可以自定義一個基于mybatis的攔截器,在攔截器中主動調(diào)DBContextHolder.clear()方法銷毀這個key。具體代碼就不貼了。這樣一來,我們就完成了一個基于注解的支持多數(shù)據(jù)源切換的中間件。

那有沒有可以優(yōu)化的點呢?其實,可以發(fā)現(xiàn),在獲取mapper接口/所在類的注解的時候,使用了反射來獲取的,那我們知道一般反射調(diào)用是比較耗性能的,所以可以考慮在這里加個本地緩存來優(yōu)化下性能:

private final static Map<String, String> METHOD_CACHE = new ConcurrentHashMap<>();//....public void innerBefore(JoinPoint point, boolean isClass) {String methodName = point.getSignature().getName();Class<?> clazz = getClass(point, isClass);//key為類名+方法名String keyString = clazz.toString() + methodName;//使用默認數(shù)據(jù)源String dbKey = DBKey.DEFAULT;//如果緩存中已經(jīng)有這個mapper方法對應的數(shù)據(jù)源的key,那直接設(shè)置if (METHOD_CACHE.containsKey(keyString)) { dbKey = METHOD_CACHE.get(keyString);} else { Class<?>[] parameterTypes = ((MethodSignature) point.getSignature()).getMethod().getParameterTypes(); Method method = null; try {method = clazz.getMethod(methodName, parameterTypes); } catch (NoSuchMethodException e) {throw new RuntimeException('can’t find ' + methodName + ' in ' + clazz.toString()); } //方法上存在注解,使用方法定義的datasource if (method.isAnnotationPresent(DBKey.class)) {DBKey key = method.getAnnotation(DBKey.class);dbKey = key.value(); } else {clazz = method.getDeclaringClass();//使用類上定義的注解if (clazz.isAnnotationPresent(DBKey.class)) { DBKey key = clazz.getAnnotation(DBKey.class); dbKey = key.value();} } //先放本地緩存 METHOD_CACHE.put(keyString, dbKey);}DBContextHolder.setDBKey(dbKey); }

這樣一來,只有在第一次調(diào)用這個mapper接口的時候,才會走反射調(diào)用的邏輯去獲取對應的數(shù)據(jù)源,后續(xù),都會走本地緩存,提升了性能。

到此這篇關(guān)于基于注解的springboot+mybatis的多數(shù)據(jù)源組件的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)springboot mybatis多數(shù)據(jù)源組件內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 琪琪电影午夜理论片八戒八戒 | 在线色播 | 亚洲国产成人一区 | 天天影视色香欲综合久久 | 日韩在线你懂的 | 欧美放荡的少妇 | 我们高清中文字幕mv的更新时间 | 色综合天天操 | 免费看a级肉片 | 69国产成人精品二区 | 欧美一级淫片bbb一84 | 日本一区午夜艳熟免费 | 超碰97久久国产精品牛牛 | 亚洲一区中文字幕在线观看 | 黑人精品一区二区三区 | 国语对白嫖老妇videos | 成人免费区一区二区三区 | 一个人在线观看www软件 | 日韩有码专区 | 又黄又爽又色成人免费视频体验区 | 日本a视频 | 性高潮久久久久久 | 久久亚洲国产精品成人av秋霞 | 青青草视频国产 | 78色淫网站女女免费 | 午夜tv| 青青草国产在线观看 | 伊人激情综合 | 欧美成人秋霞久久aa片 | 中国亚州女人69内射少妇 | 国产超碰人人模人人爽人人喊 | 亚洲区精品 | 奇米777四色影视在线看 | 81av在线| 男女69视频| 99久热在线精品视频观看 | 五月婷婷操 | 亚洲色图狠狠干 | 超碰精品在线 | 黄色片一区| 欧美性欧美巨大黑白大战 | 潘金莲性xxxxhd | 中国免费毛片 | 久久人人爽人人爽人人av东京热 | 国产95在线 | 欧美 | 国产成人剧情av麻豆果冻 | 激情影音 | 日韩精品人妻中文字幕有码 | 免费看黄片毛片 | 国产亚洲精品成人av久久ww | 亚洲综合小说 | 国产男女爽爽爽 | www天堂在线| 日韩毛毛片 | 丰满蕾丝乳罩少妇呻视频 | 久久精品国产乱子伦 | 久久99精品波多结衣一区 | 97色偷偷色噜噜狠狠爱网站 | 欧美性生交xxxxx久久久 | 欧美精品成人一区二区三区四区 | 男女洗澡视频网站 | 少妇视频在线播放 | 无码少妇一区二区三区 | 9色在线 | 我和公激情中文字幕 | 超h高h污肉校园np在线观看 | 一本到在线 | 国产精品亚洲а∨无码播放不卡 | 一级视频免费观看 | 插吧插吧综合网 | 特黄aaaaaaa片免费视频 | 精品香蕉99久久久久网站 | 无码人妻一区二区三区免费视频 | 亚洲国产成人欧美激情 | 免费的又色又爽又黄的片捆绑美女 | 国产精品女人特黄av片 | 欧美三级韩国三级日本三斤 | 麻豆国产97在线 | 欧美 | 91ts人妖另类精品系列 | 成人444kkkk在线观看 | 视色av| 国产乱了真实在线观看 | 欧美黄色特级视频 | 亚久久| 日韩av一区二区三区在线 | 一级特黄bbb大片免费看 | 无套中出丰满人妻无码 | 国产又爽又大又黄a片 | 九九九九免费视频 | 日本少妇做爰大尺裸体视频 | 国产免费破外女真实出血视频 | 成人免费在线观看网站 | 强奷乱码中文字幕 | 殴美一级片 | 国产精品久久久久久久一区二区 | 在线精品一区 | 2222eeee成人天堂 | 久久久久久久久久久久久大色天下 | 日本三级免费片 | 午夜性刺激免费看视频 | 九色国产精品 | 天天干天天色天天 | 亚洲精品一区二区不卡 | 久久毛片一区二区三区 | 中文字幕亚洲欧美日韩在线不卡 | 一道本在线 | 国产精品日韩av | 国产热99| 91成人免费在线视频 | aa视频免费在线观看 | 又紧又大又爽精品一区二区 | 不卡一二三| 国产天堂网 | 青青草成人影视 | 日韩精品卡通动漫网站 | 国产九九热视频 | 少妇无码av无码专区在线观看 | 少妇日韩| av免费在线观 | 婷婷久久国产对白刺激五月99 | 在线看网站 | 中文字幕一二区 | 全部免费的毛片在线播放 | 免费人成又黄又爽的视频 | 大白屁股一区二区视频 | 九九热在线观看视频 | 亚洲另类一二三区 | 欧美色精品在线 | 成人免费性视频 | 少妇性bbb搡bbb爽爽爽 | 国产精品18久久久久白浆软件 | 懂色av一二三三区免费 | 色精品| 久久躁狠狠躁夜夜av | 国产视频99| 丰满少妇高潮惨叫久久久久 | 丁香伊人网| 日本午夜在线 | 色噜噜日韩精品欧美一区二区 | 国产精品2020 | 精品无人国产偷自产在线 | 天天艹天天 | 日韩va在线 | 国产91对白在线播 | 无套内谢88av免费看 | 久久精品人人做人人综合 | av在线不卡播放 | 欧美黄色www | 欧美视频在线观看一区二区三区 | 无码人妻av免费一区二区三区 | 国产又色又爽又刺激在线播放 | 久久成人国产精品入口 | 天天综合色 | 亚洲黄色小视频在线观看 | aav在线| 女人精69xxxⅹxx视频 | 操操综合网 | 熟女毛毛多熟妇人妻aⅴ在线毛片 | 日本黄色美女视频 | 国产乱妇乱子视频在播放 | 午夜精品一区二区三区在线 | 超碰狠狠操 | 婷婷五月情 | 色偷偷偷久久伊人大杳蕉 | 日本a级片免费 | 午夜国产一级片 | 久久久91精品国产一区二区三区 | 欧美三级在线看 | 国产精品成人在线 | 亚洲精品一区二区久 | av+在线播放在线播放 | 性做久久久久久免费观看欧美 | 拔插拔插海外华人免费视频 | 狠狠色噜噜狠狠狠狠奇米777 | 免费观看污 | 精品久久久久久久久久国产潘金莲 | 亚洲免费影视 | 亚洲成人一区二区 | 国产综合av| 激情视频激情小说 | 日韩女人性猛交 | 中文字幕亚洲区 | 免费看片成人 | 国产av一区二区三区日韩 | 在线黄色av网站 | 亚洲好骚综合 | 国产 欧美 在线 | 国产xxx| 亚洲男人在线 | 成人午夜av | 再深点灬舒服灬太大的91优势 | 亚洲久久一区 | 欧美日韩国产黄色 | 欧美日韩六区 | 少妇高潮一区二区三区99小说 | 天天干天天色天天射 | 日本一区免费视频 | 国产一区二区日本 | 国产欧美日 | 波多野结衣在线视频网站 | 亚洲综合无码一区二区 | 久草女人| 国产精品丝袜美腿一区二区三区 | 免费看美女隐私网站 | 中文字幕日韩二区一区田优 | av成人免费观看 | 91网站在线播放 | 少妇人妻一级a毛片 | 欧美精品一级片 | 少妇一级淫片bbb | 久久久99精品 | 操操操综合网 | 91看片淫黄大片在线天堂最新 | 亚洲国产精品色拍网站 | 亚洲色图国产精品 | 草草夜色精品国产噜噜竹菊 | 丝袜福利视频 | 成人免费视频一区二区 | 天天射视频 | 亚洲精品久久久久999中文字幕 | 国产视频在线一区二区 | 7777日本精品一区二区三区 | 色偷偷色偷偷色偷偷在线视频 | 一区二区免费看 | 中文精品一区 | 成人国产精品入口免费视频 | 男人边吃奶边做好爽免费视频 | 无码国产精成人午夜视频一区二区 | 欧美一区二区三区免费 | 日韩女优在线观看 | 亚洲精品国产精品乱码不卡√香蕉 | 嫩草一区二区三区 | 女仆乖h调教跪趴1v1 | 婷婷久久综合网 | 国产黄色www | 日本毛片在线看 | 大杳蕉狼人伊人 | 免费a级毛片在线看 | 久久久免费精品re6 在线精品无码字幕无码av | 久久久久琪琪去精品色无码 | 91亚洲精品视频 | 欧美日韩中文字幕在线视频 | 四虎一区二区三区 | 国产午夜精品久久精品电影 | 国产精品无码电影在线观看 | 亚洲精品av天天看1080p | 在线播放亚洲精品 | www日本三级| 午夜精品极品粉嫩国产尤物 | 极品无码av国模在线观看 | 日本免费无人高清 | 清草视频 | 亚洲天堂v | 我和岳m愉情xxxx国产91 | 国产51页| se94se欧美| 男女视频久久 | 日本色www | 日本黄色免费网址 | 特黄一区| 91青青青 | 成 人 黄 色 片 在线播放 | 黑白配高清在线观看免费版中文 | 夜夜躁狠狠躁日日躁2021日韩 | av免费在线观看网址 | 亚洲色图校园春色 | 精品亚洲欧美无人区乱码 | 激情综合网五月婷婷 | 亚洲视频免费观看 | 啄木乌法国一区二区三区 | 久久综合激激的五月天 | 国产情侣激情自拍 | av老司机在线播放 | 白人と日本人の交わりビデオ | 麻豆传媒一区二区三区 | 香蕉视频在线免费播放 | 日韩av免费在线观看 | 青娱乐国产精品 | 青青操在线观看 | 日韩免费在线观看 | 五月婷婷之综合缴情 | 亚洲国产中文字幕在线视频综合 | 好紧好爽午夜视频 | 先锋影音av最新资源 | 国产播放隔着超薄丝袜进入 | 少妇午夜三级伦理影院播放器 | 91社区在线播放 | 天天干狠狠操 | 国产猛烈高潮尖叫视频免费 | 美女大黄网站 | 欧美日韩久久久精品a片 | 婷婷干| 女人被男人躁得好爽免费视频 | 播放灌醉水嫩大学生国内精品 | 国产日韩在线观看视频 | 成人午夜av在线 | 国产美女爆我菊免费观看88av | 81国产精品久久久久久久久久 | 天海翼一区二区三区 | 玖玖爱免费视频 | 欧美五月 | 91在线丨porny丨国产 | 韩国三级中文字幕hd浴缸戏 | 啪啪资源| 国产女主播喷出白浆视频 | 免费观看视频一区二区 | 99视频在线观看视频 | 亚州欧美日韩 | 嫩草福利视频 | 久久精品色欧美aⅴ一区二区 | 手机av在线播放 | 18禁在线永久免费观看 | 精品久久久久久 | 国产91对白在线观看九色 | 久久精品99国产精品酒店日本 | 国产爆初菊在线观看免费视频网站 | 一区二区三区日本久久九 | 四虎成人精品国产永久免费无码 | 超碰人人干 | 老熟妇毛片 | 999亚洲欲妇 | 亚洲v欧美v国产v在线观看 | 日韩九九九 | 99re6在线视频精品免费 | 在线观看av免费 | 欧美日本另类 | 久久久性色精品国产免费观看 | 成人午夜免费网站 | 无码免费一区二区三区免费播放 | jiizzyou欧美2| 国产99久久久国产精品成人免费 | 成人做爰999| 久久久久国产一区二区三区四区 | 在线成人亚洲 | 国产中文在线观看 | 成人福利视频在线 | 色诱久久久久综合网ywww | 偷窥自拍欧美色图 | caoporen在线| 亚洲精久久 | 一级做a爰片久久毛片a | 精品久久久久久久中文字幕 | 好大好湿好硬顶到了好爽视频 | 午夜激情视频网 | wwwxxx麻豆| 欧美激情肉欲高潮视频 | 老妇肥熟凸凹丰满刺激 | 麻豆av在线播放张芸熙 | 亚洲男人的天堂在线观看 | 午夜影院欧美 | 欧美日韩在线高清 | 91中文字幕 | 久久99国产综合精品免费 | 激情另类视频 | 久久机热这里只有精品 | 久久丁香网 | 色婷婷88av视频一二三区 | 国产精品久久呻吟 | 6080yy精品一区二区三区 | 亚洲人性xxⅹ猛交 | 蜜桃成人在线 | 亚洲黄色在线视频 | 亚洲一卡二卡在线 | 欧美大黑bbbbbbbbb在线 | 日韩三级中文字幕 | 精品人妻av区 | 国产成人精品无码一区二区 | 午夜小视频在线 | 国产成人在线看 | 成人免费视频国产 | 极品人妻videosss人妻 | www久久久久久久久 www久久久久久久久久 | 日韩毛片在线视频x | 中文字幕+乱码+中文乱码www | 七月婷婷综合 | 亚洲午夜精品一区二区 | 午夜久久久久久 | 97在线超碰 | jizzxxxx18高清喷水 | 少妇啪啪高潮全身舒爽 | 蜜桃91丨九色丨蝌蚪91桃色 | 色婷婷www | 98国产精品午夜免费福利视频 | 6080av| 可以直接看av的网址 | 成人一级大片 | 最近2019中文字幕大全第二页 | 欧美天堂一区二区三区 | 中文字字幕人妻中文 | 国产一区二区三区乱码 | 狠狠精品干练久久久无码中文字幕 | 你懂的网址国产,欧美 | 欧美三级一级 | 超碰国产在线观看 | 四季av综合网站 | 欧美一区二区三区在线视频观看 | 98婷婷狠狠成人免费视频 | 五月色吧 | 狠狠色噜噜狠狠狠狠2018 | 亚洲视频导航 | 免费中文字幕在线观看 | 视频一区二区三区四区五区 | 日韩欧美一卡二卡 | 久久亚洲精品成人无码网站 | 青青草91视频 | 欧美精品色婷婷五月综合 | 91丨九色丨露脸 | 免费观看在线视频www | 男人天堂av在线播放 | 久久久精品视频在线观看 | 粉嫩av一区二区三区在线播放 | 日韩久久久久 | 日韩大尺度视频 | 性生交大片免费视频网站 | 日本黑人一区二区免费视频 | 国产精品三级视频 | 亚洲精品乱码久久久久久金桔影视 | 高清精品一区二区三区 | 又大又粗又爽的少妇免费视频 | 97在线观看视频 | 亚洲综合在线视频 | 天天舔日日操 | 一区两区小视频 | 五月丁香综合缴情六月小说 | 成人首页 | 中文字幕无线码免费人妻 | 成人片片 | 激情无码人妻又粗又大 | 久久精品亚洲日本波多野结衣 | 国产精品久久777777换脸 | 国产极品久久久 | 国产色中色 | 久久久久久久久91 | 国内精品视频一区二区三区 | 亚洲精品白浆 | 久久视频国产 | 一本大道香一蕉久 | 久久久77| 国产精品久久99综合免费观看尤物 | 国产无遮挡又黄又爽又色 | 巴西少妇xxb大毛又多 | 欧美巨乳在线观看 | 91大神网址 | 国内国内在线自偷第68页 | 国产高清网站 | 小黄鸭精品密入口导航 | 亚洲xxxx天美| 亚洲精品乱码久久久久久动图 | 99精品国自产在线 | 麻豆影院免费夜夜爽日日澡 | 夜夜高潮夜夜爽夜夜爱爱 | 91丝袜国产在线播放 | 国产一区第一页 | 日本黄色小片 | 先锋影音一区二区 | xxxx国产片| 黄av在线免费观看 | 在线成人福利 | 俺也来俺也去俺也射 | 男女啪啪120秒 | 久久一级视频 | 日本a级片在线播放 | 亚洲日本综合 | 国产激情久久久久久熟女老人av | 中文日产日产乱码乱偷在线 | 精品一区二区三区免费视频 | 自拍偷拍20p | 欧美一级大黄大黄大色毛片小说 | 国产亚洲精品久久久久动 | 国产精品综合视频 | 亚洲熟妇av一区二区三区宅男 | 亚洲爆乳无码专区www | 男人的天堂在线视频 | 欧美毛片在线 | 亚洲小说专区 | 中国久久 | 四虎成人精品永久免费av | 苍井空张开腿实干12次 | 欧美成人午夜免费视在线看片 | 粉嫩av一区二区三区四区在线观看 | 日韩作爱 | 国产免费极品av吧在线观看 | 8mav在线| 成人孕妇专区做爰高潮 | 亚洲精品国产精品乱码不卡√香蕉 | 国产福利视频一区 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产在线啪| 乱精品一区字幕二区 | 国产女人高潮抽搐喷水免费视频 | 欧美性猛交xxxx黑人猛交 | 少妇做爰免费视频播放 | 91精品国产91久久久久游泳池 | 欧美色图11p | 综合天堂av久久久久久久 | 2023亚洲精品国偷拍自产在线 | 成人本色视频在线观看 | 日韩免费一区二区三区 | 日本在线视频www鲁啊鲁 | 寡妇高潮一级片 | 久久久久国产一区二区 | 欧美双性人妖o0 | 欧美日韩观看 | 欧美做爰性生交视频 | 尤物97国产精品久久精品国产 | 国产精品一卡二卡三卡 | 一本一道精品欧美中文字幕 | 久久69精品久久久久久国产越南 | 综合视频一区 | 色七七在线| 国产精品免费看久久久无码 | 国产黑色丝袜呻吟在线91 | 5566亚洲精华国产精华精华液 | 五月婷婷色 | 午夜视频网| 久草在线免费福利资源 | 国产成人成网站在线播放青青 | 天天操人人射 | 香蕉视频免费在线看 | 超碰在| 久久久久久久人妻无码中文字幕爆 | 国产片久久久 | 91久久精品美女高潮 | 国产成人精品综合在线观看 | 国产成a人亚洲精v品无码性色 | 久久艹精品 | 新婚少妇在线观看一区 | 欧美顶级少妇作爱 | 欧美另类z0zx974 | 日本aaaa大片免费观看入口 | 另类专区欧美 | www.一区二区.com | 福利社av| 中国丰满老妇xxxxx交性 | 国产真人做爰视频免费 | 7799精品视频 | 哺乳一区二区三区中文视频 | 成人国产精品视频国产 | 国产又粗又长又硬免费视频 | 日韩有码中文字幕在线观看 | 亚洲视频国产视频 | 国产性网| 伊人久久大香线蕉综合网站 | 精品午夜视频 | 免费av毛片| 国产亚洲二区 | 亚洲欧洲天堂 | 欧美极品jiizzhd欧美爆 | 成人久久久久久久 | 性一交一乱一区二区洋洋av | 操操网站 | 青草青草久热精品视频在线观看 | 国产伦精品| 日韩黄色影片 | 国产福利精品一区二区 | 久久久精品欧美一区二区免费 | 久久精品中文字幕 | 日本免费一区二区三区中文字幕 | 午夜婷婷久久 | 爱插网 | 亚洲一区小说 | 久久精品一日日躁夜夜躁 | 日韩欧美精品一区二区 | 少妇无码一区二区二三区 | 人人超人人超碰超国产97超碰 | 色丁香av| 91精品久久久久久久久青青 | 北条麻妃一区二区免费播放 | 国产制服丝袜一区 | 男女搞黄网站 | 成年人看的黄色 | 亚洲va成无码人在线观看天堂 | 欧美精品啪啪 | 日本韩国一级淫片a免费 | 日日橹狠狠爱欧美二区免费 | 久久av高潮av无码av喷吹 | 欧美日韩国产伦理 | 国产亚洲99天堂一区 | 天天免费视频 | 明星乱淫免费视频欧美 | 欧美精品久久久久久久久大尺度 | 日b免费视频 | 激情久久一区二区三区 | 国产成人av一区二区在线观看 | av大帝在线观看 | 亚洲一级在线观看 | av成人在线免费观看 | 四虎成人精品 | 操操操网站 | 国产精品丝袜美腿一区二区三区 | av成人免费在线观看 | 国产精品一区二区三区四区在线观看 | 成人影视免费观看 | a级毛片在线免费 | 97夜夜澡人人波多野结衣 | 乱色精品无码一区二区国产盗 | 最全aⅴ番号库网 | 99精品久久99久久久久 | 国产精品久久久久久久龚玥菲 | 午夜免费福利在线观看 | 亚洲人午夜色婷婷 | 欧美精品色 | 欧美成a人片在线观看久 | 国产无套精品一区二区 | 在线观看免费黄网站 | 成人国产精品入麻豆 | 福利视频午夜 | 成人片黄网站a毛片免费 | 国产youjizz | 国产无套精品一区二区 | 日本视频高清一区二区三区 | 久久久精品久久久久 | 91av一区| 欧日韩毛片 | 国产精品美乳在线观看 |