久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

基于注解的springboot+mybatis的多數據源組件的實現代碼

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

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

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

如下代碼,首先我們配置一個主數據源,通過@Primary注解標識為一個默認數據源,通過配置文件中的spring.datasource作為數據源配置,生成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的數據源,通過注解配置basePackages掃描對應的包,實現特定的包下的mapper接口,使用特定的數據源。

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

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

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

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

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

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

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

public class DBContextHolder { private static final ThreadLocal<String> DB_KEY_CONTEXT = new ThreadLocal<>(); //在app啟動時就加載全部數據源,不需要考慮并發 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方法中,根據當前mapper接口的@@DBKey注解來選取對應的數據源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);//使用默認數據源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; }}

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

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(); }}

另外,我們在服務啟動,配置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的攔截器,在攔截器中主動調DBContextHolder.clear()方法銷毀這個key。具體代碼就不貼了。這樣一來,我們就完成了一個基于注解的支持多數據源切換的中間件。

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

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;//使用默認數據源String dbKey = DBKey.DEFAULT;//如果緩存中已經有這個mapper方法對應的數據源的key,那直接設置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); }

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

到此這篇關于基于注解的springboot+mybatis的多數據源組件的實現代碼的文章就介紹到這了,更多相關springboot mybatis多數據源組件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 国产伊人一区 | 尹人成人 | 欧美三级影院 | 国产精品免费在线 | 日韩图区 | 久久久久久久一区 | 日本黄a三级三级三级 | 日韩6699人妻熟女毛片 | 国产精品一区二区三区在线播放 | 九一视频在线免费观看 | av片在线观看 | 欧美日一区二区 | 免费国产黄网站在线观看视频 | 无码日韩精品一区二区免费 | 日本激情视频一区二区三区 | 韩日视频在线观看 | 成人黄色片网站 | 久久国内免费视频 | 日韩欧美国产精品综合嫩v 亚洲欧美日韩在线 | 免费h在线观看 | 亚洲精品久久久久久久久久久 | 91久久国产综合久久91精品网站 | 久草久草久 | 99精品网| www.毛片 | 九九av | www.se天堂| 成年人视频免费在线看 | caoporn免费在线视频 | 国产欧美精品一区二区色综合朱莉 | www.男人天堂 | 欧美一区2区三区4区公司二百 | 日韩视频欧美视频 | 国产一级特黄aaa大片 | 欧美成人高清 | 午夜视频免费 | 午夜成人免费电影 | 国产大片久久久 | 天堂精品久久 | 天堂色网 | 日韩在线观看第一页 | 欧美国产日韩在线 | 蜜臀视频在线观看 | 国产深夜视频在线观看 | 日韩中文字幕一区 | av一区二区三区四区 | 99在线精品视频 | 五月婷婷激情 | 黄色一级网站视频 | 午夜影院在线观看 | 激情开心成人网 | 国产免费av在线 | 99re6热在线精品视频播放 | 久久精品 | 精品一区二区三区免费看 | 2019亚洲日韩新视频 | 美女午夜影院 | 少妇久久久| 免费在线观看成年人视频 | 亚洲欧美一区二区三区在线 | 日韩精品一区二区三区在线播放 | 91视频网址| 精品国产91乱码一区二区三区 | 欧美一区二区三区黄 | 欧美日韩亚洲在线 | 人人爽视频 | 日韩欧美网址 | 欧美亚洲视频 | 2019天天操 | 综合国产| 国产精品com | 欧美高清一区 | 亚洲欧美激情精品一区二区 | 欧美久久久久久久久久久久久久 | 欧美亚洲综合久久 | 国产精品成人网 | 亚洲天堂久久 | 天堂免费在线观看视频 | 久久久精品 | 成人免费黄色小视频 | 2018天天操夜夜操 | 日本激情视频在线播放 | 日本黄色激情片 | 在线观看精品视频网站 | 久久精精品 | 亚洲精品wwww | 欧美色综合 | 一区二区精品 | 中国电影黄色一级片免费观看 | 国产精品欧美久久久久一区二区 | 亚洲午夜精品a | 国产一区精品视频 | 成人精品一区二区三区 | 久久久久久国产精品mv | 日韩av免费在线观看 | www婷婷| 久久久av一区 | 五月婷婷导航 | 亚洲福利在线播放 | 成人av观看 | 日韩欧美第一页 | 国产精品www | 日韩中文字幕av | 91麻豆精品国产91久久久更新资源速度超快 | 国产成人久久 | 九九热这里只有精 | 亚洲精品国产9999久久久久 | 婷婷五月色综合 | 伊人久久精品久久亚洲一区 | 精品美女在线 | 国产一区二区免费 | 欧美精品国产精品 | 久久免费国产 | 欧美日韩91 | 日韩国产一区 | 嫩草影院永久入口 | 中文字国产精久久无 | 国产三级在线观看 | 夜夜爽99久久国产综合精品女不卡 | 精品一区二区三区在线视频 | 精品久久久久久久久久久院品网 | 青娱乐网 | 中文字幕日韩一区 | 一级网站在线观看 | 日本成人片网站 | 国产成人精品免费视频 | 爱干在线| 亚洲欧美日韩在线一区 | 久久久精品电影 | 国产成人免费视频网站高清观看视频 | 日韩一区二区影视 | 日韩欧美国产一区二区 | 亚洲精品电影在线观看 | 日本中文字幕电影 | 一区免费在线观看 | 久久精品国产91精品亚洲高清 | 午夜国产一区 | 亚洲精品国品乱码久久久久 | 欧美黄色一区 | 无码一区二区三区视频 | 国偷自产av一区二区三区 | 久久久久久久久久久久久久久久久久久 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 99精品久久久国产一区二区三 | 在线播放国产视频 | 亚洲精品一区二区网址 | 亚洲精品乱码 | 成人永久免费视频 | 久久福利电影 | 久久久久久久中文 | 日韩国产精品视频 | 色悠久久久| 日韩精品1区2区 | 国产乱码一区二区三区在线观看 | 禁果av一区二区三区 | 日本三级电影免费 | 97国产在线视频 | 精品久久国产老人久久综合 | 91精品国产一区二区三区四区在线 | 久热免费在线 | 韩国av一区二区 | 欧美黑人一级毛片 | 香港黄色录像片 | 成人在线观看免费 | 亚洲黄色一区二区三区 | 亚洲综合大片69999 | 国产一区二区三区在线 | 日本一区二区三区免费观看 | 日韩和的一区二区 | 欧美日本三级 | 国产精品欧美日韩 | 日韩一区二 | 免费一级黄色电影 | 精品96久久久久久中文字幕无 | 亚洲精品一区二三区不卡 | 国内精品一区二区 | 黑人巨大精品欧美黑白配亚洲 | 在线中文视频 | 综合色综合 | 日日干夜夜干 | 97爱爱爱 | 亚洲高清视频一区二区 | 精品亚洲网 | 久久艹久久 | 国产成人一区二区三区 | 成人看的免费视频 | 亚洲伊人精品酒店 | 国产精品高潮呻吟av久久4虎 | 免费一级欧美在线观看视频 | 亚洲精品国产9999久久久久 | 人人澡人人射 | 激情欧美一区二区三区中文字幕 | 国产h视频在线观看 | 日韩成人免费电影 | 精品久久99 | 日日爽天天操 | 久久久久久九九九九九九 | 色综合久久久久久久久久久 | 91免费国产 | 亚洲在线一区二区 | 成人国产电影 | 日韩福利| 美女久久久久 | 国产性网 | 色噜噜在线 | 欧美成人一区二区三区片免费 | 日韩欧美在线观看 | 天天噜天天干 | 久久久tv | 亚洲成人动漫在线观看 | 亚洲每日更新 | 久久精品免费观看 | 国产一级特黄aaa大片 | 欧美在线观看视频 | 欧美精品1区2区 | 亚洲在线一区二区 | 91在线免费观看 | 色综合天天综合网国产成人网 | 亚洲视频一区 | 91精品国产高清久久久久久久久 | 日韩高清一区 | 岛国精品 | 国产成人在线视频 | 午夜精品久久久久久久久 | 日韩三级黄 | 国产aaaaav久久久一区二区 | av免费网站 | 日韩一区三区 | 国产精品久久久久久久久 | 中文字幕日韩欧美一区二区三区 | 很黄很色很爽的视频 | 超碰在线人人 | 国产欧美精品 | 久久成人免费视频 | 亚洲精品免费视频 | 欧美a区| www.麻豆视频 | 久久精品无码一区二区日韩av | 亚洲欧美在线播放 | 亚洲精品一区二区三区 | 国产人久久人人人人爽 | 欧美日韩国产在线播放 | 色婷婷国产精品综合在线观看 | 欧美日韩精品一区二区三区四区 | 亚洲在线播放 | 国产二区三区 | 亚洲精品中文字幕乱码无线 | 亚洲九九 | 999国产在线视频 | 久久69精品久久久久久久电影好 | 99这里只有精品视频 | 一二三区在线 | 久久久av| 国产精品成人3p一区二区三区 | 在线欧美成人 | 性人久久精品 | 18久久久久久 | 国产精品久久久久久久久久久久久久 | 中文字幕日韩欧美一区二区三区 | 看毛片网站 | 999国产一区二区三区四区 | 亚洲乱码一区二区三区在线观看 | 久久久欧美 | 在线观看日韩精品 | 国产婷婷色一区二区三区 | 国产中文字幕在线观看 | 亚洲欧洲日本国产 | 99爱爱视频| 亚洲成人高清 | 天天操天天插 | 亚洲成人中文字幕 | 国产精品久久久久久久午夜片 | 一级黄色av片 | 91成人免费看片 | 欧美成年网站 | 91在线精品一区二区 | 亚洲午夜精品一区二区三区 | 免费毛片视频 | 欧美第一页| 久久人人爽人人爽人人片av不 | 色综合国产 | 在线亚洲不卡 | 成人性视频在线 | 色欧美片视频在线观看 | 欧美一区亚洲二区 | 国产精品毛片一区二区在线看 | 免费毛片网站 | 亚洲精品自拍 | 成人欧美 | 精品国产一区二区三区久久久蜜月 | 欧美日韩在线免费观看 | 国产激情视频在线观看 | 在线观看你懂的网站 | 成人免费福利视频 | 99视频在线免费观看 | 婷婷在线免费视频 | 久久久蜜桃| 日本亚洲国产一区二区三区 | 国产黄色一级片 | 成人在线观看免费视频 | 视频二区 | the蜜臀av入口 | 国产美女视频一区 | 久久99一区 | 国产精品99一区二区三区 | av色伊人久久综合一区二区 | 日韩在线二区 | 大伊人久久 | 韩国精品免费视频 | 国产一区二区三区在线 | 国产精品福利网站 | 国产大学生情侣呻吟视频 | 97伦理电影院 | 亚洲二区在线 | 久久久天堂 | 亚洲国产精品久久久男人的天堂 | 黄色日批视频 | 亚洲天堂电影网 | 韩国精品一区 | 天天干人人 | 亚洲一级毛片 | 亚洲视频在线看 | 欧美日韩激情 | 亚洲热妇 | 色综合99| 欧美一级日韩 | 日韩成人黄色 | 久操伊人| 精品在线一区二区 | 国产免费一区二区三区 | 成人在线免费小视频 | 欧美日韩国产在线播放 | 天天插天天操 | 国产一区二区三区在线 | 毛片网页| 免费xxxxx在线观看网站软件 | 精品成人在线 | 91在线精品一区二区三区 | 国产免费视频 | 欧美一级视频在线观看 | 国产精品久久久久久久久久久久久久 | 午夜精品网站 | 久久免费电影 | 亚洲一区中文字幕在线观看 | 欧美一区二区三区在线视频观看 | av毛片免费 | 成人性视频在线 | 九九免费在线观看 | 91免费视频在线 | 国产日韩精品视频 | 国产一区二区亚洲 | 91久久久久久久久 | 精品自拍视频 | 日韩一区免费在线观看 | 国产精品久久久久久久久久久久午夜片 | 亚洲精品在线免费播放 | 91精品国产色综合久久 | 蜜桃视频网站在线观看 | 中文字幕在线电影观看 | 一区自拍| 狠狠影院 | 日本中文一区二区 | 91免费在线看 | 天天天天干 | 国产精品三级久久久久久电影 | 羞羞网页 | 国产成人在线视频 | 亚洲欧美日韩在线 | 国产永久免费 | 亚洲精品视频一区 | 草草影院ccyycom | 国产精品一区二区三区四区 | 欧美日韩在线观看一区二区三区 | 一区二区观看 | 久久精品中文 | 久久国产精品免费一区二区三区 | 9久久婷婷国产综合精品性色 | 黄色影视网址 | 欧美日韩综合精品 | 特级淫片日本高清视频免费 | www.欧美.com | 欧美激情五月 | 久久综合伊人 | 亚洲精品永久免费 | 久久亚洲欧美日韩精品专区 | 欧美国产在线观看 | 亚洲精品一区二区三区樱花 | 国产精品久久久久久久久免费 | 成人亚洲一区二区 | 黑人精品xxx一区一二区 | 91精品国产综合久久福利软件 | 中文字幕一区二区三区不卡 | 国产日韩一级片 | 高清xxxx| 亚洲一级黄色 | 欧美精品一区二区三区视频 | 精品在线一区二区 | 成人深夜在线 | 日韩av一区二区三区在线 | 亚洲精品乱码久久久久久蜜桃不卡 | 久久涩 | 国产精品久久国产精麻豆99网站 | 91小视频 | 黄色大片网站在线观看 | 国产视频中文字幕 | jlzzjlzz亚洲日本少妇 | 日韩一区二区观看 | 久久精品国产91精品亚洲高清 | 欧美精品一区二区三区蜜桃视频 | 国产乱a视频在线 | 天天干夜夜爽 | 青青久久 | 亚洲欧洲综合av | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 高清av一区 | 黄色片在线 | 亚洲一区二区三区四区五区午夜 | 久久久久久久久久久免费视频 | 亚洲日本二区 | 综合久久综合 | 亚洲精品一区二区三区 | 国产激情在线视频 | 色www精品视频在线观看 | 亚洲精品乱码8久久久久久日本 | 久久99久久99精品免观看粉嫩 | 老牛影视av一区二区在线观看 | 最新的黄色网址 | 狠狠操网站 | 国产精品欧美一区二区三区不卡 | 激情视频在线观看免费 | 黄色成人影视 | 国产精品久久综合 | 亚洲精品一区二区三区在线播放 | 中文字幕日韩专区 | 精品一区二区三区在线视频 | 中文在线一区 | 一级黄色录像视频 | 久草中文在线 | 99爱在线观看| 在线播放亚洲 | 四虎影院最新地址 | 欧美亚洲另类在线 | 精品亚洲网 | 亚洲国产欧美一区二区三区久久 | 久久精品免费观看视频 | 97视频人人澡人人爽 | av资源中文在线 | 伊人色综合久久久天天蜜桃 | 精品一区二区三区中文字幕 | 国产一区二区三区在线 | av在线一区二区三区 | 欧美一区二区三区 | 国产视频三区 | 久久久精品影院 | 在线视频国产一区 | 国产精品久久久久久一区二区三区 | 久久国产一区二区三区 | 久久99久久久久久 | 国产一级视频免费播放 | 成人精品视频在线观看 | h片免费| 中文字幕日韩在线视频 | 成人免费视频在线观看 | 精品一区二区在线观看 | 久久久99精品免费观看 | 天天夜夜操 | 国产视频一区二区在线观看 | 午夜精| 午夜精品视频在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 99热精品视 | 日日操狠狠操 | 国产超碰人人模人人爽人人添 | 中文av在线播放 | 日韩靠逼 | 亚洲欧洲精品一区二区 | 久久日韩 | 亚洲最大免费视频 | 午夜免费福利电影 | 国产中文字幕在线观看 | 黄色国产| 狠狠撸在线视频 | 久久久久久九九九九九九 | 久久精品中文 | 日韩视频在线一区二区 | 91偷拍精品一区二区三区 | 99热播在线 | 性大毛片视频 | 国产欧美久久久久久 | 西西做爰免费视频 | www.日韩视频| 亚洲午夜精品视频 | 日本黄网站在线观看 | 日日草夜夜草 | 日韩欧美国产成人一区二区 | 久久91| 成人午夜精品一区二区三区 | 久久这里只有精品首页 | 国产成人免费视频 | 国产精品欧美一区二区三区不卡 | www.色在线| 无码少妇一区二区三区 | 亚洲一区二区三区在线免费观看 | 一级黄色毛片子 | 久久精品极品 | 久久精品一区二区三区四区 | 7777av | 日穴视频在线观看 | 亚洲天天干 | 国产精品国产三级国产aⅴ入口 | 中文字幕亚洲欧美 | 伊人啪啪 | 色综合成人 | 久在线 | 玖玖久久 | 国产精品久久一区二区三区 | 国产在线精品一区二区 | 国产综合区 | 久久99一区二区 | 精品成人av | 色综合免费| 成人精品视频在线观看 | 精品无码久久久久久国产 | 亚洲av一级毛片 | 亚洲成人免费在线观看 | 国产艳妇av视国产精选av一区 | 精品一区二区三区免费毛片爱 | 黄色二区 | www.日韩.com| 不卡的免费av | 中文字幕亚洲一区二区三区 | 午夜影院a | 欧美精品99| 99视频只有精品 | 亚洲成人网一区 | 久久久91 | 91精品亚洲 | 国产成人精品亚洲日本在线观看 | 精品1区 | 日韩视频在线一区二区 | 亚洲免费国产视频 | 日本免费在线 | 亚洲欧美国产精品专区久久 | 高清av网站| 国产欧美精品区一区二区三区 | 亚洲色图88 | 国产精品一二三区 | 国产宾馆自拍 | 日韩一区二区三区在线视频 | 国产野精品久久久久久久不卡 | 欧美日韩亚洲视频 | 日本久久久一区二区三区 | 一级黄色片子看看 | 国产精品美女久久久久久久网站 | 狠狠艹视频 | av在线免费网址 | 中文字幕在线永久在线视频 | 永久av| 精品久久久久久亚洲综合网 | av网站在线播放 | 天天舔夜夜操 | 久久国产一区 | 在线精品亚洲欧美日韩国产 | 中文字幕视频二区 | 国产成人精品午夜视频' | 精品亚洲一区二区 | 日韩精品第一页 | 国产99久久精品一区二区永久免费 | 久草视频网 | 国产高清免费 | 亚洲成人免费在线 | 一级在线观看 | 青青久久 | 在线欧美一区 | 欧美一区二区三区视频 | 在线精品国产一区二区三区 | 日韩欧美在线观看视频 | 午夜影院免费 | 男人的天堂久久 | 久久久国产精品视频 | 午夜影视av | 欧美综合久久 | 欧美一级片在线 | 成人做爰69片免费 | 中文av在线免费观看 | 成年网站在线 | 欧美一区二区三区成人 | 亚洲欧洲一区二区 | 中文字幕 国产精品 | 免费v片 | 精品三级在线观看 | 亚洲激情一区二区 | 国产a免费 | 日韩精品一区二区三区在线观看 | 国产精选一区二区三区不卡催乳 | 亚洲午夜精品视频 | 亚洲狠狠久久综合一区77777 | www.五月天婷婷 | 欧美视频在线播放 | 香蕉久久久久久 | 一区二区三区四区在线 | 国产精品中文字幕在线 | 性色av一区二区三区免费看开蚌 | 日韩欧美一区二区三区免费观看 | 午夜免费福利视频 | 狠狠的干 | 国产在线观看一区二区三区 | 九色在线观看 | 日本免费一区二区三区 | 黄色免费视频 | 山岸逢花在线观看 | 国产xvideos免费视频播放 | 亚洲二区在线观看 | 97久久久 | 人人九九 |