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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

mybatis返回null_面试官:你分析过mybatis工作原理吗?

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis返回null_面试官:你分析过mybatis工作原理吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mybatis工作原理也是面試的一大考點,必須要對其非常清晰,這樣才能懟回去。本文建立在Spring+SpringMVC+Mybatis整合的項目之上。

我將其工作原理分為六個部分:

  • 讀取核心配置文件并返回InputStream流對象。

  • 根據InputStream流對象解析出Configuration對象,然后創建SqlSessionFactory工廠對象

  • 根據一系列屬性從SqlSessionFactory工廠中創建SqlSession

  • 從SqlSession中調用Executor執行數據庫操作&&生成具體SQL指令

  • 對執行結果進行二次封裝

  • 提交與事務

  • 先給大家看看我的實體類:

    /**
    ?*?圖書實體
    ?*/
    public?class?Book?{

    ????private?long?bookId;//?圖書ID

    ????private?String?name;//?圖書名稱

    ????private?int?number;//?館藏數量

    ????????getter?and?setter?...
    }

    1. 讀取核心配置文件

    1.1 配置文件mybatis-config.xml

    <?xml ?version="1.0"?encoding="UTF-8"??>
    configuration
    ??PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
    ??"http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    ????<environments?default="development">
    ????????<environment?id="development">
    ????????????<transactionManager?type="JDBC"/>
    ????????????<dataSource?type="POOLED">
    ????????????????<property?name="driver"?value="com.mysql.jdbc.Driver"/>
    ????????????????<property?name="url"?value="jdbc:mysql://xxx.xxx:3306/ssm"?/>
    ????????????????<property?name="username"?value="root"/>
    ????????????????<property?name="password"?value="root"/>
    ????????????dataSource>
    ????????environment>
    ????environments>
    ????????<mappers>
    ????????<mapper?resource="BookMapper.xml"/>
    ????mappers>
    configuration>

    當然,還有很多可以在XML 文件中進行配置,上面的示例指出的則是最關鍵的部分。要注意 XML 頭部的聲明,用來驗證 XML 文檔正確性。environment 元素體中包含了事務管理和連接池的配置。mappers 元素則是包含一組 mapper 映射器(這些 mapper 的 XML 文件包含了 SQL 代碼和映射定義信息)。

    1.2 BookMapper.xml

    <?xml ?version="1.0"?encoding="UTF-8"?>
    mapper
    ????PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"
    ????"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper?namespace="Book">
    ????
    ????<insert?id="insert"?>
    ????????insert?into?book?(name,number)?values?(#{name},#{number})
    ????insert>
    mapper>

    就是一個普通的mapper.xml文件。

    1.3 Main方法

    從 XML 文件中構建 SqlSessionFactory 的實例非常簡單,建議使用類路徑下的資源文件進行配置。但是也可以使用任意的輸入流(InputStream)實例,包括字符串形式的文件路徑或者 file:// 的 URL 形式的文件路徑來配置。

    MyBatis 包含一個名叫 Resources 的工具類,它包含一些實用方法,可使從 classpath 或其他位置加載資源文件更加容易。

    public?class?Main?{
    ????public?static?void?main(String[]?args)?throws?IOException?{
    ????????//?創建一個book對象
    ????????Book?book?=?new?Book();
    ????????book.setBookId(1006);
    ????????book.setName("Easy?Coding");
    ????????book.setNumber(110);
    ????????//?加載配置文件?并構建SqlSessionFactory對象
    ????????String?resource?=?"mybatis-config.xml";
    ????????InputStream?inputStream?=?Resources.getResourceAsStream(resource);
    ????????SqlSessionFactory?factory?=?new?SqlSessionFactoryBuilder().build(inputStream);
    ????????//?從SqlSessionFactory對象中獲取?SqlSession對象
    ????????SqlSession?sqlSession?=?factory.openSession();
    ????????//?執行操作
    ????????sqlSession.insert("insert",?book);
    ????????//?提交操作
    ????????sqlSession.commit();
    ????????//?關閉SqlSession
    ????????sqlSession.close();
    ????}
    }

    這個代碼是根據Mybatis官方提供的一個不使用 XML 構建 SqlSessionFactory的一個Demo改編的。

    注意:是官方給的一個不使用 XML 構建 SqlSessionFactory的例子,那么我們就從這個例子中查找入口來分析。

    2. 根據配置文件生成SqlSessionFactory工廠對象

    2.1 Resources.getResourceAsStream(resource);源碼分析

    Resources是mybatis提供的一個加載資源文件的工具類。

    我們只看getResourceAsStream方法:

    public?static?InputStream?getResourceAsStream(String?resource)?throws?IOException?{
    ????return?getResourceAsStream((ClassLoader)null,?resource);
    }

    getResourceAsStream調用下面的方法:

    public?static?InputStream?getResourceAsStream(ClassLoader?loader,?String?resource)?throws?IOException?{
    ????InputStream?in?=?classLoaderWrapper.getResourceAsStream(resource,?loader);
    ????if?(in?==?null)?{
    ????????throw?new?IOException("Could?not?find?resource?"?+?resource);
    ????}?else?{
    ????????return?in;
    ????}
    }

    獲取到自身的ClassLoader對象,然后交給ClassLoader(lang包下的)來加載:

    InputStream?getResourceAsStream(String?resource,?ClassLoader[]?classLoader)?{
    ????ClassLoader[]?arr$?=?classLoader;
    ????int?len$?=?classLoader.length;

    ????for(int?i$?=?0;?i$?????????ClassLoader?cl?=?arr$[i$];
    ????????if?(null?!=?cl)?{
    ????????????InputStream?returnValue?=?cl.getResourceAsStream(resource);
    ????????????if?(null?==?returnValue)?{
    ????????????????returnValue?=?cl.getResourceAsStream("/"?+?resource);
    ????????????}

    ????????????if?(null?!=?returnValue)?{
    ????????????????return?returnValue;
    ????????????}
    ????????}
    ????}

    值的注意的是,它返回了一個InputStream對象。

    2.2 new SqlSessionFactoryBuilder().build(inputStream);源碼分析

    public?SqlSessionFactoryBuilder()?{
    }

    所以new SqlSessionFactoryBuilder()只是創建一個對象實例,而沒有對象返回(建造者模式),對象的返回交給build()方法。

    public?SqlSessionFactory?build(InputStream?inputStream)?{
    ????return?this.build((InputStream)inputStream,?(String)null,?(Properties)null);
    }

    這里要傳入一個inputStream對象,就是將我們上一步獲取到的InputStream對象傳入。

    public?SqlSessionFactory?build(InputStream?inputStream,?String?environment,?Properties?properties)?{
    ????SqlSessionFactory?var5;
    ????try?{
    ????????//?進行XML配置文件的解析
    ????????XMLConfigBuilder?parser?=?new?XMLConfigBuilder(inputStream,?environment,?properties);
    ????????var5?=?this.build(parser.parse());
    ????}?catch?(Exception?var14)?{
    ????????throw?ExceptionFactory.wrapException("Error?building?SqlSession.",?var14);
    ????}?finally?{
    ????????ErrorContext.instance().reset();

    ????????try?{
    ????????????inputStream.close();
    ????????}?catch?(IOException?var13)?{
    ????????????;
    ????????}

    ????}

    ????return?var5;
    }

    如何解析的就大概說下,通過Document對象來解析,然后返回InputStream對象,然后交給XMLConfigBuilder構造成org.apache.ibatis.session.Configuration對象,然后交給build()方法構造程SqlSessionFactory:

    public?SqlSessionFactory?build(Configuration?config)?{
    ????return?new?DefaultSqlSessionFactory(config);
    }
    public?DefaultSqlSessionFactory(Configuration?configuration)?{
    ????this.configuration?=?configuration;
    }

    3. 創建SqlSession

    SqlSession 完全包含了面向數據庫執行 SQL 命令所需的所有方法。你可以通過 SqlSession 實例來直接執行已映射的 SQL 語句。

    public?SqlSession?openSession()?{
    ????return?this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(),?(TransactionIsolationLevel)null,?false);
    }

    調用自身的openSessionFromDataSource方法:

  • getDefaultExecutorType()默認是SIMPLE。

  • 注意TX等級是 Null, autoCommit是false。

  • private?SqlSession?openSessionFromDataSource(ExecutorType?execType,?TransactionIsolationLevel?level,?boolean?autoCommit)?{
    ????Transaction?tx?=?null;

    ????DefaultSqlSession?var8;
    ????try?{
    ????????Environment?environment?=?this.configuration.getEnvironment();
    ????????//?根據Configuration的Environment屬性來創建事務工廠
    ????????TransactionFactory?transactionFactory?=?this.getTransactionFactoryFromEnvironment(environment);
    ????????//?從事務工廠中創建事務,默認等級為null,autoCommit=false
    ????????tx?=?transactionFactory.newTransaction(environment.getDataSource(),?level,?autoCommit);
    ????????//?創建執行器
    ????????Executor?executor?=?this.configuration.newExecutor(tx,?execType);
    ????????//?根據執行器創建返回對象?SqlSession
    ????????var8?=?new?DefaultSqlSession(this.configuration,?executor,?autoCommit);
    ????}?catch?(Exception?var12)?{
    ????????this.closeTransaction(tx);
    ????????throw?ExceptionFactory.wrapException("Error?opening?session.??Cause:?"?+?var12,?var12);
    ????}?finally?{
    ????????ErrorContext.instance().reset();
    ????}
    ????return?var8;
    }

    構建步驟:Environment>>TransactionFactory+autoCommit+tx-level>>Transaction+ExecType>>Executor+Configuration+autoCommit>>SqlSession

    其中,Environment是Configuration中的屬性。

    4. 調用Executor執行數據庫操作&&生成具體SQL指令

    在拿到SqlSession對象后,我們調用它的insert方法。

    public?int?insert(String?statement,?Object?parameter)?{
    ????return?this.update(statement,?parameter);
    }

    它調用了自身的update(statement, parameter)方法:

    public?int?update(String?statement,?Object?parameter)?{
    ????int?var4;
    ????try?{
    ????????this.dirty?=?true;
    ????????MappedStatement?ms?=?this.configuration.getMappedStatement(statement);
    ????????//?wrapCollection(parameter)判斷?param對象是否是集合
    ????????var4?=?this.executor.update(ms,?this.wrapCollection(parameter));
    ????}?catch?(Exception?var8)?{
    ????????throw?ExceptionFactory.wrapException("Error?updating?database.??Cause:?"?+?var8,?var8);
    ????}?finally?{
    ????????ErrorContext.instance().reset();
    ????}

    ????return?var4;
    }

    mappedStatements就是我們平時說的sql映射對象.

    源碼如下:protected final Map mappedStatements;

    可見它是一個Map集合,在我們加載xml配置的時候,mapping.xml的namespace和id信息就會存放為mappedStatements的key,對應的,sql語句就是對應的value.

    然后調用BaseExecutor中的update方法:

    public?int?update(MappedStatement?ms,?Object?parameter)?throws?SQLException?{
    ????ErrorContext.instance().resource(ms.getResource()).activity("executing?an?update").object(ms.getId());
    ????if?(this.closed)?{
    ????????throw?new?ExecutorException("Executor?was?closed.");
    ????}?else?{
    ????????this.clearLocalCache();
    ????????//?真正做執行操作的方法
    ????????return?this.doUpdate(ms,?parameter);
    ????}
    }

    doUpdate才是真正做執行操作的方法:

    public?int?doUpdate(MappedStatement?ms,?Object?parameter)?throws?SQLException?{
    ????Statement?stmt?=?null;

    ????int?var6;
    ????try?{
    ????????Configuration?configuration?=?ms.getConfiguration();
    ????????//?創建StatementHandler對象,從而創建Statement對象
    ????????StatementHandler?handler?=?configuration.newStatementHandler(this,?ms,?parameter,?RowBounds.DEFAULT,?(ResultHandler)null,?(BoundSql)null);
    ????????//?將sql語句和參數綁定并生成SQL指令
    ????????stmt?=?this.prepareStatement(handler,?ms.getStatementLog());
    ????????var6?=?handler.update(stmt);
    ????}?finally?{
    ????????this.closeStatement(stmt);
    ????}

    ????return?var6;
    }

    先來看看prepareStatement方法,看看mybatis是如何將sql拼接合成的:

    private?Statement?prepareStatement(StatementHandler?handler,?Log?statementLog)?throws?SQLException?{
    ????Connection?connection?=?this.getConnection(statementLog);
    ????//?準備Statement
    ????Statement?stmt?=?handler.prepare(connection);
    ????//?設置SQL查詢中的參數值
    ????handler.parameterize(stmt);
    ????return?stmt;
    }

    來看看parameterize方法:

    public?void?parameterize(Statement?statement)?throws?SQLException?{
    ????this.parameterHandler.setParameters((PreparedStatement)statement);
    }

    這里把statement轉換程PreparedStatement對象,它比Statement更快更安全。
    這都是我們在JDBC中熟用的對象,就不做介紹了,所以也能看出來Mybatis是對JDBC的封裝。

    從ParameterMapping中讀取參數值和類型,然后設置到SQL語句中:

    public?void?setParameters(PreparedStatement?ps)?{
    ????ErrorContext.instance().activity("setting?parameters").object(this.mappedStatement.getParameterMap().getId());
    ????List?parameterMappings?=?this.boundSql.getParameterMappings();if?(parameterMappings?!=?null)?{for(int?i?=?0;?i?????????????ParameterMapping?parameterMapping?=?(ParameterMapping)parameterMappings.get(i);if?(parameterMapping.getMode()?!=?ParameterMode.OUT)?{
    ????????????????String?propertyName?=?parameterMapping.getProperty();
    ????????????????Object?value;if?(this.boundSql.hasAdditionalParameter(propertyName))?{value?=?this.boundSql.getAdditionalParameter(propertyName);
    ????????????????}?else?if?(this.parameterObject?==?null)?{value?=?null;
    ????????????????}?else?if?(this.typeHandlerRegistry.hasTypeHandler(this.parameterObject.getClass()))?{value?=?this.parameterObject;
    ????????????????}?else?{
    ????????????????????MetaObject?metaObject?=?this.configuration.newMetaObject(this.parameterObject);value?=?metaObject.getValue(propertyName);
    ????????????????}
    ????????????????TypeHandler?typeHandler?=?parameterMapping.getTypeHandler();
    ????????????????JdbcType?jdbcType?=?parameterMapping.getJdbcType();if?(value?==?null?&&?jdbcType?==?null)?{
    ????????????????????jdbcType?=?this.configuration.getJdbcTypeForNull();
    ????????????????}try?{
    ????????????????????typeHandler.setParameter(ps,?i?+?1,?value,?jdbcType);
    ????????????????}?catch?(TypeException?var10)?{throw?new?TypeException("Could?not?set?parameters?for?mapping:?"?+?parameterMapping?+?".?Cause:?"?+?var10,?var10);
    ????????????????}?catch?(SQLException?var11)?{throw?new?TypeException("Could?not?set?parameters?for?mapping:?"?+?parameterMapping?+?".?Cause:?"?+?var11,?var11);
    ????????????????}
    ????????????}
    ????????}
    ????}
    }

    5. 對查詢結果二次封裝

    在doUpdate方法中,解析生成完新的SQL后,然后執行var6 = handler.update(stmt);我們來看看它的源碼。

    public?int?update(Statement?statement)?throws?SQLException?{
    ????PreparedStatement?ps?=?(PreparedStatement)statement;
    ?????//?執行sql
    ????ps.execute();
    ????//?獲取返回值
    ????int?rows?=?ps.getUpdateCount();
    ????Object?parameterObject?=?this.boundSql.getParameterObject();
    ????KeyGenerator?keyGenerator?=?this.mappedStatement.getKeyGenerator();
    ????keyGenerator.processAfter(this.executor,?this.mappedStatement,?ps,?parameterObject);
    ????return?rows;
    }

    因為我們是插入操作,返回的是一個int類型的值,所以這里mybatis給我們直接返回int。

    如果是query操作,返回的是一個ResultSet,mybatis將查詢結果包裝程ResultSetWrapper類型,然后一步步對應java類型賦值等…有興趣的可以自己去看看。

    6. 提交與事務

    最后,來看看commit()方法的源碼。

    public?void?commit()?{
    ????this.commit(false);
    }

    調用其對象本身的commit()方法:

    public?void?commit(boolean?force)?{
    ????try?{
    ????????//?是否提交(判斷是提交還是回滾)
    ????????this.executor.commit(this.isCommitOrRollbackRequired(force));
    ????????this.dirty?=?false;
    ????}?catch?(Exception?var6)?{
    ????????throw?ExceptionFactory.wrapException("Error?committing?transaction.??Cause:?"?+?var6,?var6);
    ????}?finally?{
    ????????ErrorContext.instance().reset();
    ????}
    }

    如果dirty是false,則進行回滾;如果是true,則正常提交。

    private?boolean?isCommitOrRollbackRequired(boolean?force)?{
    ????return?!this.autoCommit?&&?this.dirty?||?force;
    }

    調用CachingExecutor的commit方法:

    public?void?commit(boolean?required)?throws?SQLException?{
    ????this.delegate.commit(required);
    ????this.tcm.commit();
    }

    調用BaseExecutor的commit方法:

    public?void?commit(boolean?required)?throws?SQLException?{
    ????if?(this.closed)?{
    ????????throw?new?ExecutorException("Cannot?commit,?transaction?is?already?closed");
    ????}?else?{
    ????????this.clearLocalCache();
    ????????this.flushStatements();
    ????????if?(required)?{
    ????????????this.transaction.commit();
    ????????}

    ????}
    }

    最后調用JDBCTransaction的commit方法:

    public?void?commit()?throws?SQLException?{
    ????if?(this.connection?!=?null?&&?!this.connection.getAutoCommit())?{
    ????????if?(log.isDebugEnabled())?{
    ????????????log.debug("Committing?JDBC?Connection?["?+?this.connection?+?"]");
    ????????}
    ????????//?提交連接
    ????????this.connection.commit();
    ????}
    }

    Demo參考文檔

    http://www.mybatis.org/mybatis-3/zh/getting-started.html

    END

    Java面試題專欄

    【20期】你知道為什么HashMap是線程不安全的嗎?

    【19期】為什么Java線程沒有Running狀態?

    【18期】Java序列化與反序列化三連問:是什么?為什么要?如何做?

    【17期】什么情況用ArrayList or LinkedList呢?

    【16期】你能談談HashMap怎樣解決hash沖突嗎

    【15期】談談這幾個常見的多線程面試題

    【14期】你能說說進程與線程的區別嗎

    【13期】談談 Redis 的過期策略

    【12期】談談項目中單點登錄的實現原理?

    【11期】分布式系統接口,如何避免表單的重復提交?

    我知道你 “在看

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

    總結

    以上是生活随笔為你收集整理的mybatis返回null_面试官:你分析过mybatis工作原理吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    成人av影院在线观看 | 99久久精品国产欧美主题曲 | 亚洲天堂网视频 | 天天干.com | 97国产在线 | 欧美精品国产综合久久 | 美女视频黄频大全免费 | 久久国产一二区 | 天天舔天天射天天操 | 亚洲一区二区天堂 | 国产一区二区在线精品 | 国产视频中文字幕在线观看 | av在线专区 | 伊人五月综合 | 婷婷综合成人 | 中文字幕永久 | 色视频 在线 | av 在线观看 | 亚洲成色 | 91色在线观看 | 国产91精品高清一区二区三区 | 美女视频是黄的免费观看 | 人人添人人澡人人澡人人人爽 | 91视视频在线直接观看在线看网页在线看 | 韩国av免费在线观看 | 国产欧美日韩精品一区二区免费 | 亚洲精品免费观看 | 91精品国自产在线观看欧美 | 色综合久久综合网 | 狠狠干天天 | 日韩电影一区二区在线 | 日韩在线短视频 | 成人全视频免费观看在线看 | 婷婷久久五月 | 黄视频网站大全 | 国产在线观看高清视频 | 中文字幕视频一区 | 日本黄色片一区二区 | 国模一区二区三区四区 | 99久国产 | 午夜国产福利视频 | 久久情爱| 日韩在观看线 | av免费看电影 | 88av视频 | 91精品久久久久久粉嫩 | 国产精品中文在线 | 日韩精品一区二区三区电影 | 欧美激精品 | av丝袜制服 | 欧美激情va永久在线播放 | 99热 精品在线 | 色噜噜日韩精品欧美一区二区 | 在线免费观看羞羞视频 | 成人wwwxxx视频| 少妇自拍av| 69中文字幕| 国产黄色观看 | 欧美日韩18 | 欧美一区二区三区四区夜夜大片 | 久草在线视频在线 | 色婷婷av一区二 | 中文字幕亚洲在线观看 | 亚洲人成精品久久久久 | 国产五月天婷婷 | 永久免费观看视频 | 射射色| 国产中文欧美日韩在线 | wwxxx日本| 国产成人精品国内自产拍免费看 | 欧美黑吊大战白妞欧美 | 天天干婷婷 | 欧美一级欧美一级 | 成人黄色大片在线免费观看 | 干狠狠| 日韩免费电影在线观看 | 欧美亚洲久久 | 久久国产精品久久精品 | 粉嫩av一区二区三区四区 | 在线不卡中文字幕播放 | 精品国产电影一区 | 4438全国亚洲精品在线观看视频 | 天天玩天天干天天操 | 中文字幕成人 | 亚洲 欧美 变态 国产 另类 | 欧美性生活免费看 | 亚洲精品久久在线 | 草免费视频 | 成人va在线观看 | 久久99亚洲精品久久 | 色小说av| 午夜国产影院 | 亚洲色图色| av免费电影在线 | 欧美二区三区91 | 九九热免费精品视频 | 久久久福利 | 91黄在线看 | 国产黄色精品在线 | 精品一二三四视频 | 国产精品免费观看国产网曝瓜 | 国产在线国偷精品产拍免费yy | 欧美日韩视频 | 97品白浆高清久久久久久 | 最新日本中文字幕 | 国产精品一区欧美 | 美女天天操 | 夜色资源网 | 亚洲精品黄色在线观看 | 中文亚洲欧美日韩 | 三三级黄色片之日韩 | 日韩小视频 | 超碰在线人人 | 国产高清无av久久 | 日韩av中文字幕在线 | 免费网站黄色 | 国产精品一区二区在线播放 | 日韩高清在线观看 | 亚洲一区免费在线 | 91精品国产91p65 | 91福利视频久久久久 | 欧美日韩一级久久久久久免费看 | 日本中文在线观看 | 麻豆视频在线免费看 | 国产人成一区二区三区影院 | 97超碰影视| 91在线免费播放视频 | 久久久伦理 | 国产高清 不卡 | 国产在线理论片 | 在线看片一区 | 一区二区视频在线看 | 视频直播国产精品 | 国产精品美女在线观看 | 97色综合| 91爱爱网址| 亚洲精区二区三区四区麻豆 | 高清不卡免费视频 | 久久久久久国产精品免费 | 亚洲欧美乱综合图片区小说区 | 久久精品香蕉 | 国产精品久久网 | 99久久精品无码一区二区毛片 | 日本精品视频在线播放 | 九九热免费观看 | 亚洲精品国久久99热 | 国产亚洲小视频 | 麻豆视频成人 | 精品美女视频 | www欧美色 | 在线观看视频亚洲 | 天天激情天天干 | 日韩在线国产 | 久久久亚洲麻豆日韩精品一区三区 | 91成人免费看片 | 亚洲成av人片 | 91九色视频网站 | 国产精品自在线 | 亚洲永久字幕 | 久久免费公开视频 | www.久久91 | 热久久这里只有精品 | 亚洲理论在线观看电影 | 精品视频成人 | 日本狠狠干| 五月婷婷综合久久 | 久精品一区 | 久久综合久久久 | 免费成人av | 黄色小网站在线 | 国产精品无av码在线观看 | 中文字幕在线免费播放 | 国产手机视频精品 | 激情久久伊人 | 免费日韩视频 | 久久久.com| 亚洲开心激情 | 麻豆传媒视频观看 | 色五月色开心色婷婷色丁香 | 国产成人av电影在线观看 | 91精品视频在线 | 在线视频一二三 | 在线免费黄 | 91精品国产自产在线观看永久 | 国产手机视频在线观看 | 91免费高清视频 | 国产精品美女久久久久久久久久久 | 毛片久久久 | 美女视频黄是免费的 | 国产精品美女久久久久久久 | 日本中文字幕在线免费观看 | 在线看毛片网站 | 91麻豆网站 | 日韩av免费观看网站 | 91aaa在线观看 | 日本中文字幕网站 | 久久久男人的天堂 | 亚洲伊人第一页 | 日韩欧美国产激情在线播放 | zzijzzij亚洲成熟少妇 | 三级视频片 | 国产va精品免费观看 | 精品国产乱码久久久久久三级人 | 婷婷爱五月天 | 91黄色免费网站 | 在线观看91网站 | 国产精品永久在线 | 一级c片 | 日韩区视频 | 中文字幕在线中文 | 人人射av | 欧美色噜噜噜 | 天天操狠狠操网站 | 美女视频免费精品 | 国产玖玖在线 | 日本精品在线 | 欧美综合色在线图区 | 天天爱天天草 | 亚洲精品视频久久 | 亚洲精品午夜久久久久久久久久久 | 久久久精品国产免费观看一区二区 | 久久婷婷色综合 | 久久精品一区二区 | 正在播放五月婷婷狠狠干 | 亚洲综合视频在线观看 | 亚洲午夜av久久乱码 | 99精品久久只有精品 | 99高清视频有精品视频 | 久久精品国产精品 | 激情五月视频 | 国产精品成人在线 | 91在线精品视频 | 日日操日日操 | 日日日视频 | 狠狠干狠狠色 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产精品成久久久久三级 | 亚洲激精日韩激精欧美精品 | 久在线| 天天综合入口 | 精品国产伦一区二区三区 | 久青草视频| 日韩精品一区二区免费 | 国产成人精品女人久久久 | 免费看毛片在线 | 亚洲人xxx | 欧美日韩免费观看一区=区三区 | 国产福利网站 | 国产在线观看免 | 色欧美88888久久久久久影院 | 欧美成人视 | 欧美在线观看小视频 | 欧美日韩免费一区二区三区 | 4hu视频 | 国产福利精品在线观看 | 午夜精品久久一牛影视 | 欧美成人中文字幕 | 国产高清中文字幕 | 五月天久久久 | 97超碰人人澡 | 亚洲精品456在线播放 | 国产片网站 | 色爽网站 | 少妇做爰k8经典 | 成人午夜电影在线播放 | 亚洲亚洲精品在线观看 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产一级电影在线 | 欧美成年性 | 国产精品一区二区吃奶在线观看 | 国产 一区二区三区 在线 | 在线之家免费在线观看电影 | 午夜电影中文字幕 | av三区在线| 精品久久久精品 | 国产一区二区在线免费观看 | 国产在线精品一区二区三区 | 国产高清免费 | 欧美乱熟臀69xxxxxx | 在线导航av| 日产乱码一二三区别在线 | 日三级在线 | 久久成人午夜视频 | 亚洲黄色小说网址 | 国产一级免费在线 | 中文字幕中文字幕在线一区 | 日韩美精品视频 | 成人资源站 | 在线视频欧美日韩 | 国产日韩精品欧美 | 国产视频一区精品 | 免费观看9x视频网站在线观看 | 免费观看性生活大片 | 国产亚洲久一区二区 | 午夜影视av | 天天骚夜夜操 | 欧美极度另类 | 久久久久久久99精品免费观看 | 在线观看一区 | 亚洲精品小视频 | 66av99精品福利视频在线 | 人人看人人做人人澡 | 国产精品久久久久久久久免费 | 国产精品久久久久毛片大屁完整版 | 国产一区二区久久精品 | 久久久久久国产一区二区三区 | 天天草综合网 | 亚洲综合在线观看视频 | 亚洲精品九九 | 国产小视频国产精品 | 日本三级久久 | 在线国产黄色 | 国产小视频免费观看 | 国产精品美女久久久 | 中文字幕一区二区三区四区视频 | 亚洲第一av在线播放 | 亚洲视频免费视频 | 日本巨乳在线 | 9ⅰ精品久久久久久久久中文字幕 | 成人毛片在线观看视频 | 久久与婷婷 | 蜜桃视频色 | 在线观看视频你懂 | 麻豆视频观看 | 成人一区二区三区在线 | 九九久久久久久久久激情 | 色婷婷福利视频 | 蜜桃久久久 | 精品一区久久 | 一区二区 久久 | 一级黄色片网站 | 天天干天天草天天爽 | 97国产在线视频 | 亚洲精品成人 | 国产黄色特级片 | 日本在线观看黄色 | 亚洲 欧美 成人 | 免费观看一级 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 久久免费资源 | 成人a视频片观看免费 | 三级黄色片在线观看 | 99 色| 国产一卡二卡在线 | 久久精品站 | 日韩一级电影网站 | 久久免费成人精品视频 | 精品视频123区在线观看 | 成人精品一区二区三区中文字幕 | 男女全黄一级一级高潮免费看 | 激情影音先锋 | 久草在线视频精品 | 国产精品嫩草影院9 | 狠狠操综合 | 国产一区电影在线观看 | 免费h漫在线观看 | 成人av影院在线观看 | 欧美日韩在线观看一区 | 福利网在线| 国产在线欧美在线 | 久草在线中文视频 | 国产亚洲欧美在线视频 | 黄色在线观看污 | 久久99热精品这里久久精品 | 国产一区在线不卡 | 黄色在线成人 | 日韩欧美电影在线 | 日韩电影精品一区 | 国产在线一卡 | 黄色亚洲免费 | 麻豆综合网 | 波多野结衣在线观看视频 | 成人va在线观看 | 欧美日韩免费网站 | 激情综合国产 | 国产在线日本 | 久久国产精品99久久人人澡 | 婷婷丁香色综合狠狠色 | 免费欧美精品 | 日日夜夜噜噜噜 | 亚洲黄色激情小说 | 久久国产精品99久久久久久进口 | 日韩影视大全 | 成人免费视频播放 | 园产精品久久久久久久7电影 | 操操爽| 成人午夜黄色影院 | 日韩精品在线看 | 91在线看黄 | 在线观看免费色 | 在线观看的a站 | 免费观看完整版无人区 | 欧美激情视频一二三区 | 97超碰人 | 日本久久精 | 91精品国自产在线观看欧美 | 99久久精品免费看国产免费软件 | 99热这里有精品 | 久久国产精品精品国产色婷婷 | 午夜精品一区二区三区在线观看 | 综合网婷婷 | 久久久网 | 国内精品久久久久久久久久清纯 | 69av免费视频| 狠狠的日| 亚洲一级理论片 | 亚洲精品999 | 99精品国产一区二区三区不卡 | 349k.cc看片app | 日韩激情久久 | 国产精品18videosex性欧美 | 91麻豆操 | 免费h漫在线观看 | 免费在线一区二区 | 国产永久免费观看 | 免费a v视频 | 中文字幕第一页在线vr | 中文字幕精 | 亚洲婷婷在线 | 81精品国产乱码久久久久久 | 精品毛片久久久久久 | 在线观影网站 | 国产原厂视频在线观看 | 9久久精品 | 免费大片黄在线 | 97国产精品免费 | 96精品视频 | 黄色av观看 | 日日日操操 | 人人爽影院 | 最新av免费在线 | 国产三级在线播放 | 韩日在线一区 | 五月天婷婷在线观看视频 | 亚洲女在线 | 激情五月婷婷激情 | 亚洲国产成人高清精品 | 日本精品视频一区二区 | 嫩模bbw搡bbbb搡bbbb | 最新午夜 | 久久av免费电影 | 中文字幕人成乱码在线观看 | av免费电影在线 | 久久精品一区八戒影视 | 欧美极品一区二区三区 | 偷拍久久久| 懂色av一区二区在线播放 | 五月天婷亚洲天综合网鲁鲁鲁 | 能在线观看的日韩av | 久久精品99精品国产香蕉 | 91成人亚洲| 天天操天天摸天天射 | 五月天国产 | 久久av一区二区三区亚洲 | 99国产情侣在线播放 | 免费69视频| 国产无套精品久久久久久 | 色无五月| 中文字幕一区二区三区久久 | 精品一区三区 | 国产成人三级在线观看 | 国产精品久久久久久久久久 | 在线观看中文字幕av | 在线观看国产麻豆 | 精品国产电影一区二区 | 欧美日韩精品区 | 狠狠色丁香婷婷综合欧美 | 久久久久久久福利 | 久久麻豆精品 | 日本中文字幕在线播放 | 国产一区二区三区在线 | 三级黄色片在线观看 | 欧美精品成人在线 | 中文字幕在线观看完整版电影 | av成人在线观看 | 一级片视频免费观看 | 成人精品一区二区三区中文字幕 | 成年人电影免费在线观看 | 久久成人精品电影 | 视频在线观看亚洲 | 色综合天天做天天爱 | 人人干人人超 | 国产在线不卡视频 | 国产成人av一区二区三区在线观看 | 国产黄色看片 | 国产在线不卡精品 | 日本高清xxxx | 久久久久区 | 免费国产在线视频 | 成年人在线免费视频观看 | 久久久久亚洲精品国产 | 天天操夜操视频 | 天天色天天色 | 欧美色图88 | 视频国产 | 日韩精品在线视频免费观看 | 日韩免费播放 | 又色又爽又黄 | www.狠狠插.com | 国精产品999国精产品视频 | 日日天天干 | av在线亚洲天堂 | 亚洲三级在线 | 欧美成人精品三级在线观看播放 | 日韩在线国产精品 | 91九色视频在线观看 | 在线中文视频 | 九九九在线观看 | 久草在线视频精品 | 色五月情 | 天天干天天干天天操 | 亚洲成av人片在线观看香蕉 | 麻豆视频在线免费看 | 18性欧美xxxⅹ性满足 | 午夜精品婷婷 | 狠狠色婷婷丁香六月 | 天天综合操 | 国产一区二区精品在线 | 99色免费视频| 日本中文字幕观看 | 欧美激情xxxx | 超碰99在线 | 久久人人添人人爽添人人88v | 91在线观看视频 | 免费黄色在线网址 | 综合久久五月天 | 开心综合网 | 亚洲国产网址 | 男女视频久久久 | 免费视频区 | av大全在线观看 | 久久这里只有精品9 | 91在线中文字幕 | 国产精品v欧美精品v日韩 | 91成人精品一区在线播放 | 久久色在线观看 | 国产一级免费在线观看 | 亚洲成人中文在线 | 一区在线电影 | 日韩在线观看视频网站 | 日韩高清精品一区二区 | 九九久| 午夜18视频在线观看 | 日本精油按摩3 | 日韩69视频| 在线影视 一区 二区 三区 | 福利在线看片 | 天天草天天干 | 成人综合婷婷国产精品久久免费 | 粉嫩av一区二区三区四区在线观看 | 国产精品去看片 | 黄色www免费 | 亚洲精品乱码久久久久v最新版 | 久久99久久99精品免费看小说 | 婷婷六月天丁香 | 亚洲精品视频偷拍 | 久久草精品 | 国产三级久久久 | 青青河边草免费直播 | 久久久久北条麻妃免费看 | 日韩高清精品免费观看 | 亚洲精品在线资源 | 婷婷国产视频 | 毛片网在线 | 三级在线视频观看 | 99精品国产99久久久久久97 | 国产精品永久免费 | 人人干人人超 | 国产无遮挡又黄又爽馒头漫画 | 免费看一级特黄a大片 | 午夜在线国产 | 午夜精品视频免费在线观看 | 久久久久欧美精品 | 日本中文字幕在线电影 | 黄av免费 | 中文字幕视频在线播放 | 看全黄大色黄大片 | 高清精品在线 | 国产美女网站在线观看 | 亚洲免费一级电影 | 国产区第一页 | 亚洲综合在线一区二区三区 | 亚洲精品国产欧美在线观看 | 国产成人精品999 | 国产专区第一页 | 欧美日韩中字 | 精品视频免费播放 | 亚洲最大免费成人网 | 免费在线观看日韩欧美 | 成人毛片在线观看 | 又污又黄的网站 | 91精品一区在线观看 | 国产999在线观看 | 98精品国产自产在线观看 | 97精品国产一二三产区 | 香蕉网站在线观看 | 国产精品久久久久久久久婷婷 | 国产日韩欧美中文 | 午夜av日韩 | 激情亚洲综合在线 | 少妇超碰在线 | 99视| 国产精品一区二区美女视频免费看 | 99精品在线看 | 免费看一级特黄a大片 | 久久国产经典 | 中文字幕欧美日韩va免费视频 | 国产这里只有精品 | 97av视频 | 九九在线视频 | 久久精品中文字幕少妇 | 在线观看免费成人av | 五月综合色婷婷 | 国产高清一级 | 日p视频在线观看 | 国产第一福利 | 91视频在线免费下载 | 亚洲一区在线看 | 人人爽人人搞 | 久久久91精品国产一区二区精品 | 18国产精品白浆在线观看免费 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲涩涩网站 | 少妇性色午夜淫片aaaze | 成人免费视频免费观看 | 色婷婷激情电影 | 亚洲精品小视频 | 性色av香蕉一区二区 | 国产精品地址 | 精品国产一区二区三区在线观看 | 美女黄久久| www.天天操 | 91av在线不卡 | 中文有码在线 | 国产美女精品久久久 | 精品一区在线看 | 黄色www在线观看 | 免费a视频 | 91桃色免费观看 | 欧美精品网站 | 人人干干人人 | 久久不卡av | 天堂成人在线 | 国产福利精品一区二区 | 91香蕉视频720p| 久久免费的精品国产v∧ | av中文字幕不卡 | 欧美日本中文字幕 | 日本中文一区二区 | 国产偷国产偷亚洲清高 | 在线va网站| 国产福利91精品 | 天天做综合网 | 337p日本欧洲亚洲大胆裸体艺术 | 人人超碰97 | 在线播放国产一区二区三区 | 天天干视频在线 | 99久久精品费精品 | 夜夜嗨av色一区二区不卡 | 久久久精品午夜 | 亚洲国产成人在线 | 粉嫩aⅴ一区二区三区 | 四虎在线免费观看视频 | av电影 一区二区 | 免费三级av | 99热国产在线观看 | 成人a级黄色片 | 中文乱幕日产无线码1区 | 韩日成人av| 亚洲综合小说电影qvod | 久久久精品国产免费观看一区二区 | 国产中文伊人 | 伊人久久电影网 | 日韩动漫免费观看高清完整版在线观看 | 欧美激情精品一区 | 激情久久久久久久久久久久久久久久 | 日本一区二区三区免费看 | 成 人 黄 色 视频免费播放 | 最新av网址在线观看 | 久久狠狠婷婷 | 久久久久久综合网天天 | 日韩三级在线 | 中文字幕乱码视频 | 91av短视频| 麻豆国产网站入口 | 97在线观视频免费观看 | 二区三区在线 | 中文字幕av一区二区三区四区 | 日本精品一区二区三区在线观看 | 欧美日韩伦理在线 | 日韩三级精品 | 亚洲最大av网 | 探花视频免费在线观看 | 成人影视片 | 中文字幕免费看 | 亚洲激情在线观看 | 久久久久久99精品 | av+在线播放在线播放 | 国产成在线观看免费视频 | 久久伊人91| 欧洲一区精品 | a久久久久 | 久久国产美女视频 | 亚洲天堂网在线播放 | 手机在线看片日韩 | 免费视频在线观看网站 | 三级毛片视频 | 亚洲日本va午夜在线影院 | 亚洲精品中文在线 | 91中文在线 | 国产精品99久久免费观看 | 国产 字幕 制服 中文 在线 | 成人久久久久久久久久 | 欧美成人在线免费观看 | 欧美日韩aaaa | 中文在线中文资源 | 在线国产一区二区三区 | 欧美激情精品一区 | 国产精品亚洲片夜色在线 | 亚洲国内在线 | 日韩 国产 | 欧美日韩高清免费 | 黄色成人91 | 欧美 日韩 视频 | 久久久99精品免费观看app | 精品在线观看一区二区三区 | 亚洲一片黄 | 欧美精品久久久久久久久久白贞 | 精品在线一区二区 | 久久久国产一区二区三区四区小说 | 欧美日韩国产精品久久 | 亚洲日韩欧美一区二区在线 | 亚洲精品国产精品国自产在线 | 综合网成人 | 国产中文字幕亚洲 | 精品一区二区影视 | 波多野结衣久久资源 | 在线视频观看91 | 97视频在线观看免费 | www.亚洲精品在线 | 天天爱天天草 | 在线观看的a站 | av黄色av | 久久综合九色 | 99精品视频观看 | 精品国产91亚洲一区二区三区www | 五月丁婷婷 | 国产一二三四在线观看视频 | 国产九九精品视频 | 国产精品一码二码三码在线 | 精品久久影院 | 久久只精品99品免费久23小说 | 成人一级黄色片 | 久久精品久久99精品久久 | a级成人毛片 | 色天天综合久久久久综合片 | 国产精品手机看片 | 亚洲黄色小说网 | 91av视频| 91av免费观看 | 丝袜美女在线观看 | 日本精品一区二区三区在线观看 | 操操操com | 日韩亚洲国产精品 | 中文字幕在线网址 | 色a综合 | 一区二区三区国 | 久久伦理| 免费97视频 | 91视频最新网址 | 国产一级免费在线 | 日本久久片 | 中文字幕一区二区三区在线观看 | 极品美女被弄高潮视频网站 | 欧美一级久久 | 亚洲香蕉视频 | 日韩高清久久 | 九七视频在线观看 | 西西www4444大胆视频 | 国产午夜在线观看视频 | 国产一级精品视频 | 国产精品麻豆果冻传媒在线播放 | 九色自拍视频 | 99久久国产免费,99久久国产免费大片 | 日韩视频中文字幕在线观看 | 最新中文字幕视频 | 久久精品视频免费 | 国产无遮挡又黄又爽在线观看 | 久草视频中文在线 | 伊人狠狠 | 91原创在线观看 | 亚洲更新最快 | 爱情影院aqdy鲁丝片二区 | 午夜男人影院 | 久久99久国产精品黄毛片入口 | av久久在线 | 亚洲日韩中文字幕在线播放 | 在线观看av免费观看 | 在线视频精品播放 | 国产小视频免费观看 | 日韩三级不卡 | 97电影手机版 | 日韩女同一区二区三区在线观看 | 91精品在线视频观看 | 亚洲免费不卡 | 国产123区在线观看 国产精品麻豆91 | 999视频精品 | 米奇四色影视 | 国产精品视频免费在线观看 | 500部大龄熟乱视频使用方法 | 三级在线国产 | 2019中文字幕网站 | 久久久av免费 | 天天操夜夜爱 | 日韩av片无码一区二区不卡电影 | 天天爽综合网 | 亚洲国产中文字幕在线观看 | 日本黄色免费播放 | 亚洲国产一二三 | 久色 网 | www.com黄| 国产九九九九九 | 国产一区 在线播放 | 精品黄色片| 99热9| 欧美了一区在线观看 | 毛片网在线播放 | 最新av网址在线 | 探花视频在线版播放免费观看 | 一区av在线播放 | av电影av在线 | 精品亚洲午夜久久久久91 | 99re6热在线精品视频 | 国产精品欧美一区二区三区不卡 | 96国产精品 | 超碰com | 一区二区三区电影大全 | 日日草夜夜操 | 欧美 日韩 成人 | 亚洲免费在线播放视频 | 天堂av在线网 | 92av视频 | 波多野结衣在线视频免费观看 | 精品久久久影院 | 国产精品免费麻豆入口 | 日韩一区二区三区在线观看 | 香蕉视频4aa | 激情小说 五月 | 亚洲欧洲精品一区二区 | 一区二区视频在线看 | 免费日韩一区二区三区 | 久久综合九色欧美综合狠狠 | av黄色影院 | 日韩高清毛片 | 久久久久免费精品视频 | 亚洲精品电影在线 | 精品一区二区三区久久久 | 97在线观看免费观看 | 在线免费观看成人 | 亚洲黄色片在线 | 国产精品成人免费 | 国产精品免费久久久 | 国产精品白浆视频 | 天天操天天射天天爱 | 香蕉视频在线免费看 | 天天操天天色综合 | 最新日韩在线 | 欧美精品久久久久久久 | 免费三级网 | 亚洲欧美成人在线 | 国产日韩视频在线播放 | 日韩美在线 | 8090yy亚洲精品久久 | 日本在线免费看 | 国产原创av在线 | 91九色蝌蚪视频在线 | 性色av免费在线观看 | 麻豆传媒在线视频 | 国产最新视频在线观看 | av在线网站免费观看 | 久久免费国产电影 | 国产精品美女久久久久久免费 | 九九免费在线观看视频 | 亚洲va欧美va人人爽春色影视 | 成人在线观看av | 国产一在线精品一区在线观看 | avav片| 免费看黄在线网站 | 深夜福利视频一区二区 | 日韩xxxbbb| 精品伦理一区二区三区 | 国产成人免费在线观看 | 国产一线二线三线性视频 | 日韩欧美高清一区二区 | 丁香激情婷婷 | 日韩一区二区免费视频 | 奇米影视在线99精品 | 国产精品一二 | 久久你懂的| 性色av香蕉一区二区 | 一区二区视频在线看 | 少妇bbb搡bbbb搡bbbb | 97免费在线观看视频 | 天天做天天爱天天综合网 | 久草爱 | 日韩欧美综合视频 | 激情视频免费在线 | 精品国产乱码一区二区三区在线 | 天天色 天天 | 综合中文字幕 | 超碰在线官网 | 在线免费高清一区二区三区 | 精品久久久久久久久久久久久久久久久久 | 大片网站久久 | 天天操天天射天天操 | 午夜三级福利 | 二区三区av | 在线观看中文字幕av | 亚洲日本韩国一区二区 | 国产精品精品久久久久久 | 亚洲精品中文字幕视频 | 欧美91片 | 国产小视频你懂的 | 日韩乱码中文字幕 | 亚洲精品xxx | 国产99在线 | 免费在线看成人av | 日本超碰在线 | 国产精品一区二区三区免费看 | 黄色软件大全网站 | 天天天天爽 | 激情综合网五月 | 国产69久久精品成人看 | 国产成人一区二区三区在线观看 | 国产黄大片在线观看 | 国产中文字幕在线播放 | 亚洲影视九九影院在线观看 | 天天干天天操 | 伊人精品在线 | 超碰av在线免费观看 | 免费91麻豆精品国产自产在线观看 | 日韩精品影视 | 天天操天天舔天天干 | 91香蕉国产在线观看软件 | 丁香免费视频 | 韩国精品在线观看 | 玖玖爱免费视频 | 成人免费在线播放视频 | 国产免费人人看 | 成人免费xxx在线观看 | bbb搡bbb爽爽爽 | 性色av免费看 | 黄色一二级片 | 91最新国产 | 97超视频免费观看 | 91精品啪在线观看国产线免费 | 99热国产在线 | 成人av资源网站 | 99色资源 | 91麻豆福利 | 日韩av影视在线 | 亚洲欧美经典 | 五月天天av | 中文字幕黄网 | 国产精品99久久久久久武松影视 | 永久免费精品视频网站 | 国产一区 在线播放 | av品善网 | 中文字幕视频在线播放 | 91在线中字 | 色综合天天色综合 | 色网免费观看 | 久章草在线观看 | 成年人黄色免费视频 | 精品国产1区 | 国产黄色网 | 色网站黄| 亚洲精品天天 | 国产在线97 | 日韩欧美成 | 成人av日韩 | 欧美五月婷婷 | 网站在线观看日韩 | 最近av在线 | 91亚洲精品久久久 | 国内精品国产三级国产aⅴ久 | 日本3级在线观看 | 96av视频 | 一级黄色免费网站 | 日韩精品免费一区 | 91毛片视频| 日韩大片在线看 | 久久99精品一区二区三区三区 | 91九色精品女同系列 | 97电影网手机版 | 麻豆传媒一区二区 | 久久夜夜夜 | 亚洲黄色三级 |