日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis源码分析——MyBatis的扩展点(pugins)

發(fā)布時間:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis源码分析——MyBatis的扩展点(pugins) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、MyBatis擴(kuò)展點(diǎn)plugins

mybatis的擴(kuò)展是通過攔截器Interceptor來實現(xiàn)的,本質(zhì)上就是JDK的動態(tài)代理,所以它只能對接口進(jìn)行攔截,我們一步步看一下MyBatis是如何將這些擴(kuò)展暴露給我們開發(fā)者使用的。

SqlSession的創(chuàng)建過程【重點(diǎn)】
mybatis中的SQL都是通過DefaultSqlSession去執(zhí)行的。

MyBatis 是怎么構(gòu)造 DefaultSqlSession 的?:【重點(diǎn)】
通過查看源碼,得知 MyBatis 是通過 DefaultSqlSessionFactory 來構(gòu)造 DefaultSqlSession 的。
DefaultSqlSessionFactory#openSessionFromDataSource(ExecutorType, TransactionIsolationLevel, boolean)

/** * @param ExecutorType 執(zhí)行器的類型。MyBatis中提供了三種執(zhí)行器:SIMPLE, REUSE, BATCH。默認(rèn)的是 SIMPLE * @param TransactionIsolationLevel 事務(wù)隔離級別 * @param autoCommit 是否自動提交事務(wù) */ private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {Transaction tx = null;try {final Environment environment = configuration.getEnvironment();final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment); // 通過 Environment 獲取事務(wù)工廠 TransactionFactory。沒有指定Environment,則使用 ManagedTransactionFactorytx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit); // 從 TransactionFactory 中獲取一個 Transactionfinal Executor executor = configuration.newExecutor(tx, execType); // 從 Configuration 中獲取一個新的 Executor。(Configuration 對應(yīng)的是 mybatis-config.xml 中的配置)return new DefaultSqlSession(configuration, executor, autoCommit);} catch (Exception e) {closeTransaction(tx); // may have fetched a connection so lets call close()throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e);} finally {ErrorContext.instance().reset();} }

重點(diǎn)看一下 Configuration#newExecutor(Transaction transaction, ExecutorType executorType)

public Executor newExecutor(Transaction transaction, ExecutorType executorType) {executorType = executorType == null ? defaultExecutorType : executorType;executorType = executorType == null ? ExecutorType.SIMPLE : executorType; // 默認(rèn)使用 SimpleExecutorExecutor executor;if (ExecutorType.BATCH == executorType) {executor = new BatchExecutor(this, transaction); // 使用 BatchExecutor} else if (ExecutorType.REUSE == executorType) {executor = new ReuseExecutor(this, transaction); // 使用 ReuseExecutor} else {executor = new SimpleExecutor(this, transaction); // 默認(rèn)使用 SimpleExecutor}if (cacheEnabled) {executor = new CachingExecutor(executor); // 使用 CachingExecutor}executor = (Executor) interceptorChain.pluginAll(executor); // 執(zhí)行所有的MyBatis攔截器,并返回 Executorreturn executor; }

至此,我們找到了MyBatis的一個擴(kuò)展點(diǎn)——攔截器interceptor。

MyBatis Inteceptor是使用JDK的動態(tài)代理來實現(xiàn)的,所以它只能對接口進(jìn)行攔截
里面兩個很重要的注解是:@Intercepts、@Signature
@Intercepts : 標(biāo)記要攔截的方法簽名
@Signature : 方法簽名,唯一的標(biāo)記一個接口的方法

通過查看源碼,我們還可以知道,MyBatis所有的代理攔截都是通過 InterceptorChain.pluginAll(Object target) 來實現(xiàn)的
至此,我們得到下圖:

通過上圖可知,Mybatis支持對 Executor 、 StatementHandler 、 ResultSetHandler 和 PameterHandler 進(jìn)行攔截,也就是說會對這4種對象進(jìn)行代理。

Executor : 作用是執(zhí)行SQL語句(所有的sql),并且對事務(wù)、緩存等提供統(tǒng)一接口。(在這一層上做攔截的權(quán)限會更大)
StatementHandler : 作用是對 statement 進(jìn)行預(yù)處理,并且提供統(tǒng)一的原子的增、刪、改、查接口。(如果要在SQL執(zhí)行前進(jìn)行攔截的話,攔截這里就可以了)
ResultSetHandler : 作用是對返回結(jié)果ResultSet進(jìn)行處理。
PameterHandler : 作用是對參數(shù)進(jìn)行賦值。

2、源碼解讀具體實現(xiàn)(以Executor接口為例)

2.1、創(chuàng)建SqlSession時,SqlSessionFactroy會解析mybatis.xml配置文件中的plugins標(biāo)簽,并將Interceptor屬性定義的Interceptor放到interceptorChain中;
// SqlSessionFactoryBuilder.java public SqlSessionFactory build(Reader reader, String environment, Properties properties) {try {XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);// 解析mybatis.xml配置文件,并創(chuàng)建DefaultSqlSessionFactoryreturn build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e);} finally {ErrorContext.instance().reset();try {reader.close();} catch (IOException e) {// Intentionally ignore. Prefer previous error.}}} // XMLConfigBuilder.javapublic Configuration parse() {if (parsed) {throw new BuilderException("Each XMLConfigBuilder can only be used once.");}parsed = true;parseConfiguration(parser.evalNode("/configuration"));return configuration;}// 解析mybatis.xml中的各個標(biāo)簽private void parseConfiguration(XNode root) {try {propertiesElement(root.evalNode("properties")); //issue #117 read properties firsttypeAliasesElement(root.evalNode("typeAliases"));pluginElement(root.evalNode("plugins"));objectFactoryElement(root.evalNode("objectFactory"));objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));settingsElement(root.evalNode("settings"));environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631databaseIdProviderElement(root.evalNode("databaseIdProvider"));typeHandlerElement(root.evalNode("typeHandlers"));mapperElement(root.evalNode("mappers"));} catch (Exception e) {throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);}}// 解析plugins標(biāo)簽,并把Interceptor放到interceptorChain中private void pluginElement(XNode parent) throws Exception {if (parent != null) {for (XNode child : parent.getChildren()) {String interceptor = child.getStringAttribute("interceptor");Properties properties = child.getChildrenAsProperties();Interceptor interceptorInstance = (Interceptor) resolveClass(interceptor).newInstance();interceptorInstance.setProperties(properties);configuration.addInterceptor(interceptorInstance);}}}// Configuration,mybatis文件的抽象類public void addInterceptor(Interceptor interceptor) {interceptorChain.addInterceptor(interceptor);}
2.2、DefaultSqlSessionFactory.openSession()時使用JDK動態(tài)代理生成@Signature注解指定的被代理類(包含代理的方法以及方法參數(shù))
// DefaultSqlSessionFactory.javapublic SqlSession openSession() {return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);}private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {Transaction tx = null;try {final Environment environment = configuration.getEnvironment();final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);// 使用Configuration創(chuàng)建Executorfinal Executor executor = configuration.newExecutor(tx, execType, autoCommit);return new DefaultSqlSession(configuration, executor);} catch (Exception e) {closeTransaction(tx); // may have fetched a connection so lets call close()throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e);} finally {ErrorContext.instance().reset();}}
2.3、InterceptorChain生成的具體過程
// InterceptorChain.javapublic Object pluginAll(Object target) {for (Interceptor interceptor : interceptors) {target = interceptor.plugin(target);}return target;} // Interceptor的具體實現(xiàn)類(即我們業(yè)務(wù)上要實現(xiàn)的功能)@Overridepublic Object plugin(Object arg0) {return Plugin.wrap(arg0, this);} // Plugin.javapublic static Object wrap(Object target, Interceptor interceptor) {// getSignatureMap獲取Interceptor類上的@Intercepts(@Signature)內(nèi)容Map<Class<?>, Set<Method>> signatureMap = getSignatureMap(interceptor);Class<?> type = target.getClass();Class<?>[] interfaces = getAllInterfaces(type, signatureMap);// 生成目標(biāo)類target(Executor.class)的代理類,實現(xiàn)我們需要的plugin功能if (interfaces.length > 0) {return Proxy.newProxyInstance(type.getClassLoader(),interfaces,new Plugin(target, interceptor, signatureMap));}return target;}// 解析實現(xiàn)Interceptor接口的類上定義的@Intercepts(@Signature)內(nèi)容,獲取需要攔截的類和方法。// 例如:@Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})private static Map<Class<?>, Set<Method>> getSignatureMap(Interceptor interceptor) {Intercepts interceptsAnnotation = interceptor.getClass().getAnnotation(Intercepts.class);if (interceptsAnnotation == null) { // issue #251throw new PluginException("No @Intercepts annotation was found in interceptor " + interceptor.getClass().getName()); }Signature[] sigs = interceptsAnnotation.value();Map<Class<?>, Set<Method>> signatureMap = new HashMap<Class<?>, Set<Method>>();for (Signature sig : sigs) {Set<Method> methods = signatureMap.get(sig.type());if (methods == null) {methods = new HashSet<Method>();signatureMap.put(sig.type(), methods);}try {// sig.type()即Executor.classMethod method = sig.type().getMethod(sig.method(), sig.args());methods.add(method);} catch (NoSuchMethodException e) {throw new PluginException("Could not find method on " + sig.type() + " named " + sig.method() + ". Cause: " + e, e);}}return signatureMap;}

3、demo關(guān)鍵步驟

3.1、實現(xiàn)自定義的Interceptor
// 自定義攔截器@Intercepts({@Signature(type = Executor.class, method = "query", args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})public class MyTestInterceptor implements Interceptor {private static final String MSG = "octopus route table info is not exit!";@Overridepublic Object intercept(Invocation arg0) throws Throwable {Object obj = null;try {obj = arg0.proceed();} catch (Throwable e) {if (e.getCause() instanceof MySQLSyntaxErrorException) {MySQLSyntaxErrorException ex = (MySQLSyntaxErrorException) e.getCause();System.out.println("====" + ex.getErrorCode());System.out.println("====" + ex.getSQLState());System.out.println("====" + ex.getMessage());System.out.println("====" + ex.getCause());if (MSG.equals(ex.getMessage())) {throw new RouteTableNoExistException();}}}return obj;}@Overridepublic Object plugin(Object arg0) {return Plugin.wrap(arg0, this);}@Overridepublic void setProperties(Properties arg0) {System.out.println("env value: " + arg0.getProperty("names"));}}
3.2、在mybatis.xml中配置plugins
<configuration><plugins><plugin interceptor="com.pinganfu.interceptor.MyTestInterceptor" /></plugins> <environments default="development"><environment id="development"><transactionManager type="MANAGED"><property name="closeConnection" value="false" /></transactionManager><dataSource type="POOLED"><property name="driver" value="${driver}" /><property name="url" value="${jdbcUrl}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment></environments> <mappers><mapper resource="mappers/TBATMapper.xml" /></mappers> </configuration>
3.3、獲取SqlSession
Properties pro = new Properties();try {pro.load(Resources.getResourceAsStream("jdbc.properties"));// 加載mybatis.xml中的pluginsInputStream in = Resources.getResourceAsStream("mybatis.xml");sqlSession = new SqlSessionFactoryBuilder().build(in, "development", pro).openSession();} catch (IOException e) {e.printStackTrace();}

4、mybatis針對各種異常的處理

mybatis通過DefaultSqlSession執(zhí)行時,會將發(fā)生的所有異常統(tǒng)一包裝成PersistenceException再拋出,我們可以通過PersistenceException.getCause()獲取具體的異常。

// DefaultSqlSession.javapublic <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {try {MappedStatement ms = configuration.getMappedStatement(statement);List<E> result = executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);return result;} catch (Exception e) {// 對執(zhí)行發(fā)生的所有Exception進(jìn)行wrap之后再拋出throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e);} finally {ErrorContext.instance().reset();}} // ExceptionFactory.javapublic static RuntimeException wrapException(String message, Exception e) {// 將Exception進(jìn)行統(tǒng)一包裝成PersistenceExceptionreturn new PersistenceException(ErrorContext.instance().message(message).cause(e).toString(), e);}

總結(jié)

以上是生活随笔為你收集整理的MyBatis源码分析——MyBatis的扩展点(pugins)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

这里只有精彩视频 | 国内精品久久影院 | 午夜在线免费观看视频 | 激情视频一区二区三区 | 国产精品自产拍在线观看蜜 | 国产精品黄色 | 国产视频日韩视频欧美视频 | 日韩精品一区二区三区丰满 | 日韩中文字幕免费视频 | 欧美日韩一区二区视频在线观看 | 免费av高清| 国偷自产中文字幕亚洲手机在线 | 国产精品第十页 | 国产精品99久久久久久久久 | 国产爽视频 | 久久艹中文字幕 | 亚洲精品国产自产拍在线观看 | 久久国产剧场电影 | 综合色综合色 | 人人爽人人香蕉 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 欧美成人日韩 | 免费视频97 | 国内精品久久久久国产 | 欧美激情操 | av一本久道久久波多野结衣 | 最新99热| 成人免费 在线播放 | 婷婷中文字幕在线观看 | 精品在线视频一区二区三区 | 国产精品免费久久久久久 | 97在线观看免费 | 特黄特黄的视频 | 国产91国语对白在线 | 国产精品永久免费观看 | 亚洲永久精品一区 | 国产精品久久久 | 国产精品99久久久久久武松影视 | 精品a在线 | 亚洲三级视频 | 五月婷婷六月丁香激情 | 91在线视频一区 | 操操操人人人 | 精品极品在线 | 蜜桃传媒一区二区 | 国产91成人在在线播放 | 在线免费观看羞羞视频 | 久久99网站| 国产精品孕妇 | 日日日网| 日本美女xx | 色诱亚洲精品久久久久久 | 岛国大片免费视频 | 日本精品视频免费观看 | 91chinese在线 | 九九久久久久99精品 | 三级av免费看 | 不卡电影免费在线播放一区 | 精品国产乱码久久久久久天美 | 韩国精品福利一区二区三区 | 久久1电影院 | 成人在线视频在线观看 | 手机在线观看国产精品 | 久久调教视频 | 91精品国产自产在线观看 | 亚洲四虎| 久久免费久久 | 免费人成网 | 成人一级免费视频 | 伊人婷婷综合 | 精品在线观看一区二区三区 | 国内精品亚洲 | 一级黄色片在线播放 | 91成人精品在线 | 91女神的呻吟细腰翘臀美女 | 亚洲精品在线观看中文字幕 | 久久人人精品 | 日韩中文字幕免费看 | 成人精品一区二区三区电影免费 | 日韩精品在线视频免费观看 | 91亚洲夫妻 | 婷婷视频 | 成片视频在线观看 | 免费在线观看成人av | 色国产在线| 天天操天天射天天插 | 亚洲美女免费精品视频在线观看 | 91超级碰| 久久影院一区 | 黄色片视频免费 | 在线看片成人 | 久久久免费少妇 | 国产成人99久久亚洲综合精品 | 麻豆久久久久久久 | 最近中文字幕免费观看 | 亚洲美女久久 | 国产精品3| 国产五月色婷婷六月丁香视频 | 夜夜操狠狠干 | 国产在线探花 | avwww在线| 中文字幕一区二区三 | 欧美一级片在线观看视频 | 97碰碰碰| 国产精品网站 | 欧美黄色成人 | 欧美日韩视频在线观看免费 | 五月综合网站 | 四虎免费av | 久久天天拍 | 日韩欧美黄色网址 | 国产手机视频在线观看 | 久久超级碰 | 欧美一级乱黄 | 就操操久久| 欧美激情综合色综合啪啪五月 | 国产成人精品一区二三区 | 国产97碰免费视频 | 国产精品久久av | 中文字幕视频播放 | 国产日韩在线播放 | 国产精品密入口果冻 | 999久久精品 | 久草在线免 | www.狠狠插.com | 亚洲天堂精品视频在线观看 | 免费观看黄色12片一级视频 | 国产精品一区二区无线 | 久福利 | 天天色天天操综合 | 99精品视频免费在线观看 | 亚洲精品自拍视频在线观看 | 黄色免费大全 | 91大神一区二区三区 | 欧美在线观看视频 | 精品在线观看一区二区三区 | 国产一区在线看 | 久久久在线免费观看 | 国产色在线,com| 天天se天天cao天天干 | 99r在线精品 | 狠狠地操| 亚洲少妇激情 | 久久精品99国产精品日本 | 成人超碰在线 | 精品99在线视频 | 超碰最新网址 | 一区二区三区四区精品视频 | 久久久久久久久免费 | 中文字幕色播 | 中文字幕精 | 五月婷丁香 | 日韩精品不卡在线观看 | 久草视频免费观 | 精品国产乱码久久久久久久 | 日日干天天 | 视频在线在亚洲 | 久久久久久免费毛片精品 | 久久99久久99精品 | 一区二区三区四区五区在线视频 | 色偷偷人人澡久久超碰69 | 婷婷国产在线 | 成人91在线 | 国产亚洲高清视频 | 一级片黄色片网站 | 一区二区三区免费在线 | 亚洲精品免费在线观看 | www黄色 | 亚洲美女精品区人人人人 | 黄色亚洲在线 | 手机av在线免费观看 | 国产最顶级的黄色片在线免费观看 | 中文字幕高清视频 | 中文字幕av电影下载 | 久99久精品| 国产理论片在线观看 | 国产男男gay做爰 | 人人干人人艹 | 精品超碰 | 中文字幕 影院 | 色综合久久88色综合天天人守婷 | 欧美日韩在线观看不卡 | 特级西西444www高清大视频 | 激情五月***国产精品 | 亚洲精品一区二区久 | 欧美成人h版电影 | 欧美最猛性xxxx | 国产精品女人久久久 | 久久综合欧美精品亚洲一区 | 91观看视频| 特级西西人体444是什么意思 | 免费看十八岁美女 | 久久精品系列 | 国产精品av一区二区 | 98超碰人人 | 欧美精品免费视频 | 一区中文字幕电影 | 97伊人网| 激情五月婷婷综合网 | 久久久久久国产精品 | 97在线免费视频观看 | 9999国产精品| 久草精品视频 | 国产亚洲资源 | 91成人在线网站 | 天天操夜操 | 亚洲成年人在线播放 | 国产日女人| 久久综合九色欧美综合狠狠 | 国语精品久久 | 国产成人一区二区三区久久精品 | 黄av免费 | 最新精品视频在线 | 麻豆视频在线免费观看 | 丝袜av一区 | 午夜av一区二区三区 | 视频在线观看入口黄最新永久免费国产 | 激情久久网 | 欧美日韩国产高清视频 | 国产亚洲成人精品 | 日韩免费观看视频 | 丁香花在线观看视频在线 | 国产精品成人久久久久 | 国产免费成人av | 日本黄色大片免费看 | 国产 字幕 制服 中文 在线 | 99福利影院 | 亚洲免费在线看 | 夜夜看av| 日韩高清在线观看 | 久久免费视频播放 | 天天干天天操天天射 | 亚洲欧美综合 | 九草视频在线观看 | 中文字幕免费观看 | 美女搞黄国产视频网站 | 中文字幕美女免费在线 | 国产免费视频在线 | 国产一区二区久久久 | 久久国产系列 | 日韩在线高清视频 | 国产精品久久久久久久电影 | 免费在线电影网址大全 | 色婷婷国产精品 | 久久久黄视频 | 十八岁免进欧美 | 久热国产视频 | 国产第一页福利影院 | 亚洲精品66| 天天操网| 亚洲精品ww | 久久精品2| 日韩视频免费观看高清完整版在线 | 天天操婷婷 | 国产操在线 | 中文字幕在线观看视频免费 | www国产亚洲 | 久久视频国产 | 久久精品com | 国产黄色av影视 | 日韩精品不卡在线 | 久草线 | 国产乱老熟视频网88av | 国产.精品.日韩.另类.中文.在线.播放 | 精品久久久久久久久久久久久久久久久久 | 六月婷婷久香在线视频 | 免费性网站 | 亚洲狠狠操 | 午夜视频亚洲 | 97电影院在线观看 | 深夜成人av | 五月的婷婷 | 激情综合五月 | 色欧美综合 | 日本动漫做毛片一区二区 | 爱情影院aqdy鲁丝片二区 | 国产在线一线 | 国产精品一区免费在线观看 | 久草久| 日韩毛片一区 | 又黄又爽又刺激 | 国产资源中文字幕 | 亚洲精品视频网 | 五月婷婷视频在线 | 特及黄色片 | 一区二区av | 91精品影视 | 五月婷婷网站 | 天天草天天爽 | 国产专区在线 | 美女黄频免费 | 国产一级精品视频 | 欧美精品在线一区 | 日本久久精品 | 日韩专区一区二区 | 探花视频免费观看高清视频 | 日韩videos | 日韩av一区二区在线 | 欧美怡红院视频 | 国产一区免费 | 免费网址在线播放 | 久久久国际精品 | 四虎成人精品在永久免费 | 久草在线网址 | 狠色狠色综合久久 | 国产成人精品一区二区三区网站观看 | 久久国产精品影片 | 超碰资源在线 | 久久伦理电影网 | 久久一级电影 | 亚洲国产三级在线观看 | 成人播放器 | 在线视频黄 | 久久婷婷国产色一区二区三区 | 日韩羞羞 | 国产精品一区二区久久精品爱微奶 | 免费黄色在线网站 | 免费av观看 | 手机av网站 | 久草久视频 | 国产手机视频在线观看 | 日韩电影在线观看中文字幕 | 日本视频精品 | 狠狠干狠狠艹 | 日韩午夜视频在线观看 | 日韩av在线看 | 久久免费视频精品 | 五月天视频网站 | 亚洲激精日韩激精欧美精品 | 国产91精品高清一区二区三区 | 国产一卡在线 | 大型av综合网站 | av免费观看高清 | 国产不卡精品 | 中文字幕一二 | 国内精品久久久久久 | 日韩精品一区二区三区三炮视频 | aaaaaa毛片| 天天夜操 | 一区二区中文字幕在线 | 精品国产资源 | 久久国产热视频 | 天天操天天射天天 | 国产成人久久av977小说 | 国产成人av一区二区三区在线观看 | 国产精品一区二区三区久久久 | 美女网色 | 麻豆国产露脸在线观看 | 久久人人97超碰com | 一区二区三区手机在线观看 | 92国产精品久久久久首页 | 免费成人av在线 | 免费视频色 | 99精品视频在线观看免费 | 黄色录像av | 99精品国产一区二区三区麻豆 | 亚洲视频电影在线 | 国产精品18久久久久vr手机版特色 | 国产精品一区二区在线观看免费 | 99亚洲精品在线 | 天天综合天天做天天综合 | 中文字幕在线色 | 偷拍久久久 | 97操碰| 嫩草av在线| 91香蕉国产在线观看软件 | 在线免费性生活片 | 色综合中文综合网 | 精品99在线观看 | 国产二区视频在线观看 | 超碰人人乐 | 在线观看网站你懂的 | 黄污视频网站大全 | 国产精品久久久久久久久久三级 | 欧美成人区 | 国产无遮挡又黄又爽在线观看 | 天天搞天天干天天色 | 亚洲蜜桃在线 | 欧美性生交大片免网 | 麻豆视频免费入口 | 日韩免费电影一区二区三区 | 啪啪凸凸| 2019中文字幕网站 | 亚洲天堂网视频 | 国产91在线免费视频 | 午夜久久久久久久 | 黄色av影院 | 天天色欧美 | 欧美国产日韩一区 | 91传媒在线 | 亚洲精品在线电影 | 中国一级片在线 | 免费黄色看片 | 欧美久久久久久 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 午夜精品成人一区二区三区 | 国产麻豆视频 | 欧美大片www | 91大神dom调教在线观看 | 97超碰人人爱 | 日韩av免费在线电影 | 99热这里精品| 国产一区二区三精品久久久无广告 | 中文字幕在线观看免费高清电影 | 涩涩网站在线 | 黄色亚洲在线 | 精选久久 | 欧美国产三区 | 美女精品在线 | 久热精品国产 | 欧美精彩视频在线观看 | 99精品免费久久久久久日本 | 狠日日 | 8090yy亚洲精品久久 | 久久精品五月 | 四虎伊人| 日韩毛片在线播放 | 美女久久久久 | 日韩精品在线一区 | 日韩国产精品一区 | 久久综合九色综合久久久精品综合 | 日韩av手机在线看 | 亚洲 综合 精品 | 在线观看日韩免费视频 | 91精品久久久久久综合五月天 | 成人av在线看 | av电影在线播放 | 激情婷婷 | 在线观看mv的中文字幕网站 | 欧美a在线免费观看 | 国产高清日韩欧美 | 日韩欧美在线高清 | 亚洲无线视频 | 国产精品免费观看网站 | 亚洲精品国产精品国产 | 亚洲天堂网站 | av观看网站 | 少妇搡bbbb搡bbb搡69 | 久久9999久久免费精品国产 | 麻豆国产视频下载 | 国产成人久久精品77777综合 | 免费av网站观看 | 欧美日韩综合在线 | 黄色app网站在线观看 | 亚洲精品午夜一区人人爽 | 韩国在线一区 | 免费观看丰满少妇做爰 | 91伊人| 人人天天夜夜 | 少妇搡bbbb搡bbb搡忠贞 | 综合久久综合久久 | 亚洲草视频 | 欧美福利视频一区 | 激情综合色图 | 一级黄色片网站 | www.888.av| 中文字幕久久久精品 | 天天天干天天天操 | 久久一区二区免费视频 | 亚洲精品三级 | 亚洲综合在线五月天 | av专区在线| 国产精品一区二区中文字幕 | 亚洲国产精品小视频 | 天天鲁一鲁摸一摸爽一爽 | 国产在线观看二区 | 国产精品久久久久久久久久久久午夜片 | 中文在线www | 欧美久久久久久久久久久久 | 九色视频自拍 | 99在线观看 | 亚洲人久久 | 天天鲁天天干天天射 | 欧美日韩精品二区第二页 | 在线精品亚洲一区二区 | 麻豆视频www | 亚洲永久国产精品 | 婷婷精品在线视频 | 亚洲欧美视频一区二区三区 | 91av资源在线| 国产香蕉久久精品综合网 | 九九九热 | 友田真希av| 99久久超碰中文字幕伊人 | 中文字幕在线视频国产 | 日韩天堂网 | 亚洲永久国产精品 | 日韩av资源站| 日韩精品不卡在线观看 | 亚州av网站大全 | 久久综合久久八八 | 91人人在线| 欧美与欧洲交xxxx免费观看 | 久久久久久久久久久综合 | 精品亚洲一区二区三区 | 亚洲一区精品人人爽人人躁 | 在线香蕉视频 | 久久精品视频在线播放 | 91桃色免费视频 | 国内精品久久久久影院一蜜桃 | av电影免费看 | 国产精品va最新国产精品视频 | a视频在线 | 探花视频在线观看免费 | 黄色免费观看网址 | www.黄色在线 | 黄色三几片 | 天天天天天干 | 精品国产成人av | 免费视频在线观看网站 | 91在线最新 | 欧美不卡在线 | 色综合天天在线 | 国产亚洲精品久久久久久久久久久久 | 国产91影院| 丁香激情综合国产 | 久久草草影视免费网 | 精品一区二区在线免费观看 | 久久免费在线观看视频 | 日韩精品免费在线视频 | 久久国产精品免费看 | 欧美日韩精品免费观看视频 | 久久精品综合一区 | 国产99久久| 亚洲视频 中文字幕 | 国产免费一区二区三区最新6 | 一区二区三区四区影院 | 国产日韩中文字幕在线 | 成人在线免费观看网站 | 亚洲成年人免费网站 | 久久国产精品成人免费浪潮 | www.亚洲视频.com | 中文字幕 国产视频 | 久久国产精品网站 | 丝袜美女在线观看 | 日韩在线 一区二区 | 国产精品女| 日韩电影在线看 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 国产精品免费视频久久久 | av高清影院| 中文字幕av在线电影 | 黄色毛片观看 | www国产精品com | 丁香激情综合 | 久久香蕉影视 | 亚洲成人黄 | 中文在线资源 | 国产中文字幕在线视频 | 久久热首页| 久久久综合精品 | 中文av不卡 | 国产伦理剧 | 成人免费影院 | 亚洲97在线 | 亚洲一区二区精品 | 高清免费av在线 | 天天色宗合| 色伊人网 | 国产欧美综合视频 | 欧美激情视频一二三区 | 夜夜狠狠 | 免费高清国产 | 中文字幕文字幕一区二区 | 婷婷深爱五月 | 日韩av高清| 亚州中文av | 日韩在线电影观看 | 丁香六月五月婷婷 | 一区二区免费不卡在线 | www.玖玖玖 | 91九色国产| 六月婷操 | 91日韩在线专区 | 91九色蝌蚪在线 | www.久久久 | 天天久久综合 | 91重口视频 | 久久精品亚洲综合专区 | 天天曰天天曰 | 欧美日韩视频在线观看一区二区 | 午夜精品av在线 | 成人资源在线 | 国产理论影院 | 久久久精品 | 国产 色| 成年人视频在线观看免费 | 亚洲aⅴ乱码精品成人区 | 青青草视频精品 | 国内精品久久久久久久久久 | 国产91丝袜在线播放动漫 | 婷婷丁香激情网 | 国产精品久久久久亚洲影视 | 免费三级a| 国产中文字幕视频 | 日本一区二区不卡高清 | www.狠狠插.com | 五月婷婷色播 | 久久曰视频 | 成人免费视频播放 | 在线观看国产日韩 | 五月天色站 | 国产黄视频在线观看 | 日韩二区在线 | 久国产在线播放 | 国产成a人亚洲精v品在线观看 | 欧美一区成人 | 天天操天天操天天操天天 | 网站在线观看你们懂的 | 在线成人免费电影 | 一区二区三区高清在线观看 | 欧美一区二区日韩一区二区 | 久久视频国产精品免费视频在线 | 国产中文字幕视频 | 国产一区国产精品 | 狠狠色伊人亚洲综合成人 | 欧美日韩国产综合一区二区 | 国产精品久久久久久五月尺 | 国内精品久久久久久 | av中文国产 | 国产一区二区三区网站 | 制服丝袜亚洲 | 五月开心激情网 | 日韩精品电影在线播放 | 狠狠插天天干 | 日日夜夜狠狠操 | 色综合久久精品 | 99中文在线| 最新av在线网站 | 在线视频 影院 | a视频免费在线观看 | 九色91av | 大荫蒂欧美视频另类xxxx | 91精品视频在线观看免费 | 中文字幕精品一区久久久久 | 亚洲欧美日韩在线一区二区 | 国产精品原创 | 国产亚洲人 | 日韩中文字| 91九色精品 | 97在线观看免费高清完整版在线观看 | 91综合色 | 国产精品久久综合 | 久草在线视频国产 | 国产一区二区三区四区大秀 | 日日碰狠狠躁久久躁综合网 | 激情综合色图 | 久久在线免费视频 | 日韩一区二区三区高清在线观看 | 成年人av在线播放 | 国产亚洲精品美女久久 | 在线成人免费av | 国产一区二区视频在线 | 91精品久久久久久久久 | 国产亚洲视频系列 | 精品a视频| 中文字幕第一页在线播放 | 精品国产中文字幕 | 成人h在线播放 | 中文字幕在线久一本久 | 久久婷婷五月综合色丁香 | 91超碰免费在线 | 国产一区二区在线免费播放 | 久久精品99北条麻妃 | 黄污在线观看 | 精品国产一区在线观看 | 麻豆传媒在线免费看 | 国产一卡二卡四卡国 | 精品国产视频在线观看 | 五月天婷婷免费视频 | 精品一区二区三区在线播放 | 99精品色| 69精品视频在线观看 | 久久不射电影院 | 国产亚洲情侣一区二区无 | 91pony九色丨交换 | 五月激情婷婷丁香 | 久久黄色免费视频 | 狠狠干天天 | 国产精品短视频 | 亚洲精品久久久蜜臀下载官网 | 国产精品theporn | 亚洲成人av片在线观看 | 国产一级在线 | 久草青青在线观看 | 亚洲免费色 | 久久久精品国产一区二区电影四季 | 成人资源站 | 国产精品成人av电影 | 日韩两性视频 | 四虎永久视频 | 超碰在线最新 | 国产91综合一区在线观看 | 中文字幕电影在线 | 国产精品一区二区av麻豆 | 中文乱码视频在线观看 | 国产午夜精品一区 | 天天天天天天干 | 热精品| 蜜臀久久99精品久久久久久网站 | 欧美亚洲精品在线观看 | 欧美日韩视频免费 | 欧美日韩二三区 | 亚洲一区二区三区毛片 | 精品一区二三区 | 精品欧美一区二区在线观看 | 欧美a√大片 | 麻豆免费视频观看 | 五月激情六月丁香 | 高清久久久| 91人人揉日日捏人人看 | 亚洲精品在线资源 | 日韩中文字幕在线观看 | 天天干天天拍天天操 | 免费91麻豆精品国产自产在线观看 | 国内精品久久久久影院日本资源 | 最近最新中文字幕 | 在线а√天堂中文官网 | 99热日本| 亚洲精品欧美专区 | 亚洲成a人片77777潘金莲 | 久久成人在线视频 | 国产精品ⅴa有声小说 | 色狠狠综合天天综合综合 | 亚洲欧美日韩在线一区二区 | a级成人毛片 | 又湿又紧又大又爽a视频国产 | 很黄很色很污的网站 | 久久久免费播放 | a视频免费在线观看 | 免费网站观看www在线观看 | 国产成人精品女人久久久 | 色94色欧美 | 久久久久久久久久久久影院 | 日本在线中文 | 亚洲三级国产 | 99色亚洲| 精品久久久999 | 中文十次啦 | 9色在线视频 | 久久精品91视频 | 日本韩国精品一区二区在线观看 | www日 | 日韩专区 在线 | 久久国产美女视频 | 午夜精品久久久久久99热明星 | 国产精品免费久久久 | 国产精品激情偷乱一区二区∴ | 欧美先锋影音 | 精品久久久久久久久久 | 久久精品在线免费观看 | 国产精品久久久久久一区二区三区 | 99久国产| 在线黄频| 成人精品国产免费网站 | 久草在线视频网站 | 99视频国产精品免费观看 | 黄色av电影在线观看 | 国产精品99久久久久人中文网介绍 | 欧美视频二区 | 国产成人香蕉 | 亚洲精品一区二区久 | 亚洲视频播放 | aaa毛片视频 | 国产亚洲日| 免费在线成人av电影 | 久久成人18免费网站 | 欧美网址在线观看 | 久久久久黄 | 在线精品视频免费播放 | 日韩黄色在线观看 | 亚洲伊人网在线观看 | 久久精品视频观看 | 超级碰碰碰免费视频 | 亚洲精选视频免费看 | 天堂久色| 91视频免费观看 | 91麻豆精品国产91久久久久 | 日本大尺码专区mv | 久热色超碰 | 奇米影视777四色米奇影院 | 麻豆视频免费在线观看 | 最近中文字幕免费 | 超碰在线天天 | 91视频在线免费看 | 亚洲五月婷 | 丝袜美腿亚洲 | 精品国产乱码久久久久久1区2匹 | 精品在线观看一区二区 | 国产中文 | 国产精品一区二区视频 | 免费观看黄 | 制服丝袜欧美 | 久久免费av电影 | 日日夜夜干 | 久久久久久久久艹 | 99视频这里有精品 | 欧美少妇xxxxxx | 久久精品国产成人 | 99精品免费久久久久久久久 | 日本亚洲国产 | 日韩精品久久久 | 在线观看久久久久久 | 中文字幕美女免费在线 | 久久精品99国产精品 | 国产精品一二三 | 国产福利精品视频 | 超碰在线98 | 日韩免费小视频 | 黄色一二级片 | av在线免费在线观看 | 国产高清专区 | 欧美成人精品欧美一级乱黄 | 91视频久久 | 五月婷婷色丁香 | 亚洲精品合集 | 午夜久久福利影院 | 亚洲情影院 | 六月婷色 | 人人干97 | www.天天草| 精品国产理论片 | 久久精品一二三区 | 欧美视频日韩 | 国产精品v a免费视频 | 亚洲春色奇米影视 | 国产精品123| 婷婷网站天天婷婷网站 | 插综合网 | 亚洲精品456在线播放乱码 | 涩涩网站在线播放 | av看片在线| 中文av不卡 | 黄色资源在线观看 | 亚洲男女精品 | 久久久久久毛片精品免费不卡 | 色五婷婷 | 午夜性福利 | 色资源二区在线视频 | 国产无限资源在线观看 | 成人在线免费观看视视频 | 久草新在线 | 一区二区三区日韩在线观看 | 91中文字幕视频 | 国产韩国日本高清视频 | 99久久精品国产欧美主题曲 | 免费观看v片在线观看 | 叶爱av在线 | 中文字幕丝袜美腿 | 成片人卡1卡2卡3手机免费看 | 久久视频在线免费观看 | 91在线九色 | 99婷婷 | 欧美激情视频一区二区三区免费 | 免费91在线观看 | 在线视频免费观看 | 狠狠躁天天躁 | 麻豆影视在线播放 | 在线免费观看欧美日韩 | 日韩精品欧美视频 | h动漫中文字幕 | 顶级欧美色妇4khd | 天天玩夜夜操 | 日韩大片免费观看 | 精品国产大片 | 久久久亚洲影院 | 亚洲国产伊人 | 六月色婷 | 久久精品久久久久电影 | 成人午夜免费福利 | 天天射天天干天天操 | 九九热免费在线观看 | 精品一区二区综合 | 免费看一级片 | 国产精品成人免费一区久久羞羞 | 久久久久久久久久福利 | 久久中国精品 | 在线观看国产高清视频 | 欧美久久久一区二区三区 | 中文字幕资源网在线观看 | 日韩专区一区二区 | 天天躁日日躁狠狠躁av麻豆 | 亚洲精品影视在线观看 | 久久婷婷一区二区三区 | 亚洲丝袜中文 | 成人资源站 | 在线观看av免费观看 | 成人永久在线 | 天天操天天舔天天爽 | 天天色天天操综合 | 美女网站久久 | 91九色精品女同系列 | 免费97视频| 丁香五香天综合情 | 日韩r级在线| a午夜在线 | 国产偷国产偷亚洲清高 | 国产123区在线观看 国产精品麻豆91 | 国产精品美女久久久久久2018 | 久久精品久久99精品久久 | 最近中文字幕久久 | 91色国产在线 | 久久精品99国产精品日本 | 三级av免费 | 免费国产一区二区 | 日韩免费观看一区二区三区 | 天天色天天综合网 | 四虎影视欧美 | 成人av资源网 | 中文字幕成人av | 四虎国产视频 | 精品一区二区免费视频 | 黄色精品视频 | av在线播放中文字幕 | 精品婷婷 | 久久精品国产亚洲a | 高清美女视频 | 91精品在线免费观看 | 黄色片网站av | 亚州黄色一级 | 四虎永久精品在线 | 久久美女免费视频 | 2022久久国产露脸精品国产 | 国产91全国探花系列在线播放 | 久久久蜜桃 | 免费观看黄 | 黄色国产精品 | 久久热亚洲 | 色综合在 | 白丝av免费观看 | 99精品视频在线观看视频 | 天天干天天干天天干天天干天天干天天干 | 一区二区三区在线观看中文字幕 | 久久再线视频 | 午夜久久影院 | 久久久片| 黄色av电影网 | 免费看十八岁美女 | 亚洲一区欧美激情 | 国产伦精品一区二区三区… | 免费看亚洲毛片 | 亚洲国产精品久久久久 | 国产美女精品人人做人人爽 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 在线观看黄 | 欧美日韩精品二区第二页 | 国产福利av | 中文免费 | 激情av在线播放 | 91香蕉视频黄| 一级片免费观看视频 | 色婷婷伊人 | 亚洲综合色av | 成人在线视频免费看 | 这里有精品在线视频 | 国产精选在线 | 久久伦理网 | www色综合 | 三级黄色a | 色婷婷综合久久久久中文字幕1 | av一区二区在线观看中文字幕 | 成人h在线观看 | 国产精品久久久久永久免费看 | 欧美日韩在线观看视频 | 国产香蕉久久精品综合网 | 91九色蝌蚪视频 | 成年人三级网站 | 亚洲激情婷婷 | 婷婷综合久久 | 最近中文字幕高清字幕在线视频 | 国产视频一区二区三区在线 | 在线观看国产高清视频 | 免费观看成年人视频 | 日韩欧美99 | 国产精品18久久久久久久网站 | 91黄色免费网站 | 久久五月天色综合 | 91亚洲国产成人久久精品网站 | 五月天六月色 | 视频一区在线播放 | 福利二区视频 | 波多野结衣动态图 | 99久久精品无码一区二区毛片 | 国产一级片免费播放 | 成人亚洲网 | 亚洲综合视频在线播放 | 四虎国产视频 | 国产三级国产精品国产专区50 | av电影一区二区三区 | 在线视频一区二区 | 欧美va天堂va视频va在线 | 国产精品福利在线 | 久久免费中文视频 | 久草免费在线观看 | 少妇搡bbbb搡bbb搡忠贞 | 免费日韩 精品中文字幕视频在线 | 91精品在线看 | 国产精品99久久久久久久久久久久 |