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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis源码分析(方法调用过程)

發布時間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis源码分析(方法调用过程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

十一月月底,宿舍樓失火啦,搞得20多天沒有網,目測直到放假也不會來了。。。

?

正題

嗯~,其實閱讀源碼不是為了應付面試,更重要的讓你知道,大師是怎樣去寫代碼的,同樣是用Java,為啥Clinton Begin寫的叫源碼,而你寫只能叫代碼。

最簡單的入門代碼:

先讀取配置文件流,然后構造個SqlSessionFactory,然后開啟一個SqlSession,指定statement,調用查詢方法,返回結果。那么,你知道他是怎樣實現的嗎

?SqlSessionFactoryBuilder.build 方法

public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {try {XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);return build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e);} finally {ErrorContext.instance().reset();try {inputStream.close();} catch (IOException e) {// Intentionally ignore. Prefer previous error. }}}

將輸入流傳入 XMLConfigBuilder 的構造方法來創建一個 XMLConfigBuilder 對象, 調用 XMLConfigBuilder parse 方法進行解析配置文件,返回一個 Configuration 對象

public SqlSessionFactory build(Configuration config) {return new DefaultSqlSessionFactory(config);}

?

將返回的 Configuration 對象傳入另外一個重載的 build 方法,實際上是傳入了 DefaultSqlSessionFactory 的構造方法,返回 sqlSessionFactory

我比較關心的是 XMLConfigBuilder parse 方法,都干了什么事情

首先進入 XMLConfigBuilder 的構造方法后, 真正使用配置文件輸入流的是 XPathParser, 它是負責解析 XML文件元素節點的, 通俗地講, XpathParser 負責將原料加工成零件, XMLConfigBuilder 負責按照工序組裝零件成一個產品。

public XMLConfigBuilder(InputStream inputStream, String environment, Properties props) {this(new XPathParser(inputStream, true, props, new XMLMapperEntityResolver()), environment, props);}private XMLConfigBuilder(XPathParser parser, String environment, Properties props) {super(new Configuration());ErrorContext.instance().resource("SQL Mapper Configuration");this.configuration.setVariables(props);this.parsed = false;this.environment = environment;this.parser = parser;}

?

經過構造方法初始化好XPathParser后,就要進入parse方法了。Parse 方法里有個判斷,如果已經解析過了,就會拋出異常,如果沒解析,就將解析標志設為 true。接著調用parseConfiguration?

public Configuration parse() {if (parsed) {throw new BuilderException("Each XMLConfigBuilder can only be used once.");}parsed = true;parseConfiguration(parser.evalNode("/configuration"));return configuration;}private void parseConfiguration(XNode root) {try {Properties settings = settingsAsPropertiess(root.evalNode("settings"));//issue #117 read properties firstpropertiesElement(root.evalNode("properties"));loadCustomVfs(settings);typeAliasesElement(root.evalNode("typeAliases"));pluginElement(root.evalNode("plugins"));objectFactoryElement(root.evalNode("objectFactory"));objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));reflectionFactoryElement(root.evalNode("reflectionFactory"));settingsElement(settings);// read it after objectFactory and objectWrapperFactory issue #631environmentsElement(root.evalNode("environments"));databaseIdProviderElement(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);}}

?

parseConfiguration 就是工序圖, 組裝產品一定是按照一定順序的, 所以這也是建造者模式的核心。
比如:第一個是全局設置 settings,第二個是屬性文件,第三個是別名。在這里我們看 environmentsElement
很明顯它是來構建 Environment 的, 也就是我們配置的數據源信息。

private void environmentsElement(XNode context) throws Exception {if (context != null) {if (environment == null) {environment = context.getStringAttribute("default");}for (XNode child : context.getChildren()) {String id = child.getStringAttribute("id");if (isSpecifiedEnvironment(id)) {TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager")); // 構建事務工廠DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource")); // 構建數據源工廠DataSource dataSource = dsFactory.getDataSource();Environment.Builder environmentBuilder = new Environment.Builder(id).transactionFactory(txFactory).dataSource(dataSource);configuration.setEnvironment(environmentBuilder.build());}}}}

主要有兩大塊: transactionManagerElement dataSourceElement

private TransactionFactory transactionManagerElement(XNode context) throws Exception {if (context != null) {String type = context.getStringAttribute("type");Properties props = context.getChildrenAsProperties();TransactionFactory factory = (TransactionFactory) resolveClass(type).newInstance();factory.setProperties(props);return factory;}throw new BuilderException("Environment declaration requires a TransactionFactory.");}private DataSourceFactory dataSourceElement(XNode context) throws Exception {if (context != null) {String type = context.getStringAttribute("type");Properties props = context.getChildrenAsProperties();DataSourceFactory factory = (DataSourceFactory) resolveClass(type).newInstance();factory.setProperties(props);return factory;}throw new BuilderException("Environment declaration requires a DataSourceFactory.");}

注意看: resolveClass(type).newInstance(), 這不就是反射嗎?

而那個 type 則是我們配置文件里面配置的,比如 jdbc 或是 manage, 對應 JdbcTransactionFactory ManagedTransactionFactory

Upooled Pooled對應 UnpooledDataSourceFactory PooledDataSourceFactory

返回 environmentsElement 方法, 我們還看到 Environment 有個 Builder 類, 準確來說是靜態內部類。

Environment.Builder environmentBuilder = new Environment.Builder(id).transactionFactory(txFactory).dataSource(dataSource);configuration.setEnvironment(environmentBuilder.build());

?

具體的Environment類:

public final class Environment {private final String id;private final TransactionFactory transactionFactory;private final DataSource dataSource;public Environment(String id, TransactionFactory transactionFactory, DataSource dataSource) {if (id == null) {throw new IllegalArgumentException("Parameter 'id' must not be null");}if (transactionFactory == null) {throw new IllegalArgumentException("Parameter 'transactionFactory' must not be null");}this.id = id;if (dataSource == null) {throw new IllegalArgumentException("Parameter 'dataSource' must not be null");}this.transactionFactory = transactionFactory;this.dataSource = dataSource;}public static class Builder {private String id;private TransactionFactory transactionFactory;private DataSource dataSource;public Builder(String id) {this.id = id;}public Builder transactionFactory(TransactionFactory transactionFactory) {this.transactionFactory = transactionFactory;return this;}public Builder dataSource(DataSource dataSource) {this.dataSource = dataSource;return this;}public String id() {return this.id;}public Environment build() {return new Environment(this.id, this.transactionFactory, this.dataSource);}}public String getId() {return this.id;}public TransactionFactory getTransactionFactory() {return this.transactionFactory;}public DataSource getDataSource() {return this.dataSource;}}

?

那么這里有一個設計模式的問題。為什么Environment里面要搞一個Builder類呢?直接使用構造方法不也可以達到相同的目的嗎?

1. 首先, 用內部類是因為內部類與外部類有一定的關系, 往往只有該外部類調用此內部類。 靜態內部類
只能訪問靜態的成員變量和方法,不能訪問非靜態變量的方法。但是普通內部類可以訪問任意外部類
的成員變量和方法。靜態內部類可以聲明普通成員變量和方法,但是普通內部類不能聲明 static 變量
或方法。
靜態內部類: Inner I = new Outer.Inner();
普通內部類: Outer o = new Outer(); Inner I = o.new Inner();
2. 另外, 靜態都是用來修飾類的內部成員的, 比如靜態方法, 靜態成員變量。 靜態方法不能訪問非靜態
變量和非靜態方法。 Static 不能修飾局部變量。
3. 總結:如果類的構造函數有多個參數,設計這樣的類時, 最好使用 Builder 模式, 特別是大多數參數
都是可選的時候。如果現在不能確定參數的個數,最好一開始就使用建造者模式。?

?到此,SqlSessionFactoryBuilder.build方法的作用是:解析配置文件,構建唯一的Configuration對象,構建全局唯一并且線程安全的SqlSessionFactory。

?

SqlSessionFactory的openSession方法

?進入openSession方法

@Overridepublic 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);final Executor executor = configuration.newExecutor(tx, execType);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();}}

?

看try塊第一行,獲得的Environment是前面由XMLConfigBuilder裝配到Configuration里面的。第二三行的事務工廠和數據源都是在解析配置文件期間裝配到Environment里面的。

到第四行,這是個新東西Executor,簡單來說它是真正執行CRUD操作的工具,給我們提供的SqlSession僅僅是個用戶接口。Executor也是由Configuration對象來創建的,可見Configuration是多么重要。

我們知道事務操作必不可少,所以Executor的創建必須有Transaction對象。

第五行,就是創建SqlSession了,DefaultSqlSession是一個具體實現類。我們可以看到它把Executor傳進去了,那么就不難發現,SqlSession不過是件衣裳。

接下來看SqlSession調用過程

?

調用 SqlSession selectList 方法

先看selectOne方法

@Overridepublic <T> T selectOne(String statement, Object parameter) {// Popular vote was to return null on 0 results and throw exception on too many.List<T> list = this.<T>selectList(statement, parameter);if (list.size() == 1) {return list.get(0);} else if (list.size() > 1) {throw new TooManyResultsException("Expected one result (or null) to be returned by selectOne(), but found: " + list.size());} else {return null;}}

?

看到這句話沒

this.<T>selectList(statement, parameter);

我們調用返回一條數據的方法,實際上也是調用selectList,現在看selectList:多個重載方法我就不全部貼了

@Overridepublic <E> List<E> selectList(String statement, Object parameter, RowBounds rowBounds) {try {MappedStatement ms = configuration.getMappedStatement(statement);return executor.query(ms, wrapCollection(parameter), rowBounds, Executor.NO_RESULT_HANDLER);} catch (Exception e) {throw ExceptionFactory.wrapException("Error querying database. Cause: " + e, e);} finally {ErrorContext.instance().reset();}}

?

MappedStatement你可以理解為你配置文件里面寫的sql語句的映射,比如:

同樣,這個對象也來自Configuration。接著看,return的是Executor的query方法,ms作為參數。Executor有多個實現類,BaseExecutor是最基礎的實現,來看其中的query實現:

@Overridepublic <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler) throws SQLException {BoundSql boundSql = ms.getBoundSql(parameter);CacheKey key = createCacheKey(ms, parameter, rowBounds, boundSql);return query(ms, parameter, rowBounds, resultHandler, key, boundSql);}

?

第一行,從ms里面獲得綁定的sql語句,腦袋是不是跟配置產生一點聯系了?第二行不需要管,看第三行的實現:

@SuppressWarnings("unchecked")@Overridepublic <E> List<E> query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {ErrorContext.instance().resource(ms.getResource()).activity("executing a query").object(ms.getId());if (closed) {throw new ExecutorException("Executor was closed.");}if (queryStack == 0 && ms.isFlushCacheRequired()) {clearLocalCache();}List<E> list;try {queryStack++;list = resultHandler == null ? (List<E>) localCache.getObject(key) : null;if (list != null) {handleLocallyCachedOutputParameters(ms, key, parameter, boundSql);} else {list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql);}} finally {queryStack--;}if (queryStack == 0) {for (DeferredLoad deferredLoad : deferredLoads) {deferredLoad.load();}// issue #601 deferredLoads.clear();if (configuration.getLocalCacheScope() == LocalCacheScope.STATEMENT) {// issue #482 clearLocalCache();}}return list;}

?

當查詢的時候先從緩存中找,如果找不到就從數據庫中找,這里我們看

list = queryFromDatabase(ms, parameter, rowBounds, resultHandler, key, boundSql); private <E> List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {List<E> list;localCache.putObject(key, EXECUTION_PLACEHOLDER);try {list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql);} finally {localCache.removeObject(key);}localCache.putObject(key, list);if (ms.getStatementType() == StatementType.CALLABLE) {localOutputParameterCache.putObject(key, parameter);}return list;}

?

?這句是關鍵:

list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql);

在BaseExecutor里面有定義

protected abstract <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)throws SQLException;

?

它是需要子類去實現。總共有三種:BatchExecutor,ReuseExecutor,SimpleExecutor。這里我們選擇SimpleExecutor:

@Overridepublic <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {Statement stmt = null;try {Configuration configuration = ms.getConfiguration();StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql);stmt = prepareStatement(handler, ms.getStatementLog());return handler.<E>query(stmt, resultHandler);} finally {closeStatement(stmt);}}

?

?這里說一句題外話:到處都需要Configuration,它無疑是mybatis運行期間的核心。

StatementHandler是對java.sql.Statement的封裝處理,有三個實現類:CallableStatementHandler,PreparedStatementHandler,SimpleStatementHandler。

同樣,利用Configuration來創建一個StatementHandler實例,之后利用這個handler來創建一個java.sql.statement,最后調用handler的<E>query方法,利用原生的Statement來執行查詢操作。

PreparedStatementHandler.query方法

@Overridepublic <E> List<E> query(Statement statement, ResultHandler resultHandler) throws SQLException {PreparedStatement ps = (PreparedStatement) statement;ps.execute();return resultSetHandler.<E> handleResultSets(ps);}

?

?前兩行都應該知道,類型轉換以及執行jdbc的查詢。最后一行是利用原生的PreparedStatement來進行結果集的封裝。ResultSetHandler有個默認實現類:DefaultResultSetHandler,具體就不在分析了。

到此為止,返回結果集到最上層,顯示給用戶。

?

先寫這些吧,寫的不是特別滿意,望指教~

?

轉載于:https://www.cnblogs.com/LUA123/p/8094573.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的mybatis源码分析(方法调用过程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

五月丁香| 日韩剧情| 日日夜夜噜 | 51精品国自产在线 | 亚洲毛片久久 | 狠狠干美女 | 97视频免费在线 | 在线免费观看国产黄色 | 手机在线免费av | 天天操天天操天天操天天操天天操 | 国产精品视频资源 | 亚洲视频在线看 | 91精品国产92久久久久 | 久久久91精品国产一区二区三区 | 午夜精品久久久久久久99热影院 | 午夜精品久久 | 日日操天天射 | 精品一区二区久久久久久久网站 | 在线 欧美 日韩 | 日韩欧美在线观看一区二区三区 | 国产一级特黄毛片在线毛片 | 五月天激情视频 | 国产精品嫩草在线 | 天天操天天草 | 精品久久九九 | 成人动漫视频在线 | 欧美成人精品三级在线观看播放 | 久久a v视频| 在线免费观看一区二区三区 | 天天躁日日 | 久久九九免费 | 免费看久久久 | 高清不卡一区二区在线 | 天天操天天操天天 | 1024手机基地在线观看 | 国产高清视频色在线www | 人人爽人人爽人人爽人人爽 | 国产在线播放一区二区 | 日韩av黄| 日韩免费看片 | 日韩中文字幕在线看 | 色婷婷激情电影 | 伊人狠狠 | 91在线精品一区二区 | 日韩视频1 | 欧美一区二区三区在线播放 | 狠狠色丁香婷婷综合久小说久 | 久久人人爽 | 日本最新中文字幕 | 91av在| av在线播放中文字幕 | 激情伊人五月天 | 黄色一及电影 | 天天艹天天爽 | 久久人人97超碰精品888 | 国产精品18久久久久久久网站 | 亚州国产精品 | 人人澡澡人人 | 国产日本三级 | 热久久视久久精品18亚洲精品 | 九九九在线观看视频 | 国产91全国探花系列在线播放 | 欧美国产日韩一区二区三区 | 亚洲国产精品一区二区久久,亚洲午夜 | 日韩另类在线 | 狠狠干夜夜爱 | 亚洲精品字幕 | 91中文字幕在线播放 | 国产精品欧美日韩 | 国产99区| 中国一级特黄毛片大片久久 | 欧美精品久久久久久久久久久 | 国产无吗一区二区三区在线欢 | 91一区啪爱嗯打偷拍欧美 | 中文字幕乱码亚洲精品一区 | 国产一区二区午夜 | 国产精品久久久久久高潮 | 欧美日韩精品久久久 | 久久亚洲影院 | 亚洲爱爱视频 | 久久精品成人热国产成 | 亚洲天堂视频在线 | 免费日韩一区二区三区 | 韩日精品在线 | 黄网站a | 欧美激情视频久久 | 久久亚洲二区 | 国内精品在线一区 | av一区二区三区在线播放 | 欧美日韩一区二区三区免费视频 | 天天综合网天天综合色 | 亚洲综合色视频 | 伊人久久精品久久亚洲一区 | 国产亚洲精品久久久久久网站 | 在线观看中文字幕视频 | 日韩专区在线观看 | 亚洲精品日韩av | 国产精品手机在线播放 | 成人网中文字幕 | www五月| 99热在线国产精品 | 一区二区三区日韩视频在线观看 | 国产免费国产 | 日韩黄色影院 | 播五月综合 | 国产情侣一区 | 国产精品99久久久久久小说 | 夜夜夜 | 免费午夜在线视频 | 国产一区二区在线免费播放 | 精品国产伦一区二区三区观看说明 | 91久久国产自产拍夜夜嗨 | 在线国产不卡 | 日韩欧美精品在线观看视频 | 色com | 亚洲 欧美变态 另类 综合 | 国产麻豆精品久久一二三 | 一区二区三区免费在线观看视频 | 天天插天天干 | 久久精品国产精品亚洲精品 | 国产日产精品一区二区三区四区的观看方式 | 超碰国产人人 | 日日夜夜精品 | 欧美一区二区三区在线看 | 国产精品理论片 | 久久电影国产免费久久电影 | 毛片视频网址 | 免费视频一级片 | 在线导航福利 | 国产免费看| www.久久视频| 爱爱av网站 | 超碰人人av| 国产一线二线三线性视频 | 97人人爽 | 欧美 亚洲 另类 激情 另类 | 色狠狠干 | 亚洲日本va午夜在线电影 | 免费观看xxxx9999片 | 久久久久久黄色 | 99九九视频 | 国产亚洲日 | 欧美一级专区免费大片 | 亚洲免费永久精品国产 | 天天艹日日干 | 国产视频一区二区在线观看 | 欧美日韩一级久久久久久免费看 | 中文字幕久久久精品 | 欧美精品二区 | 亚洲精品免费在线观看 | 欧美在线一二 | 日韩av区| 激情久久小说 | 日韩精品在线观看视频 | 日韩欧美视频一区二区三区 | 欧美一级专区免费大片 | 久久免费视频1 | 精品中文字幕在线观看 | 天天干天天操天天拍 | 免费视频一区二区 | 国产999视频 | 一区精品在线 | 久久久久9999亚洲精品 | 91香蕉视频黄色 | 色小说av | 亚洲精品字幕 | 亚洲精品电影在线 | 久久久久国产成人免费精品免费 | 国产成人亚洲在线观看 | 亚洲成人高清在线 | 久久免费视频8 | 9999激情 | 中日韩在线视频 | 国产一级精品绿帽视频 | 超级碰碰免费视频 | 日精品| 精品二区视频 | 91免费在线看片 | 久久免费视频8 | 日韩av中文在线 | 欧美一区二区精美视频 | 97国产精品久久 | 久久国产高清 | 久久精品1区2区 | 久久草草影视免费网 | 国产123区在线观看 国产精品麻豆91 | 一个色综合网站 | 久久久久女人精品毛片九一 | 能在线看的av | 久久不射电影网 | 国产色影院 | 久久久久久久久免费视频 | 欧美日韩国产网站 | 久久精品视频在线 | 久久久久久久久久久久影院 | 国产午夜麻豆影院在线观看 | 天堂av在线免费观看 | 国产精品免费视频久久久 | 日本在线视频一区二区三区 | 在线视频中文字幕一区 | 精品在线一区二区三区 | 国产日韩欧美网站 | 深夜免费福利 | 日韩av影片在线观看 | 超碰公开97| 国产精品 中文在线 | 日韩精品一区二区三区免费观看视频 | 亚洲精品在线视频网站 | 在线播放 亚洲 | 午夜黄色大片 | 久久999精品| 一区二区三区四区久久 | av在线播放国产 | 国产亚洲精品久久久久久电影 | 69av视频在线 | 国产日韩在线观看一区 | 国产精品美女www爽爽爽视频 | 亚洲视频1 | 日韩激情在线视频 | 欧美91精品久久久久国产性生爱 | 在线观看日本高清mv视频 | 91日韩精品视频 | 成人黄大片视频在线观看 | 96久久| 91c网站色版视频 | 欧美色图另类 | 精品亚洲视频在线 | 四虎成人免费观看 | 91中文字幕网 | 91片在线观看 | 久久久久久中文字幕 | 国产98色在线 | 日韩 | 免费观看第二部31集 | 99久久影视 | 欧美视频二区 | 天堂网av在线| 精品久久久久久久久久 | 国内综合精品午夜久久资源 | 国产精品一区二区久久精品爱涩 | 国产小视频在线免费观看 | 久久国产午夜精品理论片最新版本 | 成人手机在线视频 | 色综合久久88色综合天天6 | 日韩中文字幕一区 | 日韩美视频 | 久久久999| 日韩在线看片 | 久久精品视频在线免费观看 | 天天色天天射天天操 | 亚洲蜜桃在线 | 9ⅰ精品久久久久久久久中文字幕 | 在线之家免费在线观看电影 | 久久久久在线视频 | 中文字幕在线一二 | 久久久久高清 | 欧美日韩视频在线一区 | www.久久色 | 久草五月| 综合色爱| 久久精品视频在线播放 | 97超碰中文 | 精品一区中文字幕 | 免费电影一区二区三区 | 麻豆国产精品视频 | 在线一二三区 | 免费观看丰满少妇做爰 | 国产在线播放一区二区 | 中文字幕在线观看亚洲 | 久草在线最新免费 | 国产精品 国产精品 | 在线 日韩 av| 久久99国产精品二区护士 | 国产福利91精品一区 | 亚洲一级理论片 | 久艹在线播放 | 国产精品 中文在线 | 久久久久网址 | 国产区在线 | 成人性生交大片免费观看网站 | 亚洲激情婷婷 | 91黄色在线看 | 国产精品久久一 | 狠狠干天天 | 免费日韩电影 | 日韩av高清在线观看 | 五月天com| 天天草综合网 | 九九日韩 | 久久高清av | 区一区二区三区中文字幕 | 毛片888| 色多多视频在线 | 免费看黄的视频 | 成人中文字幕+乱码+中文字幕 | 国产伦理久久精品久久久久_ | 麻豆一区二区三区视频 | 国产一区二区视频在线 | 超碰人人做 | 九色免费视频 | 激情在线网站 | 最新国产在线 | 日韩精品中文字幕一区二区 | 日本三级香港三级人妇99 | 高清av网 | 波多野结衣一区二区三区中文字幕 | 午夜美女福利 | 欧美有色 | 日韩精品一区二区三区视频播放 | 国产精品com | 午夜视频在线观看网站 | av观看免费在线 | 久久免费精品国产 | 国产成人久久77777精品 | 亚洲日本va在线观看 | 国产精品麻豆三级一区视频 | 一级一片免费观看 | 99免在线观看免费视频高清 | www.黄色片网站 | 成人在线视频观看 | 91成人精品一区在线播放 | 天天干天天拍 | 99爱视频在线观看 | 欧美午夜a | 日本高清久久久 | 日日色综合 | 国产成人久久精品一区二区三区 | 99精品久久久久 | 五月婷婷视频在线观看 | 一区二区三区在线免费观看视频 | 一级黄色片在线免费看 | 国产精品美女www爽爽爽视频 | 97av在线视频免费播放 | 五月天婷亚洲天综合网精品偷 | 亚洲国产精品成人va在线观看 | 国产精品完整版 | 久草精品资源 | 天天av综合网 | 毛片一区二区 | 国产精品久久久久久久久久三级 | 99亚洲视频 | www色综合 | 国产无套一区二区三区久久 | 中文在线中文资源 | 国产精品岛国久久久久久久久红粉 | 国产视频每日更新 | 国产精品久久久久aaaa九色 | 免费电影一区二区三区 | 国产亚洲精品久久网站 | 国产精品成人久久久久 | 亚洲综合在线五月天 | 国产视频2 | 深夜免费小视频 | 美女视频久久久 | .国产精品成人自产拍在线观看6 | 国产成人精品av久久 | 丁香六月婷婷开心婷婷网 | 四虎在线观看网址 | 色婷婷综合久色 | 久草视频99| 91在线播放视频 | 黄色av成人在线 | 国产一级片免费播放 | 人人精久 | 六月天综合网 | 成人a在线观看高清电影 | 玖玖国产精品视频 | 91人人在线| 成人在线超碰 | 九九精品久久久 | 五月激情天 | 久久www免费视频 | 久久国产精品久久精品国产演员表 | 欧美视频xxx | 日日爽天天爽 | 亚洲 欧美 综合 在线 精品 | 国产精品午夜免费福利视频 | 99视频在线| 色综合久久久久综合体桃花网 | 久久久久久毛片精品免费不卡 | 在线观看黄色大片 | 日韩欧美电影 | 成人在线视频论坛 | 亚洲91中文字幕无线码三区 | 亚洲欧洲中文日韩久久av乱码 | 亚洲国产成人久久综合 | 高清在线一区二区 | 国产精品网红直播 | 狠狠色丁香久久婷婷综 | 在线观看黄色的网站 | 国产精品久久99精品毛片三a | 久草在线最新免费 | 日韩在线小视频 | 国产91免费观看 | 成人观看视频 | 97成人啪啪网 | 中文字幕九九 | 午夜精品久久久久久99热明星 | 黄色国产高清 | 九九九视频精品 | 一区二区三区av在线 | 久久久久久久久影院 | 少妇高潮冒白浆 | 国产一级淫片免费看 | 五月天免费网站 | 日韩成人高清在线 | 高清有码中文字幕 | 亚洲精品在线视频 | 香蕉久久久久久久 | 狠狠躁日日躁狂躁夜夜躁av | 99久久99视频 | 欧美极品xxxx| 五月婷av | 日韩最新理论电影 | 精品国产一区二区三区四区在线观看 | 国产资源av| 探花国产在线 | 国产一区二区影院 | 国产精品自在线拍国产 | 天天射天 | 又黄又爽免费视频 | 精品视频免费在线 | 国产精品99久久久久久宅男 | 在线观看亚洲精品 | av在线小说 | 99热这里有精品 | 一区二区三区免费在线观看视频 | 中文字幕av最新 | 久久福利在线 | 97精品视频在线播放 | 国产精品porn | japanesexxx乱女另类 | 99热日本| 91丨九色丨蝌蚪丨对白 | 久久久国产精品麻豆 | 亚洲视频一区二区三区在线观看 | 欧美电影黄色 | 久久99精品久久久久久 | 久久人操 | 在线免费色视频 | 免费在线电影网址大全 | 91爱爱电影 | 国产手机精品视频 | 国产精品99在线观看 | 91尤物国产尤物福利在线播放 | 久草免费福利在线观看 | 色噜噜狠狠狠狠色综合久不 | 黄色av电影在线观看 | 成人欧美一区二区三区在线观看 | 精品国产一区二区三区久久久蜜月 | 粉嫩av一区二区三区四区在线观看 | 日韩一区二区三 | 亚洲日本激情 | 色综合天天天天做夜夜夜夜做 | 视频91在线 | 国产一级黄色免费看 | 欧美精彩视频在线观看 | 精品免费观看视频 | 91免费网址| 91网在线| 天天色天天射天天综合网 | 久久久精品国产一区二区三区 | 97电影在线观看 | 亚洲国产三级在线观看 | 久久av网址| 人人看97 | 国产高清在线观看 | 中文字幕观看av | 亚洲欧美综合精品久久成人 | 亚洲午夜剧场 | 麻豆精品91| 成人免费观看完整版电影 | 久久免费精品 | 国产青春久久久国产毛片 | 免费在线观看不卡av | 亚洲aⅴ在线观看 | 在线日韩精品视频 | 欧美午夜a | 99久久精品午夜一区二区小说 | 亚洲日韩中文字幕 | 欧美91精品 | 日韩免费二区 | 97品白浆高清久久久久久 | 欧美巨大| 西西www4444大胆在线 | 片网址| 日本在线视频网址 | 午夜精品久久久久久99热明星 | 国产精品三级视频 | 激情av网址 | 欧美嫩草影院 | 色久综合 | 久久久免费观看完整版 | 日日干夜夜爱 | 久久精品99视频 | 欧美精品二区 | 天天鲁天天干天天射 | 97香蕉久久超级碰碰高清版 | 在线视频观看你懂的 | 午夜精品久久久久久久久久久久久久 | 亚洲国产美女久久久久 | 国内精品久久久久久 | 国产一区二区高清不卡 | 久久综合久久综合久久综合 | 在线看v片 | 日韩午夜精品福利 | 美女视频黄免费网站 | 日韩无在线| 国产精品成人免费精品自在线观看 | 久草免费在线视频 | 特级黄色片免费看 | 成人影片在线播放 | 黄色的视频网站 | 精品欧美在线视频 | 国产精品自拍av | 亚洲精品综合欧美二区变态 | 中文字幕观看av | 色 免费观看| 99麻豆久久久国产精品免费 | 天天操天天爽天天干 | 国产h在线播放 | 91天天操 | 久久精品79国产精品 | 亚洲经典精品 | 在线观看的av网站 | 99久久精品一区二区成人 | 国产精品久久久久久a | 日韩一区二区三区免费视频 | 一本一本久久aa综合精品 | 91福利视频免费 | 国内外成人免费在线视频 | 在线观看免费视频你懂的 | 五月婷婷色综合 | 国内视频一区二区 | 天堂av观看 | 亚洲精品国产精品国自产观看 | 欧美精品久久久 | 午夜少妇 | 九九欧美视频 | 极品久久久久 | 日本精品久久久久中文字幕 | 四虎影视精品 | 欧美一级高清片 | 亚洲成av | 日韩激情视频在线 | 欧美最爽乱淫视频播放 | 国产a视频免费观看 | 91av视频免费在线观看 | 亚洲黄色在线观看 | 日韩欧美高清在线 | 91视频91色| 91麻豆精品国产91久久久更新时间 | 日韩精品免费在线观看视频 | 亚洲成人一区 | 国产日韩精品欧美 | 日韩在线网址 | 国产精品乱码久久久久 | 天天爱天天射天天干天天 | 国产91精品欧美 | 中文字幕第一页在线 | 成人免费观看av | 91av观看 | 综合色在线观看 | 久久精品国产精品 | 中文字幕免费一区二区 | 国产精品视频专区 | 在线观看播放av | 亚洲久在线 | 伊人久久国产 | 久久免费国产视频 | 欧美日韩一区二区三区在线观看视频 | 欧美日韩国产精品一区二区三区 | 欧美精品久久久久久久久老牛影院 | 97av精品| 青青草在久久免费久久免费 | 51久久夜色精品国产麻豆 | 五月激情综合婷婷 | 国产伦精品一区二区三区照片91 | 久射网| 欧美a√大片 | 欧美日韩中文字幕综合视频 | 日日碰夜夜爽 | 五月婷婷中文网 | 久久99视频免费 | 欧美精品九九99久久 | 99草在线视频 | 中文字幕乱码一区二区 | 久久艹国产视频 | 狠狠操狠狠 | 久久九九久久九九 | 午夜精品一区二区三区在线视频 | 在线看欧美 | 国产原创在线 | 欧美成人视 | 91免费网| 91视频网址入口 | 天堂av免费观看 | 视频三区在线 | 国产精品视频区 | 欧美日韩在线电影 | www久 | 亚洲成年人在线播放 | 99久久精品无免国产免费 | 久久久受www免费人成 | 国产一级久久 | 婷婷久月| 国产日韩中文字幕 | 国产一区私人高清影院 | 日韩精品国产一区 | 久久久www成人免费精品张筱雨 | 亚洲欧美国产视频 | 人人干人人模 | 精品国产免费人成在线观看 | 久久精品久久综合 | www.色爱 | .国产精品成人自产拍在线观看6 | 91黄色免费网站 | h视频在线看 | 久久理论片 | 91综合视频在线观看 | 亚洲成色777777在线观看影院 | 97视频免费在线看 | 久久精品视频中文字幕 | 天天干天天操天天搞 | 久久久久久久久免费视频 | 久久99久久99精品免费看小说 | 亚洲五月 | 日本一区二区三区免费观看 | 婷婷在线免费视频 | 丰满少妇高潮在线观看 | 国产精品免费看久久久8精臀av | 欧美日韩综合在线观看 | 最新色站 | 中文字幕av免费 | 久久久国产精品免费 | 国产精品美女久久久久aⅴ 干干夜夜 | 国产一区在线免费观看视频 | 97免费在线观看 | 色噜噜在线观看视频 | 久久久国产精品一区二区中文 | 久久99精品热在线观看 | 日日日视频 | 国产精品一区二区三区在线免费观看 | 天天射天天干天天插 | 在线中文字幕一区二区 | 超碰人人乐 | 国色天香第二季 | 狠狠色综合网站久久久久久久 | 丰满少妇高潮在线观看 | 麻豆影视在线免费观看 | 亚洲国产精品va在线看黑人 | 中文字幕在线看 | 日本久久不卡视频 | av片在线观看免费 | 91精品系列 | 久久影院中文字幕 | 在线观看一| 久久亚洲精品国产亚洲老地址 | 精品在线观看一区二区 | 中国一级片在线 | 中文字幕在线字幕中文 | 日韩在线视频二区 | 免费av的网站| 亚洲国产成人久久综合 | 国产一区自拍视频 | 97国产一区二区 | av免费观看在线 | 国产亚洲精品久 | 91麻豆精品国产91久久久使用方法 | 亚洲精品国产综合99久久夜夜嗨 | 美国人与动物xxxx | 狠狠操狠狠干天天操 | 国产96av | 欧美日韩国产精品一区二区亚洲 | 91视频国产高清 | 精品久久久久久久 | 成人影视免费看 | 五月天六月婷婷 | 日韩av影片在线观看 | 免费午夜视频在线观看 | 日韩欧美综合精品 | 久久免费在线观看 | 免费三级网| 四虎在线视频免费观看 | 五月天免费网站 | 国产成人在线观看 | 久久久久久国产精品999 | 毛片激情永久免费 | 麻豆免费在线视频 | 349k.cc看片app | 九九精品视频在线观看 | 国产资源站| 91精品国产福利在线观看 | 国产糖心vlog在线观看 | 麻豆成人精品 | 国产小视频在线免费观看视频 | 欧美日韩一区二区三区在线观看视频 | 视频在线在亚洲 | 999成人精品 | 欧美一级日韩三级 | 国产精华国产精品 | 人操人 | 国产精品久久人 | 亚洲欧洲久久久 | 国产精品第一 | 2021av在线 | 成年人电影免费在线观看 | www国产精品com | 99在线精品视频观看 | 中文字幕 二区 | 久久免费av电影 | 天堂中文在线视频 | 免费在线观看成人小视频 | 久久久国际精品 | 久久人操| 中文字幕在线视频一区 | 久久精品黄| 免费观看一区二区三区视频 | wwwwww黄 | 99色视频| 久久免费一级片 | 激情图片区 | www.eeuss影院av撸| 99精品视频免费在线观看 | 国产在线p | 视频91在线| 色婷婷福利视频 | 国产69精品久久久久久久久久 | 日韩v欧美v日本v亚洲v国产v | 久久人人爽人人爽人人 | av一级片| 91精品婷婷国产综合久久蝌蚪 | 久久激情婷婷 | 91精品啪在线观看国产线免费 | 欧美久草网 | 国产精品一区二区久久 | 久久69精品久久久久久久电影好 | 日韩二区在线 | 女人18精品一区二区三区 | 日韩免费看的电影 | 欧美极品裸体 | 欧美激情精品久久久久久免费 | 国产亚洲精品美女 | 久久精品网站免费观看 | 色妞色视频一区二区三区四区 | 日韩天天干 | 免费一级毛毛片 | 97人人人人 | av中文字幕剧情 | 久草网视频在线观看 | 免费高清在线观看成人 | 婷婷精品| 97碰碰精品嫩模在线播放 | 国产视频久久 | 91精选在线 | 九九视频网站 | 国产精品午夜在线 | 九九免费视频 | 日韩视频在线一区 | 国产精品免费在线观看视频 | 久久亚洲在线 | 久久国色夜色精品国产 | 亚洲精品久久久久久久蜜桃 | 99久久久国产精品免费99 | 精品成人免费 | 久久精品久久精品久久39 | 中文字幕在线观看1 | 五月天视频网 | 最近中文字幕视频完整版 | 色干综合 | 欧美国产一区二区 | 97免费公开视频 | 国产乱码精品一区二区三区介绍 | 国产综合精品久久 | 亚洲aⅴ免费在线观看 | 日韩免费一区二区 | 999精品在线 | 午夜视频不卡 | 亚洲国产成人精品久久 | 久久激情电影 | 亚洲欧美日韩国产精品一区午夜 | 91精品国产91热久久久做人人 | 天天艹天天干天天 | 97视频免费在线看 | 国产精品一区二区美女视频免费看 | 黄色网址在线播放 | 欧美一区,二区 | 日日激情 | 水蜜桃亚洲一二三四在线 | 99热最新在线 | 亚洲成人av一区 | 色资源中文字幕 | 91大神一区二区三区 | 中文字幕网站视频在线 | 丁香5月婷婷 | 五月天久久狠狠 | 欧美一级性生活 | 97热视频 | 色播六月天 | av在线超碰 | 婷婷夜夜 | 久久在草| 视频一区二区精品 | 国产一级免费在线观看 | 在线免费91 | 天天干天天射天天插 | 天天色天天射综合网 | 日韩 在线 | 亚洲区另类春色综合小说 | 久久99影院 | 超碰在线成人 | 色88久久| 色97在线| 五月婷婷六月丁香在线观看 | 黄av免费 | 丁香亚洲 | 97超级碰 | 亚洲成人第一区 | 一区二区欧美激情 | 日韩av成人免费看 | 日韩专区av | 一区二区三区在线观看 | 日韩高清不卡在线 | 亚洲高清久久久 | 日日夜夜操操 | 日韩在线激情 | 日韩久久久久 | 九九在线精品视频 | 91亚·色 | 伊人亚洲综合网 | 国产一级二级三级视频 | 久久久亚洲精品 | 在线观看91网站 | 免费观看性生活大片3 | 国内精品久久久久影院优 | 91成人欧美 | 久久久久久久久久影院 | 午夜久久久久久久久久影院 | 日韩在线观看高清 | 99视频在线 | 国产午夜精品在线 | 91av视频 | 97超碰人人干 | 天天射综合网视频 | 欧美地下肉体性派对 | 日日操操| 久久综合色8888 | 国产成视频在线观看 | 国产精品精品国产色婷婷 | 人人看人人草 | 91麻豆国产福利在线观看 | 欧美一级片免费 | 日韩v欧美v日本v亚洲v国产v | 91香蕉亚洲精品 | 欧美一区在线看 | 狠狠色丁香 | 国产成人一区二区三区久久精品 | 激情欧美丁香 | 日韩视频在线观看免费 | 免费看av片网站 | www激情久久 | www国产一区| www.夜夜操.com| 日韩精品专区在线影院重磅 | 最新日韩在线观看视频 | 欧美人交a欧美精品 | 国产高清福利在线 | 日日日日| 午夜a区 | 又黄又爽又刺激 | 在线精品亚洲 | 黄色av大片 | 国产一区二区三区午夜 | 波多野结衣电影一区二区 | 久热国产视频 | 免费观看的黄色片 | 免费午夜视频在线观看 | 久草在线免 | 国产明星视频三级a三级点| 久久综合五月天婷婷伊人 | 久久久久国产一区二区 | 在线观看久 | 美女久久久久久 | 欧美成年性 | 婷婷色网站 | 国产日韩欧美在线播放 | 欧美一区在线观看视频 | 婷婷看片| 久要激情网 | 久久综合久久鬼 | 99tvdz@gmail.com | 国产精品美女久久久久久久久久久 | 久久影院中文字幕 | 91麻豆福利| 亚洲精品在线观看免费 | 麻豆视频一区二区 | 国产精品 国内视频 | 国产三级香港三韩国三级 | 九九av| 麻豆影音先锋 | 最近中文字幕 | 国产午夜麻豆影院在线观看 | 天天干.com | 久久免费电影网 | 国产福利小视频在线 | 亚洲国产午夜视频 | 东方av免费在线观看 | 黄色com| 国产色女 | 国产精品手机视频 | 超碰在线最新地址 | 国产一级三级 | 色综合久久久久综合99 | 国产成人av一区二区三区在线观看 | 色香蕉网 | av在线免费网 | 九九九九精品九九九九 | 久久成人免费视频 | 91中文字幕在线视频 | 亚洲欧美日韩在线看 | 91精品视频一区二区三区 | 国产美女视频一区 | av片一区二区| 国产精品久久久久久久久久久久久 | 久久久久免费网 | 最近高清中文字幕在线国语5 | 六月婷婷久香在线视频 | 欧美激情精品 | 精品在线观| 国产成人av电影在线观看 | a黄色| 98福利在线| 日本精品中文字幕 | 国产精品久久久久久久久久久久午夜片 | 日本中文字幕在线看 | 国产又粗又猛又色又黄视频 | 国产高清视频免费观看 | 综合网天天 | av黄色成人 | 国内精品久久久久久久久久久 | 久久精品91久久久久久再现 | 国产精品毛片一区视频播不卡 | 免费在线观看成人小视频 | 久久免费精品一区二区三区 | 97在线看 | 亚洲人成人在线 | 四虎影院在线观看av | 天天躁日日躁狠狠躁av中文 | 99在线免费观看 | av在线最新 | 色婷婷成人网 | 亚洲国产美女久久久久 | 精品伦理一区二区三区 | 在线观看亚洲国产精品 | 日韩欧美精品在线观看视频 | 97国产在线播放 | www.久久成人 | 九九视频精品在线 | 欧美91视频 | 黄色大片中国 | av在线a | 午夜视频亚洲 | 深夜免费福利视频 | 中文字幕高清在线 | 久久久久久国产精品 | 成人免费色 | 久久婷亚洲五月一区天天躁 | 超碰免费97 | 日本99热| 六月婷色 | 九九久久精品 | 成人免费在线视频 | 欧美日韩精品免费观看视频 | 婷婷丁香狠狠爱 | 97中文字幕 | 麻豆免费视频观看 | 久久国产片 | 国产成人亚洲在线观看 | 五月婷婷激情综合 | 一区二区网 | 在线免费av网 | 欧洲精品亚洲精品 | 中文字幕免费在线 | 亚洲精品国产成人 | 国内免费久久久久久久久久久 | 天天干天天想 | 久久久久久久久久久久久国产精品 | 啪啪免费观看网站 | 国产精品精品国产 | 国产精品国内免费一区二区三区 | 久久精品视频网站 | 999久久久欧美日韩黑人 | 人人干免费 | 日韩免费在线视频观看 | 亚洲日韩精品欧美一区二区 | 久久国产欧美日韩 | 成人综合日日夜夜 | 免费 在线 中文 日本 | 久久高清av|