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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

mybatis如何根据mapper接口生成其实现类

發布時間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis如何根据mapper接口生成其实现类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • SpringBoot集成mybatis

  • mybatis的statement的解析與加載

  • mybatis如何根據mapper接口生成其實現類

  • mybatis的mapper返回map結果集

  • mybatis結果的組裝

mybatis里頭給sqlSession指定執行哪條sql的時候,有兩種方式,一種是寫mapper的xml的namespace+statementId,如下:

public Student findStudentById(Integer studId) {logger.debug("Select Student By ID :{}", studId); SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession(); try { return sqlSession.selectOne("com.mybatis3.StudentMapper.findStudentById", studId); } finally { sqlSession.close(); } }

另外一種方法是指定mapper的接口:

public Student findStudentById(Integer studId) {logger.debug("Select Student By ID :{}", studId); SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); return studentMapper.findStudentById(studId); } finally { sqlSession.close(); } }

一般的話,比較推薦第二種方法,因為手工寫namespace和statementId極大增加了犯錯誤的概率,而且也降低了開發的效率。

問題

mapper的實現類如何生成

如果使用mapper接口的方式,問題來了,這個是個接口,通過sqlSession對象get出來的一定是個實現類,問題是,我們并沒有手工去寫 實現類,那么誰去干了這件事情呢?答案是mybatis通過JDK的動態代理方式,在啟動加載配置文件時,根據配置mapper的xml去生成。

mybatis-spring幫忙做了什么

自動open和close session

一、mapper代理類是如何生成的

啟動時加載解析mapper的xml

如果不是集成spring的,會去讀取<mappers>節點,去加載mapper的xml配置

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="2"/> </settings> <typeAliases> <typeAlias alias="CommentInfo" type="com.xixicat.domain.CommentInfo"/> </typeAliases> <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://localhost:3306/demo"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/xixicat/dao/CommentMapper.xml"/> </mappers> </configuration>

如果是集成spring的,會去讀spring的sqlSessionFactory的xml配置中的mapperLocations,然后去解析mapper的xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 配置mybatis配置文件的位置 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <property name="typeAliasesPackage" value="com.xixicat.domain"/> <!-- 配置掃描Mapper XML的位置 --> <property name="mapperLocations" value="classpath:com/xixicat/dao/*.xml"/> </bean>

然后綁定namespace(XMLMapperBuilder)

private void bindMapperForNamespace() { String namespace = builderAssistant.getCurrentNamespace(); if (namespace != null) { Class<?> boundType = null; try { boundType = Resources.classForName(namespace); } catch (ClassNotFoundException e) { //ignore, bound type is not required } if (boundType != null) { if (!configuration.hasMapper(boundType)) { // Spring may not know the real resource name so we set a flag // to prevent loading again this resource from the mapper interface // look at MapperAnnotationBuilder#loadXmlResource configuration.addLoadedResource("namespace:" + namespace); configuration.addMapper(boundType); } } } }

這里先去判斷該namespace能不能找到對應的class,若可以則調用

configuration.addMapper(boundType);

configuration委托給MapperRegistry:

public <T> void addMapper(Class<T> type) { mapperRegistry.addMapper(type); }

生成該mapper的代理工廠(MapperRegistry)

public <T> void addMapper(Class<T> type) { if (type.isInterface()) { if (hasMapper(type)) { throw new BindingException("Type " + type + " is already known to the MapperRegistry."); } boolean loadCompleted = false; try { knownMappers.put(type, new MapperProxyFactory<T>(type)); // It's important that the type is added before the parser is run // otherwise the binding may automatically be attempted by the // mapper parser. If the type is already known, it won't try. MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type); parser.parse(); loadCompleted = true; } finally { if (!loadCompleted) { knownMappers.remove(type); } } } }

這里的重點就是MapperProxyFactory類:

public class MapperProxyFactory<T> { private final Class<T> mapperInterface; private final Map<Method, MapperMethod> methodCache = new ConcurrentHashMap<Method, MapperMethod>(); public MapperProxyFactory(Class<T> mapperInterface) { this.mapperInterface = mapperInterface; } public Class<T> getMapperInterface() { return mapperInterface; } public Map<Method, MapperMethod> getMethodCache() { return methodCache; } @SuppressWarnings("unchecked") protected T newInstance(MapperProxy<T> mapperProxy) { return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy); } public T newInstance(SqlSession sqlSession) { final MapperProxy<T> mapperProxy = new MapperProxy<T>(sqlSession, mapperInterface, methodCache); return newInstance(mapperProxy); } }

getMapper的時候生成mapper代理類

@SuppressWarnings("unchecked")public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type); if (mapperProxyFactory == null) { throw new BindingException("Type " + type + " is not known to the MapperRegistry."); } try { return mapperProxyFactory.newInstance(sqlSession); } catch (Exception e) { throw new BindingException("Error getting mapper instance. Cause: " + e, e); } }

new出來MapperProxy

public T newInstance(SqlSession sqlSession) {final MapperProxy<T> mapperProxy = new MapperProxy<T>(sqlSession, mapperInterface, methodCache); return newInstance(mapperProxy); } @SuppressWarnings("unchecked") protected T newInstance(MapperProxy<T> mapperProxy) { return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy); }

這里給代理類注入了sqlSession

MapperProxy實現InvocationHandler接口進行攔截代理

public class MapperProxy<T> implements InvocationHandler, Serializable { private static final long serialVersionUID = -6424540398559729838L; private final SqlSession sqlSession; private final Class<T> mapperInterface; private final Map<Method, MapperMethod> methodCache; public MapperProxy(SqlSession sqlSession, Class<T> mapperInterface, Map<Method, MapperMethod> methodCache) { this.sqlSession = sqlSession; this.mapperInterface = mapperInterface; this.methodCache = methodCache; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (Object.class.equals(method.getDeclaringClass())) { try { return method.invoke(this, args); } catch (Throwable t) { throw ExceptionUtil.unwrapThrowable(t); } } final MapperMethod mapperMethod = cachedMapperMethod(method); return mapperMethod.execute(sqlSession, args); } private MapperMethod cachedMapperMethod(Method method) { MapperMethod mapperMethod = methodCache.get(method); if (mapperMethod == null) { mapperMethod = new MapperMethod(mapperInterface, method, sqlSession.getConfiguration()); methodCache.put(method, mapperMethod); } return mapperMethod; } }

這里的代理攔截,主要是尋找到MapperMethod,通過它去執行SQL。

MapperMethod委托給SqlSession去執行sql

public Object execute(SqlSession sqlSession, Object[] args) {Object result;if (SqlCommandType.INSERT == command.getType()) { Object param = method.convertArgsToSqlCommandParam(args); result = rowCountResult(sqlSession.insert(command.getName(), param)); } else if (SqlCommandType.UPDATE == command.getType()) { Object param = method.convertArgsToSqlCommandParam(args); result = rowCountResult(sqlSession.update(command.getName(), param)); } else if (SqlCommandType.DELETE == command.getType()) { Object param = method.convertArgsToSqlCommandParam(args); result = rowCountResult(sqlSession.delete(command.getName(), param)); } else if (SqlCommandType.SELECT == command.getType()) { if (method.returnsVoid() && method.hasResultHandler()) { executeWithResultHandler(sqlSession, args); result = null; } else if (method.returnsMany()) { result = executeForMany(sqlSession, args); } else if (method.returnsMap()) { result = executeForMap(sqlSession, args); } else { Object param = method.convertArgsToSqlCommandParam(args); result = sqlSession.selectOne(command.getName(), param); } } else if (SqlCommandType.FLUSH == command.getType()) { result = sqlSession.flushStatements(); } else { throw new BindingException("Unknown execution method for: " + command.getName()); } if (result == null && method.getReturnType().isPrimitive() && !method.returnsVoid()) { throw new BindingException("Mapper method '" + command.getName() + " attempted to return null from a method with a primitive return type (" + method.getReturnType() + ")."); } return result; }

其實這里就回到了第一種模式,該模式是直接指定了statement的Id(這里是command.getName()),而通過mapper的接口方式,則多了這么步驟,最后通過MapperMethod,給sqlSession傳入statement的id。

sqlSession其實自己也不執行sql,它只是mybatis對外公布的一個api入口,具體它委托給了executor去執行sql。

什么時候去getMapper

  • 手工get,比如

    public void createStudent(Student student) { SqlSession sqlSession = MyBatisSqlSessionFactory.getSqlSession(); try { StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); studentMapper.insertStudent(student); sqlSession.commit(); } finally { sqlSession.close(); } }
  • 集成spring的話
    在spring容器給指定的bean注入mapper的時候get出來(見MapperFactoryBean的getObject方法)

二、mybatis-spring幫忙做了什么

通過MapperScannerConfigurer將mapper適配成spring bean

<!-- 配置掃描Mapper接口的包路徑 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.xixicat.dao"/> </bean>

這里使用 MapperFactoryBean將Mapper接口配置成 Spring bean 實體同時注入sqlSessionFactory。

MapperScannerConfigurer給每個mapper生成對應的MapperFactoryBean

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { if (this.processPropertyPlaceHolders) { processPropertyPlaceHolders(); } ClassPathMapperScanner scanner = new ClassPathMapperScanner(registry); scanner.setAddToConfig(this.addToConfig); scanner.setAnnotationClass(this.annotationClass); scanner.setMarkerInterface(this.markerInterface); scanner.setSqlSessionFactory(this.sqlSessionFactory); scanner.setSqlSessionTemplate(this.sqlSessionTemplate); scanner.setSqlSessionFactoryBeanName(this.sqlSessionFactoryBeanName); scanner.setSqlSessionTemplateBeanName(this.sqlSessionTemplateBeanName); scanner.setResourceLoader(this.applicationContext); scanner.setBeanNameGenerator(this.nameGenerator); scanner.registerFilters(); scanner.scan(StringUtils.tokenizeToStringArray(this.basePackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS)); }

委托給ClassPathMapperScanner去scan

public Set<BeanDefinitionHolder> doScan(String... basePackages) {Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages); if (beanDefinitions.isEmpty()) { logger.warn("No MyBatis mapper was found in '" + Arrays.toString(basePackages) + "' package. Please check your configuration."); } else { for (BeanDefinitionHolder holder : beanDefinitions) { GenericBeanDefinition definition = (GenericBeanDefinition) holder.getBeanDefinition(); if (logger.isDebugEnabled()) { logger.debug("Creating MapperFactoryBean with name '" + holder.getBeanName() + "' and '" + definition.getBeanClassName() + "' mapperInterface"); } // the mapper interface is the original class of the bean // but, the actual class of the bean is MapperFactoryBean definition.getPropertyValues().add("mapperInterface", definition.getBeanClassName()); definition.setBeanClass(MapperFactoryBean.class); definition.getPropertyValues().add("addToConfig", this.addToConfig); boolean explicitFactoryUsed = false; if (StringUtils.hasText(this.sqlSessionFactoryBeanName)) { definition.getPropertyValues().add("sqlSessionFactory", new RuntimeBeanReference(this.sqlSessionFactoryBeanName)); explicitFactoryUsed = true; } else if (this.sqlSessionFactory != null) { definition.getPropertyValues().add("sqlSessionFactory", this.sqlSessionFactory); explicitFactoryUsed = true; } if (StringUtils.hasText(this.sqlSessionTemplateBeanName)) { if (explicitFactoryUsed) { logger.warn("Cannot use both: sqlSessionTemplate and sqlSessionFactory together. sqlSessionFactory is ignored."); } definition.getPropertyValues().add("sqlSessionTemplate", new RuntimeBeanReference(this.sqlSessionTemplateBeanName)); explicitFactoryUsed = true; } else if (this.sqlSessionTemplate != null) { if (explicitFactoryUsed) { logger.warn("Cannot use both: sqlSessionTemplate and sqlSessionFactory together. sqlSessionFactory is ignored."); } definition.getPropertyValues().add("sqlSessionTemplate", this.sqlSessionTemplate); explicitFactoryUsed = true; } if (!explicitFactoryUsed) { if (logger.isDebugEnabled()) { logger.debug("Enabling autowire by type for MapperFactoryBean with name '" + holder.getBeanName() + "'."); } definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); } } } return beanDefinitions; }

這里出現了MapperFactoryBean的身影,然后判斷配置文件是指定注入sqlSessionFactory,還是 sqlTemplate(二者不能同時指定,這里是指定了sqlSessionFactory)。這里通過 sqlSessionFactoryBeanName暫時先注入引用,因為此時還在給spring托管的bean進行create,不確定 sqlSessionFactory是否已經被創建。

關于MapperFactoryBean

public class MapperFactoryBean<T> extends SqlSessionDaoSupport implements FactoryBean<T> { private Class<T> mapperInterface; private boolean addToConfig = true; /** * Sets the mapper interface of the MyBatis mapper * * @param mapperInterface class of the interface */ public void setMapperInterface(Class<T> mapperInterface) { this.mapperInterface = mapperInterface; } /** * If addToConfig is false the mapper will not be added to MyBatis. This means * it must have been included in mybatis-config.xml. * <p> * If it is true, the mapper will be added to MyBatis in the case it is not already * registered. * <p> * By default addToCofig is true. * * @param addToConfig */ public void setAddToConfig(boolean addToConfig) { this.addToConfig = addToConfig; } /** * {@inheritDoc} */ @Override protected void checkDaoConfig() { super.checkDaoConfig(); notNull(this.mapperInterface, "Property 'mapperInterface' is required"); Configuration configuration = getSqlSession().getConfiguration(); if (this.addToConfig && !configuration.hasMapper(this.mapperInterface)) { try { configuration.addMapper(this.mapperInterface); } catch (Throwable t) { logger.error("Error while adding the mapper '" + this.mapperInterface + "' to configuration.", t); throw new IllegalArgumentException(t); } finally { ErrorContext.instance().reset(); } } } /** * {@inheritDoc} */ public T getObject() throws Exception { return getSqlSession().getMapper(this.mapperInterface); } /** * {@inheritDoc} */ public Class<T> getObjectType() { return this.mapperInterface; } /** * {@inheritDoc} */ public boolean isSingleton() { return true; } }

注意這里繼承了SqlSessionDaoSupport,在spring把sqlSessionFactory創建出來后,會去把之前注入的引用改為真的實例,調用SqlSessionDaoSupport的setSqlSessionFactory方法。

public abstract class SqlSessionDaoSupport extends DaoSupport { private SqlSession sqlSession; private boolean externalSqlSession; public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { if (!this.externalSqlSession) { this.sqlSession = new SqlSessionTemplate(sqlSessionFactory); } } public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSession = sqlSessionTemplate; this.externalSqlSession = true; } /** * Users should use this method to get a SqlSession to call its statement methods * This is SqlSession is managed by spring. Users should not commit/rollback/close it * because it will be automatically done. * * @return Spring managed thread safe SqlSession */ public SqlSession getSqlSession() { return this.sqlSession; } /** * {@inheritDoc} */ protected void checkDaoConfig() { notNull(this.sqlSession, "Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required"); } }

這里值得注意的是setSqlSessionFactory方法new了一個SqlSessionTemplate。

SqlSessionTemplate

它的一個重要的構造器為

public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType,PersistenceExceptionTranslator exceptionTranslator) {notNull(sqlSessionFactory, "Property 'sqlSessionFactory' is required"); notNull(executorType, "Property 'executorType' is required"); this.sqlSessionFactory = sqlSessionFactory; this.executorType = executorType; this.exceptionTranslator = exceptionTranslator; this.sqlSessionProxy = (SqlSession) newProxyInstance( SqlSessionFactory.class.getClassLoader(), new Class[] { SqlSession.class }, new SqlSessionInterceptor()); }

mybatis-srping比傳統mybatis方法多做的事情就在于此,生成了一個sqlSessionProxy。這里static import了java.lang.reflect.Proxy.newProxyInstance;也就是使用使用jdk代理進行了 SqlSessionInterceptor攔截。

SqlSessionInterceptor

private class SqlSessionInterceptor implements InvocationHandler { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { SqlSession sqlSession = getSqlSession( SqlSessionTemplate.this.sqlSessionFactory, SqlSessionTemplate.this.executorType, SqlSessionTemplate.this.exceptionTranslator); try { Object result = method.invoke(sqlSession, args); if (!isSqlSessionTransactional(sqlSession, SqlSessionTemplate.this.sqlSessionFactory)) { // force commit even on non-dirty sessions because some databases require // a commit/rollback before calling close() sqlSession.commit(true); } return result; } catch (Throwable t) { Throwable unwrapped = unwrapThrowable(t); if (SqlSessionTemplate.this.exceptionTranslator != null && unwrapped instanceof PersistenceException) { // release the connection to avoid a deadlock if the translator is no loaded. See issue #22 closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory); sqlSession = null; Throwable translated = SqlSessionTemplate.this.exceptionTranslator.translateExceptionIfPossible((PersistenceException) unwrapped); if (translated != null) { unwrapped = translated; } } throw unwrapped; } finally { if (sqlSession != null) { closeSqlSession(sqlSession, SqlSessionTemplate.this.sqlSessionFactory); } } } }

到了這里就明白了mybatis-spring幫忙做了session的open和close。

總結

以上是生活随笔為你收集整理的mybatis如何根据mapper接口生成其实现类的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日韩精品久久久久久久电影竹菊 | 人人澡人人草 | 亚洲欧洲精品视频 | 久久不见久久见免费影院 | 天天色天天射天天综合网 | 亚洲六月丁香色婷婷综合久久 | 97在线免费 | 久久涩涩网站 | 超碰人人草 | 国产一级大片在线观看 | 日韩精品短视频 | 99免费在线观看视频 | 福利视频一区二区 | 一级性av | 69视频在线| 天天干天天看 | 久精品一区 | 亚洲精品国产精品国自 | 人人插人人干 | 成人观看 | 国产在线色视频 | 国产日女人 | 国内精品在线一区 | 天天干人人插 | 高清有码中文字幕 | 911香蕉视频 | 中文字幕精品久久 | 国产在线91在线电影 | 99久久精品视频免费 | 亚洲成人家庭影院 | 日韩一级片观看 | 黄色精品一区 | 激情动态| 综合激情婷婷 | 91亚洲网| 狠狠操操操 | 国产黄色精品视频 | 9色在线视频 | 日韩欧美xxx | 亚洲国产精品99久久久久久久久 | 91久久久久久国产精品 | 国产中文| 婷婷在线色 | 精品一区在线看 | 天天操婷婷| 9色在线视频 | 国产精品自产拍 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久99影院| 久久免费视频在线观看6 | 欧美视频二区 | 久久撸在线视频 | 欧美日韩国产在线一区 | 日韩免费视频在线观看 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 人人干人人草 | 日韩欧美精品在线观看 | 日韩av一区二区在线 | 美女一区网站 | 亚洲色五月 | 色视频网址 | 成人精品电影 | 欧美在线一二 | 国产精品综合在线观看 | 国产精品国产毛片 | 中文字幕精品三区 | 国产精品原创av片国产免费 | 久久超碰99| 天天操网站 | 国产网站色| 福利视频精品 | 亚洲国产成人在线观看 | 婷婷国产v亚洲v欧美久久 | 国产九色视频在线观看 | 日韩成人邪恶影片 | 少妇自拍av | 国产精品成人免费 | 国产高清在线免费观看 | 在线电影 一区 | 九九有精品 | 精品a级片| 午夜精品久久久久久久99无限制 | 人人干人人干人人干 | 人人爽人人爽 | 欧美精品免费视频 | 91精品天码美女少妇 | 中文字幕亚洲综合久久五月天色无吗'' | 国产免费久久 | 久久精品国产亚洲精品 | 99热精品免费观看 | 人人草人 | 在线你懂| 国产精品久久久久久妇 | 四虎国产精品成人免费4hu | 亚洲一级电影 | 特级黄录像视频 | 亚洲日本黄色 | 97狠狠操| 国产不卡精品 | 丝袜足交在线 | 日日干夜夜爱 | 久草视频在线免费看 | 久久久精品小视频 | 毛片99| 免费的国产精品 | 亚洲区另类春色综合小说校园片 | 国产福利一区二区三区在线观看 | 亚洲美女视频在线 | 91久久丝袜国产露脸动漫 | 日韩亚洲国产精品 | 国产视频在线观看一区 | 日韩三级中文字幕 | 99视频精品全部免费 在线 | 黄色三级免费观看 | 五月色综合 | 亚洲国产精品久久久久 | 久久国产三级 | 黄色大片入口 | 91精品婷婷国产综合久久蝌蚪 | 亚洲 欧美 91 | 久久精品九色 | 精品久久久久免费极品大片 | 国产日韩精品一区二区 | 日韩两性视频 | 亚洲一区视频在线播放 | 国产亚洲精品久久久久久电影 | 中文字幕一区二区三区在线观看 | 亚洲美女在线国产 | 久久久午夜精品福利内容 | 久久久污 | 91精品国产91p65 | 丁香婷婷综合网 | 在线观看视频福利 | 久久免费在线观看视频 | 欧美 日韩 久久 | 99在线精品观看 | 狠狠色香婷婷久久亚洲精品 | 欧美精品视 | 黄色软件在线观看 | 免费视频色| 色就色,综合激情 | 亚洲精品成人网 | 国产精品高潮呻吟久久久久 | 欧美日韩国产精品一区 | 亚洲一区美女视频在线观看免费 | 亚洲专区欧美专区 | 国产精品一区免费在线观看 | 亚洲自拍自偷 | 成人免费看电影 | 国产成人综 | 久久久久国产精品视频 | 国产成人高清av | 国产在线高清 | 亚洲午夜久久久久 | 国产97在线视频 | 麻豆一精品传二传媒短视频 | 久久久久久福利 | 久久国产午夜精品理论片最新版本 | 一级黄色视屏 | 欧美 亚洲 另类 激情 另类 | 久久久国产高清 | 久久国产精品免费视频 | 国产精品爽爽久久久久久蜜臀 | 日韩在线视频免费播放 | 国产精品一区二区三区99 | 九九电影在线 | 99热这里只有精品8 久久综合毛片 | 国产精品99蜜臀久久不卡二区 | 91精品国产自产91精品 | 麻豆视频在线观看免费 | 免费日韩视 | 中国精品少妇 | 日韩免费网站 | 涩涩成人在线 | 欧美一级爽 | 日韩视频一区二区 | 中文字幕永久免费 | 国产美女免费观看 | 日韩av电影网站在线观看 | 久草电影网 | 99热超碰在线| 狠狠搞,com| 国内小视频 | 欧美日韩一区久久 | 欧美日韩亚洲在线观看 | 日韩一区二区在线免费观看 | 久久99热这里只有精品国产 | 精品在线观看一区二区 | 国产精品9999 | 福利一区二区 | 久久久综合九色合综国产精品 | 国产精品mv在线观看 | 一区二区三区日韩在线 | 免费日韩av电影 | 国产精品一区欧美 | 99九九热只有国产精品 | 激情喷水| 日韩剧 | 久久97精品| 国产成人99久久亚洲综合精品 | 国产国语在线 | 91丨精品丨蝌蚪丨白丝jk | 最近中文字幕高清字幕在线视频 | 国产色综合天天综合网 | 99在线看 | 午夜电影 电影 | 天天操天天操天天操天天操 | 亚洲综合狠狠干 | 国产精品久久久久高潮 | 欧美日韩国产精品一区二区三区 | 久久不卡日韩美女 | 99999精品| 日本精品视频免费观看 | 国外av在线 | 成人亚洲精品国产www | 国产精品一区二区三区在线免费观看 | 久久久99精品免费观看app | 成人全视频免费观看在线看 | 日日干天天干 | 在线成人观看 | 91麻豆免费视频 | 在线观看日本高清mv视频 | 不卡av电影在线观看 | www.天天色 | 69中文字幕 | 中文字幕在线观看免费观看 | 狠狠干狠狠艹 | 天天色欧美 | 国产高清在线a视频大全 | 81国产精品久久久久久久久久 | 成人啊 v | 日韩在线影视 | 国内外成人在线 | 欧美一区二区日韩一区二区 | 日韩激情久久 | 欧美成年人在线视频 | 99色在线观看视频 | www.亚洲黄 | 国产精品不卡在线观看 | www91在线观看| 国产精品乱码久久久久久1区2区 | 亚洲精品视频第一页 | 日本超碰在线 | 亚洲视频在线观看免费 | 丰满少妇高潮在线观看 | 狠狠干免费| 日韩高清精品一区二区 | 综合久色 | 中文字幕网站视频在线 | 久久国产精品99久久人人澡 | 日日躁夜夜躁aaaaxxxx | 美女久久久| 中文区中文字幕免费看 | 四虎永久免费网站 | 国产精品久久久区三区天天噜 | 91免费的视频在线播放 | 激情久久网 | 五月婷婷在线视频观看 | 少妇bbbb搡bbbb桶 | 五月激情av | 夜夜夜影院 | 在线免费观看视频a | 成人av一区二区三区 | 日韩久久精品一区二区 | 久久久久久久久久久久亚洲 | 久久国内精品99久久6app | 中文视频一区二区 | 九九热免费精品视频 | 亚洲一级二级 | 久久久久久免费毛片精品 | 射久久久| 成人欧美一区二区三区黑人麻豆 | 在线成人一区二区 | 国产精品久久久久影视 | 精品久久久久一区二区国产 | 伊人影院在线观看 | 国产精品电影在线 | 五月综合激情婷婷 | 久久激情电影 | 日韩精品一区二区三区免费视频观看 | 久久免费视频3 | 超碰官网 | 久草在线高清视频 | 一级做a视频 | 天天射一射| 国产专区视频在线观看 | 亚洲永久精品视频 | 亚洲免费精品一区二区 | 国产中文字幕一区二区三区 | 亚洲精品久久久久中文字幕m男 | 欧美福利网站 | 国产99久久久国产精品成人免费 | 国内精品久久影院 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 免费一级片在线观看 | 欧美在线观看视频一区二区 | 激情图片qvod | av中文电影 | 热热热热热色 | 亚洲网站在线看 | 久草在线综合 | 国产精品爽爽爽 | 久久午夜色播影院免费高清 | 日韩亚洲欧美中文字幕 | 在线观看一二三区 | 夜夜骑首页| 九月婷婷色| 婷婷五天天在线视频 | 亚洲国产精品成人精品 | 在线亚洲成人 | 国产精品a成v人在线播放 | 999久久精品 | 国产偷国产偷亚洲清高 | 激情欧美一区二区免费视频 | 91中文字幕网 | 久久国产精品免费观看 | 日本精品一区二区三区在线播放视频 | 国产一区二区电影在线观看 | 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲国产精彩中文乱码av | 国产黄色视 | 精品女同一区二区三区在线观看 | 日韩免 | 亚洲免费在线视频 | 波多野结衣在线视频免费观看 | 久久久久久久久久久久国产精品 | 夜夜操网| 久久国产精品第一页 | 午夜视频在线观看一区二区三区 | 久久成人欧美 | av色综合网| 成人综合日日夜夜 | 丁香六月婷婷开心 | 日本99久久| 蜜臀aⅴ精品一区二区三区 久久视屏网 | 国产精品123 | 日韩在线观 | 国产精品中文字幕在线 | 国产成人精品福利 | 五月天亚洲综合小说网 | 国产精品视频999 | 天天干婷婷 | 免费看一级一片 | 在线观看成人小视频 | 国产一区视频在线观看免费 | 国产精品日韩久久久久 | 亚洲综合在线五月 | 亚洲日本欧美在线 | 久久人人爽 | 天天射天天射天天 | 一区在线观看视频 | 亚洲有 在线 | 欧美一级免费高清 | 免费的国产精品 | 日韩视频在线观看免费 | 久久av免费| 精品资源在线 | 欧美精品乱码久久久久 | 欧美精品久 | 国产精品自产拍在线观看蜜 | 免费看的黄色小视频 | 91精品成人久久 | 精品一区二区精品 | 国产精品久久综合 | 在线播放精品一区二区三区 | 亚洲乱码精品 | www.亚洲精品在线 | 国产人成免费视频 | 国产综合在线观看视频 | 色天天综合久久久久综合片 | 精品一区二区影视 | 在线观看亚洲a | 国产在线观看免 | 激情丁香 | 免费在线日韩 | 最近乱久中文字幕 | 91aaa在线观看 | 91精品久久久久 | www.天天色.com | 国产黄色免费在线观看 | 日韩高清在线一区二区三区 | 在线观看的av | 操操操日日日干干干 | 欧美一级性视频 | 成人午夜影院 | 亚洲成av人片在线观看香蕉 | 91精品一区在线观看 | 国产中文字幕av | 亚洲国产mv| 久久午夜色播影院免费高清 | 色综合久久中文字幕综合网 | 看全黄大色黄大片 | 国产黄色在线观看 | 国产精品福利久久久 | 久久久久二区 | 国产一级高清视频 | 综合久久精品 | 欧美激情精品久久久久 | 久久久久亚洲精品国产 | 日日干美女| 免费观看mv大片高清 | 婷婷丁香社区 | 日日夜夜精品 | 亚洲国产影院 | 中文字幕在线一区二区三区 | 国产99视频在线观看 | 国际精品久久久 | 成人网看片 | 亚洲视屏在线播放 | 亚洲专区中文字幕 | 欧美综合干 | 国产精品黄色在线观看 | 日日天天| 狠狠狠色狠狠色综合 | 久久久观看 | 亚洲成人高清在线 | 成人国产精品久久久久久亚洲 | 日韩在线视频观看 | 午夜的福利 | 国产色网 | 99久热| 91亚色视频| 精品国产精品久久 | 久操视频在线播放 | 四虎www. | 好看的国产精品视频 | 97碰在线视频 | 99r在线播放 | 麻豆视频免费在线播放 | 欧美午夜精品久久久久久孕妇 | 亚洲精品国产欧美在线观看 | 久久精品79国产精品 | 欧美激情视频在线免费观看 | 国产亚洲观看 | 在线观看一区二区精品 | 麻豆视频91 | 国产黄视频在线观看 | 91福利视频免费 | 久久夜靖品| 色99导航| 18国产精品白浆在线观看免费 | av色综合网 | 狠狠操夜夜 | 日本中出在线观看 | 在线观看国产永久免费视频 | 在线免费高清一区二区三区 | 久久视频一区二区 | 蜜臀av一区二区 | 久久福利在线 | avlulu久久精品| 色狠狠狠| 国产国语在线 | 国产成人av电影在线观看 | 日日日操| 国产裸体视频bbbbb | 探花视频免费观看 | 国产一二区在线观看 | 手机看国产毛片 | 午夜精品一区二区国产 | 亚洲电影影音先锋 | 99热国产在线| 一级免费黄视频 | 中文字幕高清视频 | 国产高清在线观看 | 伊人中文在线 | 亚洲九九 | 成人少妇影院yyyy | 免费观看xxxx9999片 | 国产精品久久久久免费观看 | 久久a v视频| www.久草.com | 成人欧美一区二区三区在线观看 | 国产高清在线观看av | 久久理论片 | 97在线观看免费观看高清 | 成人在线免费视频 | 日本系列中文字幕 | 97精品视频在线 | 国产高清在线 | 四虎www. | 国产不卡在线观看视频 | 一 级 黄 色 片免费看的 | 亚洲黄色在线观看 | 中文字幕av免费在线观看 | 国产一级片在线播放 | 色天天综合久久久久综合片 | 久久99视频免费 | av在线免费观看黄 | av黄色大片 | 天天操天天摸天天干 | 九九色网 | 在线观看视频91 | av免费播放 | 日韩二区在线播放 | 麻豆94tv免费版 | 国产精品久久久久久久久久久久久久 | 不卡的一区二区三区 | 成人av久久| www.超碰97.com | 亚洲五月激情 | 欧美a级一区二区 | 高清av在线 | 久久精品国产一区二区电影 | 伊人色播| 日本韩国在线不卡 | 中中文字幕av在线 | 日韩免费在线一区 | 午夜视频一区二区三区 | 在线影院中文字幕 | 久精品视频免费观看2 | 亚洲激情婷婷 | 欧美电影黄色 | 欧美精品xxx | 波多野结衣久久精品 | 久久久久久久av麻豆果冻 | 亚洲丝袜中文 | 福利视频网址 | 一区二区三区在线不卡 | 天天插伊人 | 免费麻豆 | 日韩精品一区二区三区免费观看视频 | 婷婷日韩 | 99国产情侣在线播放 | 亚洲视频2| 五月天久久狠狠 | 一区二区三区日韩视频在线观看 | 99九九热只有国产精品 | 色婷婷一 | 5月丁香婷婷综合 | 在线免费观看国产 | av免费试看 | 日夜夜精品视频 | 日韩黄色一区 | 婷婷丁香花 | 444av| 97超碰资源总站 | 国产一级大片免费看 | 久久激情视频网 | 在线观看中文字幕网站 | 96久久久 | 免费黄色av电影 | 黄色免费av | 亚洲午夜av | 天天干夜夜擦 | 日韩色视频在线观看 | 99精品视频免费在线观看 | 国产精品久久久久久欧美 | 日韩电影在线观看一区二区 | 97综合视频| 国产高清在线观看 | 玖玖视频在线 | 青青草在久久免费久久免费 | 狠狠狠狠狠狠狠狠 | 一本—道久久a久久精品蜜桃 | 国产精品久久久久久久久久尿 | 中文字幕的 | 国产免费久久久久 | 99精品久久只有精品 | 日韩中字在线观看 | 一区二区三区影院 | 精品久久国产精品 | 国产女教师精品久久av | 永久免费精品视频 | 国产成人精品日本亚洲999 | 91精品国产综合久久久久久久 | 在线 高清 中文字幕 | 久久伊人八月婷婷综合激情 | 在线观看av国产 | 五月婷影院 | 欧美日韩国产二区三区 | 国产人免费人成免费视频 | 国产 一区二区三区 在线 | 国产成人av网站 | 视频在线99re | 在线观看麻豆av | 日本精品午夜 | 国产一区欧美在线 | 欧美精品三级在线观看 | 国产精品免费久久久久影院仙踪林 | 9i看片成人免费看片 | 久久久精品日本 | 免费看日韩 | 日韩精品一区在线播放 | 黄色午夜 | 欧美一区中文字幕 | 超碰97人人射妻 | 久久高清国产 | 国产精品一区免费看8c0m | 国产精品久久久久久久久毛片 | 国产精品青青 | 91成人免费 | 中文字幕久久亚洲 | 亚洲国产99 | 国产香蕉视频在线播放 | 91久久久久久国产精品 | www.xxx.性狂虐 | www178ccom视频在线 | www.久久爱.cn | 国产在线观看免费 | 久久久久福利视频 | 97超碰人人澡人人爱学生 | 麻豆精品国产传媒 | 亚洲区精品 | 久久天天躁夜夜躁狠狠躁2022 | 免费成人在线观看视频 | 久久免费成人网 | 日本精品在线 | 亚洲精品乱码久久久久久 | 视频一区二区免费 | 欧美视频日韩 | 国产高清在线视频 | 二区三区在线 | 亚洲欧美在线综合 | 国产999在线 | 最近中文字幕高清字幕在线视频 | 欧美日韩国产一区二区三区在线观看 | 亚洲乱码在线 | 国产精品亚洲成人 | 91桃色在线观看视频 | 久久精品精品电影网 | 一区二区男女 | 久久免费精品国产 | 韩国av电影在线观看 | 四虎在线免费观看视频 | aaa黄色毛片| 日韩午夜剧场 | 国产99久久久国产精品成人免费 | 国产三级视频 | 在线直播av | 午夜精品久久久久久久久久久久久久 | 国产不卡在线观看视频 | 亚洲精品日韩一区二区电影 | 中文字幕免费久久 | 久操视频在线播放 | 国产亚洲永久域名 | 国产色在线 | 西西大胆啪啪 | 在线中文日韩 | 日韩欧美xxx | 欧美日韩国产欧美 | 亚洲综合丁香 | 欧美做受高潮1 | 亚洲精品国偷自产在线99热 | 黄色一级大片在线免费看国产一 | 婷婷成人综合 | 美女网站免费福利视频 | 一本色道久久精品 | 国产精品久久久久久久久久久不卡 | 爱干视频 | 色综合久久网 | 日韩av二区 | 成人av教育 | 中文字幕在线观 | 在线看片一区 | 久久久久久国产精品美女 | 国产成人一区二区三区久久精品 | 91精品久久久久久综合乱菊 | 亚洲国内在线 | av黄色免费在线观看 | 久久久久在线视频 | 免费在线成人av | 中文区中文字幕免费看 | 精品一区二区三区在线播放 | 小草av在线播放 | 欧美在线视频不卡 | av在线专区| 久久久久久久久久网 | 一本一本久久a久久精品综合妖精 | 月下香电影 | 97热久久免费频精品99 | 国产一区视频导航 | 亚洲精品黄网站 | a黄色| 玖玖玖国产精品 | 久草精品视频 | 日批视频在线播放 | 在线观看精品黄av片免费 | 91色在线观看视频 | 久久99亚洲精品 | 91久久偷偷做嫩草影院 | 天天射天天干天天爽 | 日韩精品短视频 | 午夜在线观看影院 | 亚洲资源一区 | 开心丁香婷婷深爱五月 | 免费在线观看毛片网站 | 日韩在线视频二区 | 久久精品永久免费 | 丁香综合五月 | 国产精品一区久久久久 | 在线视频第一页 | 一本到视频在线观看 | 国产亚洲精品久久久网站好莱 | 国产精品你懂的在线观看 | 久久久久久久精 | 亚洲黄电影 | 日韩精品免费在线观看视频 | 亚洲精品综合一二三区在线观看 | 久久99热这里只有精品 | 久久综合五月天婷婷伊人 | 色av资源网 | 91中文字幕在线播放 | 97色狠狠 | av+在线播放在线播放 | 久久久精品一区二区 | 日韩欧美高清在线 | 久久你懂得 | 中文字幕在线观看的网站 | 国产一卡二卡在线 | 成人精品一区二区三区电影免费 | 精品91| 最新久久免费视频 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 五月天婷亚洲天综合网鲁鲁鲁 | 久久精品欧美一区 | 中文字幕综合在线 | 日韩视频免费在线 | 国产日产精品久久久久快鸭 | 久久久国产影院 | 免费视频一区二区 | 视频在线观看入口黄最新永久免费国产 | 欧美日韩成人 | 日韩成人免费在线电影 | 精品久久久久久综合日本 | 日日操操 | 91最新国产 | 四虎免费在线观看视频 | 婷婷综合在线 | 久久黄色小说 | 精品国产一区二区三区四区在线观看 | 91精品久久久久久粉嫩 | 99久久精品国产欧美主题曲 | 色av资源网 | 日日操天天操狠狠操 | www.国产视频 | 99热九九这里只有精品10 | 久久久久久综合网天天 | 欧美在线视频免费 | 亚洲欧洲成人精品av97 | 欧洲成人免费 | 成人影片在线免费观看 | 草久在线视频 | 日韩av电影国产 | 在线观看亚洲a | 操老逼免费视频 | 最新日韩在线 | 亚洲国产欧美在线人成大黄瓜 | 欧美一级电影免费观看 | 美女一区网站 | 欧洲精品久久久久毛片完整版 | 在线免费观看成人 | 一区二区 精品 | 欧美在线日韩在线 | 精品在线不卡 | 一区二区成人国产精品 | 国产精品一区二区免费 | 国产精品毛片久久 | 国产一区二区在线播放 | 国产裸体永久免费视频网站 | 99久久网站 | 欧美一区日韩一区 | 日韩av一区二区在线影视 | 国产精品国产亚洲精品看不卡15 | 激情视频一区二区三区 | 久久福利精品 | 手机在线日韩视频 | 美女视频免费一区二区 | 97视频在线观看视频免费视频 | 99精品观看 | 在线观看精品一区 | 91香蕉视频在线下载 | 国产精品一区二区在线播放 | 免费视频资源 | 亚洲综合在线五月 | 一区二区三区国产精品 | 国产高清视频在线播放 | 国产成人久久精品亚洲 | 日本中文字幕网站 | 黄色毛片视频 | 亚洲视频每日更新 | 亚洲国产精品视频在线观看 | 亚洲黄色片| 久久久久久久福利 | 日韩啪啪小视频 | 人人狠狠综合久久亚洲婷 | 国产精品麻豆视频 | 亚洲精品国产综合99久久夜夜嗨 | 色.www| 久久久久成人精品免费播放动漫 | 久久视奸 | 日韩精品免费在线观看视频 | 爱干视频 | 中文字幕av专区 | 草久视频在线 | 午夜精品电影 | 欧美日韩网站 | 成人久久综合 | 免费在线色电影 | 999久久国精品免费观看网站 | 国产一区二区在线观看免费 | av片中文字幕 | 亚洲日本欧美在线 | 国产精品99视频 | 国内精品中文字幕 | 亚洲黄色区 | 伊人国产在线播放 | 久久久免费国产 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | www.色爱 | 欧美日韩aaaa | 日韩在线网址 | 久久久久综合视频 | 亚洲激情电影在线 | 在线观看91视频 | 少妇bbbb搡bbbb桶 | 国产三级午夜理伦三级 | 日韩精品久久久久久久电影99爱 | 国内精品福利视频 | 中文字幕在线免费观看视频 | 91av在| 色婷婷免费视频 | 免费成人黄色片 | 中文字幕资源在线观看 | 欧美日韩视频在线一区 | 日韩色爱| 国产资源在线播放 | 999久久久久久久久久久 | 亚洲电影一级黄 | 国产黄免费在线观看 | 91香蕉视频污在线 | 国产乱码精品一区二区蜜臀 | 免费黄a大片 | 国产 中文 日韩 欧美 | 欧美性大战 | 91福利视频在线 | 中文有码在线视频 | 成人av在线一区二区 | 色婷婷亚洲精品 | 久久成人免费 | 五月婷网站 | 精品亚洲va在线va天堂资源站 | 超碰av在线播放 | av在线一二三区 | 久久成人黄色 | 亚洲福利精品 | 狠狠的干狠狠的操 | 精品国产伦一区二区三区观看体验 | 一级理论片在线观看 | 亚洲首页| 日韩在线视频网址 | 亚洲综合在线观看视频 | 国产高清亚洲 | 欧洲视频一区 | 在线观看免费视频 | 97国产精品一区二区 | 国产永久免费高清在线观看视频 | 婷婷网在线 | 久久99国产综合精品 | 免费观看一级成人毛片 | 免费高清影视 | 久久精品2 | 精品亚洲男同gayvideo网站 | 国产1区在线观看 | 免费观看视频的网站 | 综合在线亚洲 | 黄色网www | 久久久99精品免费观看 | 在线视频第一页 | 九九有精品| 开心婷婷色 | 国产精品麻豆欧美日韩ww | 国产麻豆果冻传媒在线观看 | 丁香六月伊人 | 欧美在线视频不卡 | 亚洲精品视频第一页 | 人人射人人插 | 欧美国产日韩一区 | 欧美国产一区二区 | 97国产精品免费 | 中文字幕视频一区 | 黄色特级毛片 | 青青草视频精品 | 国产在线观看污片 | 国产精品系列在线 | 99久久久久久久 | 国产日产精品一区二区三区四区的观看方式 | 欧美一级艳片视频免费观看 | jizz999| 开心激情网五月天 | 免费在线观看av片 | 国产在线精品国自产拍影院 | 精品国产乱码久久久久久1区二区 | 色就色,综合激情 | 久久超碰网 | free,性欧美 九九交易行官网 | 人人爱天天操 | 亚洲精品视频免费看 | av福利在线播放 | 在线成人中文字幕 | 一区二区三区国 | 97国产在线 | 免费久久久久久久 | 亚洲国产mv | 91桃色免费观看 | 日韩最新中文字幕 | 99国产成+人+综合+亚洲 欧美 | 超碰在线91 | 亚洲精品网址在线观看 | 伊人影院99 | 国产黄| 日韩欧美综合视频 | a国产精品 | 91精品导航 | 国产91综合一区在线观看 | 色狠狠久久av五月综合 | 成人福利av| 亚洲国产人午在线一二区 | 欧美人牲 | 在线播放第一页 | 国产成人精品免费在线观看 | 国产va精品免费观看 | 国产精品mv| 国产精品一区在线播放 | 亚洲精品福利在线观看 | 在线99热 | 色婷婷狠狠操 | 国产婷婷精品av在线 | 日韩精品久久久久久久电影竹菊 | 中字幕视频在线永久在线观看免费 | 久久免费一| 国产91精品一区二区麻豆网站 | 久久成人国产精品免费软件 | 日韩欧美电影 | 午夜黄色一级片 | 久久综合给合久久狠狠色 | 丁香av | 日本中文字幕一二区观 | 深夜福利视频一区二区 | 九热在线| 亚洲va欧美va人人爽春色影视 | 欧美日韩国产精品一区二区亚洲 | 国产乱对白刺激视频在线观看女王 | 精品一区二区电影 | 成人av在线网 | 亚洲精品一区二区久 | 夜夜躁狠狠躁 | 免费合欢视频成人app | 免费观看成人网 | 亚洲成a人片77777kkkk1在线观看 | 中文字幕的 | 久久视频中文字幕 | 国语久久 | 中国成人一区 | 天天操夜夜操夜夜操 | 天天躁日日躁狠狠躁av麻豆 | 国内视频一区二区 | 日韩精品免费专区 | 色av资源网 | 精品视频在线免费观看 | 99麻豆视频 | 欧美日韩国产亚洲乱码字幕 | 国产精品一区二区av | 亚av在线| 成人av免费在线观看 | 天天操操 | 亚洲国产一区在线观看 | 美女一级毛片视频 | 911久久香蕉国产线看观看 | 西西4444www大胆无视频 | 在线观看成人国产 | 97视频在线 | 国产一区二区精品 | 中文字幕 婷婷 | 在线观看中文字幕dvd播放 | www.五月天婷婷 | 久久三级毛片 | 91成人免费在线 | 草久在线视频 | 免费三级av | 99久久99久久精品免费 | www久草| 99中文字幕在线观看 | 成人国产精品久久久 | 99精品在线免费在线观看 | 91精品国产一区二区在线观看 | 色插综合| 96久久 | 91精品国产福利 | 日韩久久久久久久久 | 国产精品自在线拍国产 | 久草在线观 | 三上悠亚在线免费 | 国产亚洲片 | 国产成人不卡 | 97福利| 国产黄色视 | 色网站在线观看 | 精品99视频 |