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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

MyBatis启动:MapperStatement创建

發(fā)布時(shí)間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis启动:MapperStatement创建 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

參考:http://blog.csdn.net/ashan_li/article/details/50351080

MappedStatement說(shuō)明

一個(gè)MappedStatement對(duì)象對(duì)應(yīng)Mapper配置文件中的一個(gè)select/update/insert/delete節(jié)點(diǎn),主要描述的是一條SQL語(yǔ)句。其屬性有

//節(jié)點(diǎn)中的id屬性加要命名空間  
private String id;  
//直接從節(jié)點(diǎn)屬性中取  
private Integer fetchSize;  
//直接從節(jié)點(diǎn)屬性中取  
private Integer timeout;  
private StatementType statementType;  
private ResultSetType resultSetType;  
//對(duì)應(yīng)一條SQL語(yǔ)句  
private SqlSource sqlSource;  //每條語(yǔ)句都對(duì)就一個(gè)緩存,如果有的話。  
private Cache cache;  
//這個(gè)已經(jīng)過(guò)時(shí)了  
private ParameterMap parameterMap;  
private List<ResultMap> resultMaps;  
private boolean flushCacheRequired;  
private boolean useCache;  
private boolean resultOrdered;  
//SQL的類型,select/update/insert/detete  
private SqlCommandType sqlCommandType;  
private KeyGenerator keyGenerator;  
private String[] keyProperties;  
private String[] keyColumns;  //是否有內(nèi)映射  
private boolean hasNestedResultMaps;  
private String databaseId;  
private Log statementLog;  
private LanguageDriver lang;  
private String[] resultSets; 

  

Mapper是接口,用來(lái)聲明持久層的方法,而Mapper配置對(duì)應(yīng)的XML,決定了方法的執(zhí)行的內(nèi)容,決定持久層方法的行為。在MyBatis啟 動(dòng)時(shí),會(huì)解析這些包含SQL的XML文件,并將其包裝成為MapperStatement對(duì)象,并將MapperStatement注冊(cè)到全局的 configuration對(duì)象上,接下來(lái)就深入的了解代碼的實(shí)現(xiàn)。

?

private void mapperElement(XNode parent) throws Exception {  if (parent != null) {  for (XNode child : parent.getChildren()) {  if ("package".equals(child.getName())) {  String mapperPackage = child.getStringAttribute("name");  configuration.addMappers(mapperPackage);  } else {  String resource = child.getStringAttribute("resource");  String url = child.getStringAttribute("url");  String mapperClass = child.getStringAttribute("class");  if (resource != null && url == null && mapperClass == null) {  ErrorContext.instance().resource(resource);  InputStream inputStream = Resources.getResourceAsStream(resource);  XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, resource, configuration.getSqlFragments());  mapperParser.parse();  } else if (resource == null && url != null && mapperClass == null) {  ErrorContext.instance().resource(url);  InputStream inputStream = Resources.getUrlAsStream(url);  XMLMapperBuilder mapperParser = new XMLMapperBuilder(inputStream, configuration, url, configuration.getSqlFragments());  mapperParser.parse();  } else if (resource == null && url == null && mapperClass != null) {  Class<?> mapperInterface = Resources.classForName(mapperClass);  configuration.addMapper(mapperInterface);  } else {  throw new BuilderException("A mapper element may only specify a url, resource or class, but not more than one.");  }  }  }  }  }  

  

從 源碼中就可以看出,配置Mapper時(shí),可以配置package熟悉,注冊(cè)包下所有的接口。還可以從資源中比如硬盤上,網(wǎng)絡(luò)中,去加載XML文件。注冊(cè)過(guò) 程是通過(guò)注冊(cè)器MapperRegistry來(lái)完成的。注冊(cè)的容器是一個(gè)map,Map<Class<?>, MapperProxyFactory<?>> knownMappers = new HashMap<Class<?>, MapperProxyFactory<?>>();。

?

key是mapper的接口完整類名,value是mapper的代理工廠。注冊(cè)完成后,還要做解析XML文件操作。

?

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

  

??

下面 是解析的代碼

?

public void parse() {  String resource = type.toString();  if (!configuration.isResourceLoaded(resource)) {  loadXmlResource();  configuration.addLoadedResource(resource);  assistant.setCurrentNamespace(type.getName());  parseCache();  parseCacheRef();  Method[] methods = type.getMethods();  for (Method method : methods) {  try {  parseStatement(method);  } catch (IncompleteElementException e) {  configuration.addIncompleteMethod(new MethodResolver(this, method));  }  }  }  parsePendingMethods();  }  

  

private void loadXmlResource() {  // Spring may not know the real resource name so we check a flag  // to prevent loading again a resource twice  // this flag is set at XMLMapperBuilder#bindMapperForNamespace  if (!configuration.isResourceLoaded("namespace:" + type.getName())) {  String xmlResource = type.getName().replace('.', '/') + ".xml";  InputStream inputStream = null;  try {  inputStream = Resources.getResourceAsStream(type.getClassLoader(), xmlResource);  } catch (IOException e) {  // ignore, resource is not required  }  if (inputStream != null) {  XMLMapperBuilder xmlParser = new XMLMapperBuilder(inputStream, assistant.getConfiguration(), xmlResource, configuration.getSqlFragments(), type.getName());  xmlParser.parse();  }  }  
}  

  

?

MyBatis通過(guò)替換mapper完整類名中的“.”,替換成為“/”,然后加上后綴“.xml”,拼成XML資源路徑,然后判斷是否已加載過(guò)XML,沒(méi)有的話加載XML文件,然后使用xmlMapperBuilder建造者解析XML中的元素。


public void parse() {  if (!configuration.isResourceLoaded(resource)) {  configurationElement(parser.evalNode("/mapper"));  configuration.addLoadedResource(resource);  bindMapperForNamespace();  }  parsePendingResultMaps();  parsePendingChacheRefs();  parsePendingStatements();  
}  

  

resource是創(chuàng)建建造者的構(gòu)造參數(shù),type.getClass(),就是mapper的類型。判斷然后還沒(méi)有加載mapper,就開(kāi)始解析XML文件中的mapper節(jié)點(diǎn)。

?

private void configurationElement(XNode context) {  try {  String namespace = context.getStringAttribute("namespace");  if (namespace.equals("")) {  throw new BuilderException("Mapper's namespace cannot be empty");  }  builderAssistant.setCurrentNamespace(namespace);  cacheRefElement(context.evalNode("cache-ref"));  cacheElement(context.evalNode("cache"));  parameterMapElement(context.evalNodes("/mapper/parameterMap"));  resultMapElements(context.evalNodes("/mapper/resultMap"));  sqlElement(context.evalNodes("/mapper/sql"));  buildStatementFromContext(context.evalNodes("select|insert|update|delete"));  } catch (Exception e) {  throw new BuilderException("Error parsing Mapper XML. Cause: " + e, e);  }  }  

  

?

解 析時(shí),先設(shè)置命名空間。然后解析cache-ref元素,可以使用其他命名空間的的緩存。在configuration對(duì)象上有一個(gè) cacheRefMap用來(lái)維護(hù)引用緩存的關(guān)系。并且引用其他命名空間的引用指向助手類的currCache屬性上。如果被指向的命名空間還未加載,則拋 出異常,并且往configuration對(duì)象上添加未處理的緩存引用chcheRef。

private void cacheRefElement(XNode context) {  if (context != null) {  configuration.addCacheRef(builderAssistant.getCurrentNamespace(), context.getStringAttribute("namespace"));  CacheRefResolver cacheRefResolver = new CacheRefResolver(builderAssistant, context.getStringAttribute("namespace"));  try {  cacheRefResolver.resolveCacheRef();  } catch (IncompleteElementException e) {  configuration.addIncompleteCacheRef(cacheRefResolver);  }  }  
}  

  

?

解析緩存元素,可以使用type屬性配置自定義的緩存,否則使用默認(rèn) 的PERPETUAL。然后用別名注冊(cè)器注冊(cè)緩存類。接下來(lái)注冊(cè)緩存的回收算法,緩存大小,過(guò)期時(shí)間,是否只讀等屬性。然后由助手類通過(guò)反射創(chuàng)建一個(gè)具體 的Cache對(duì)象。然后注冊(cè)到configuration全局對(duì)象上。

private void cacheElement(XNode context) throws Exception {  if (context != null) {  String type = context.getStringAttribute("type", "PERPETUAL");  Class<? extends Cache> typeClass = typeAliasRegistry.resolveAlias(type);  String eviction = context.getStringAttribute("eviction", "LRU");  Class<? extends Cache> evictionClass = typeAliasRegistry.resolveAlias(eviction);  Long flushInterval = context.getLongAttribute("flushInterval");  Integer size = context.getIntAttribute("size");  boolean readWrite = !context.getBooleanAttribute("readOnly", false);  Properties props = context.getChildrenAsProperties();  builderAssistant.useNewCache(typeClass, evictionClass, flushInterval, size, readWrite, props);  }  
}  

  

?

下一步是解析parameterMap,新版中已經(jīng)不推薦配置這個(gè)屬性了,屬于老方法。

參數(shù)Map映射已經(jīng)被淘汰,但是結(jié)果集映射還很有用。接下來(lái)就是解析 resultMap。解析resultMap的元素比較多,解析完成后,還會(huì)根據(jù)解析到的映射關(guān)系創(chuàng)建一個(gè)結(jié)果處理器對(duì)象 resultMapResolver,后面對(duì)數(shù)據(jù)庫(kù)操作時(shí),用來(lái)處理列和屬性的類型轉(zhuǎn)換。

private ResultMap resultMapElement(XNode resultMapNode, List<ResultMapping> additionalResultMappings) throws Exception {  ErrorContext.instance().activity("processing " + resultMapNode.getValueBasedIdentifier());  String id = resultMapNode.getStringAttribute("id",  resultMapNode.getValueBasedIdentifier());  String type = resultMapNode.getStringAttribute("type",  resultMapNode.getStringAttribute("ofType",  resultMapNode.getStringAttribute("resultType",  resultMapNode.getStringAttribute("javaType"))));  String extend = resultMapNode.getStringAttribute("extends");  Boolean autoMapping = resultMapNode.getBooleanAttribute("autoMapping");  Class<?> typeClass = resolveClass(type);  Discriminator discriminator = null;  List<ResultMapping> resultMappings = new ArrayList<ResultMapping>();  resultMappings.addAll(additionalResultMappings);  List<XNode> resultChildren = resultMapNode.getChildren();  for (XNode resultChild : resultChildren) {  if ("constructor".equals(resultChild.getName())) {  processConstructorElement(resultChild, typeClass, resultMappings);  } else if ("discriminator".equals(resultChild.getName())) {  discriminator = processDiscriminatorElement(resultChild, typeClass, resultMappings);  } else {  ArrayList<ResultFlag> flags = new ArrayList<ResultFlag>();  if ("id".equals(resultChild.getName())) {  flags.add(ResultFlag.ID);  }  resultMappings.add(buildResultMappingFromContext(resultChild, typeClass, flags));  }  }  ResultMapResolver resultMapResolver = new ResultMapResolver(builderAssistant, id, typeClass, extend, discriminator, resultMappings, autoMapping);  try {  return resultMapResolver.resolve();  } catch (IncompleteElementException  e) {  configuration.addIncompleteResultMap(resultMapResolver);  throw e;  }  
}  

  

?

解析來(lái)繼續(xù)解析SQL片段,用來(lái)復(fù)用的SQL。助手類會(huì)將SQL片段的ID前面加上當(dāng)前命名空間和一個(gè)點(diǎn),用來(lái)和其他命名空間區(qū)別開(kāi)。然后將SQL片段加載到configuration全局對(duì)象的sqlFragments對(duì)象上保存。

?

?

private void sqlElement(List<XNode> list, String requiredDatabaseId) throws Exception {  for (XNode context : list) {  String databaseId = context.getStringAttribute("databaseId");  String id = context.getStringAttribute("id");  id = builderAssistant.applyCurrentNamespace(id, false);  if (databaseIdMatchesCurrent(id, databaseId, requiredDatabaseId)) sqlFragments.put(id, context);  }  
}  

  

?

最后是重頭戲,解析增刪改查節(jié)點(diǎn),創(chuàng)建Statement對(duì)象。同樣是通過(guò)建造者模式來(lái)創(chuàng)建語(yǔ)句對(duì)象,建造者的構(gòu)造參數(shù)包括全局配置信息,當(dāng)前命名空間助手,XML配置信息和數(shù)據(jù)庫(kù)ID。

private void buildStatementFromContext(List<XNode> list, String requiredDatabaseId) {  for (XNode context : list) {  final XMLStatementBuilder statementParser = new XMLStatementBuilder(configuration, builderAssistant, context, requiredDatabaseId);  try {  statementParser.parseStatementNode();  } catch (IncompleteElementException e) {  configuration.addIncompleteStatement(statementParser);  }  }  
}  

  

?

首先還是解析XML文件的各個(gè)屬性,然后處理<include>和<selectKey>片段。根據(jù)include標(biāo)簽中的refid到全局配置中取對(duì)應(yīng)的SQL片段。根據(jù)selectKey的配置信息,創(chuàng)建一個(gè)MapperStatement,并且添加到全局配置中,然后移除selectKey節(jié)點(diǎn)。

public void parseStatementNode() {  String id = context.getStringAttribute("id");  String databaseId = context.getStringAttribute("databaseId");  if (!databaseIdMatchesCurrent(id, databaseId, this.requiredDatabaseId)) return;  Integer fetchSize = context.getIntAttribute("fetchSize");  Integer timeout = context.getIntAttribute("timeout");  String parameterMap = context.getStringAttribute("parameterMap");  String parameterType = context.getStringAttribute("parameterType");  Class<?> parameterTypeClass = resolveClass(parameterType);  String resultMap = context.getStringAttribute("resultMap");  String resultType = context.getStringAttribute("resultType");  String lang = context.getStringAttribute("lang");  LanguageDriver langDriver = getLanguageDriver(lang);  Class<?> resultTypeClass = resolveClass(resultType);  String resultSetType = context.getStringAttribute("resultSetType");  StatementType statementType = StatementType.valueOf(context.getStringAttribute("statementType", StatementType.PREPARED.toString()));  ResultSetType resultSetTypeEnum = resolveResultSetType(resultSetType);  String nodeName = context.getNode().getNodeName();  SqlCommandType sqlCommandType = SqlCommandType.valueOf(nodeName.toUpperCase(Locale.ENGLISH));  boolean isSelect = sqlCommandType == SqlCommandType.SELECT;  boolean flushCache = context.getBooleanAttribute("flushCache", !isSelect);  boolean useCache = context.getBooleanAttribute("useCache", isSelect);  boolean resultOrdered = context.getBooleanAttribute("resultOrdered", false);  // Include Fragments before parsing  XMLIncludeTransformer includeParser = new XMLIncludeTransformer(configuration, builderAssistant);  includeParser.applyIncludes(context.getNode());  // Parse selectKey after includes and remove them.  processSelectKeyNodes(id, parameterTypeClass, langDriver);  // Parse the SQL (pre: <selectKey> and <include> were parsed and removed)  SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass);  String resultSets = context.getStringAttribute("resultSets");  String keyProperty = context.getStringAttribute("keyProperty");  String keyColumn = context.getStringAttribute("keyColumn");  KeyGenerator keyGenerator;  String keyStatementId = id + SelectKeyGenerator.SELECT_KEY_SUFFIX;  keyStatementId = builderAssistant.applyCurrentNamespace(keyStatementId, true);  if (configuration.hasKeyGenerator(keyStatementId)) {  keyGenerator = configuration.getKeyGenerator(keyStatementId);  } else {  keyGenerator = context.getBooleanAttribute("useGeneratedKeys",  configuration.isUseGeneratedKeys() && SqlCommandType.INSERT.equals(sqlCommandType))  ? new Jdbc3KeyGenerator() : new NoKeyGenerator();  }  builderAssistant.addMappedStatement(id, sqlSource, statementType, sqlCommandType,  fetchSize, timeout, parameterMap, parameterTypeClass, resultMap, resultTypeClass,  resultSetTypeEnum, flushCache, useCache, resultOrdered,   keyGenerator, keyProperty, keyColumn, databaseId, langDriver, resultSets);  
}  

  

?

接下來(lái)的操作,也是根據(jù)配置的屬性,然后通過(guò)建造者創(chuàng)建mappedStatement對(duì)象。并添加到configuration全局對(duì)象上。

轉(zhuǎn)載于:https://www.cnblogs.com/qlqwjy/p/7866982.html

總結(jié)

以上是生活随笔為你收集整理的MyBatis启动:MapperStatement创建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

成人av免费电影 | 99国产在线观看 | 国产在线观看高清视频 | 天天做天天爱天天爽综合网 | 亚洲闷骚少妇在线观看网站 | 免费高清在线视频一区· | 在线观看视频亚洲 | 99久久久久久久久久 | 91爱爱电影 | 成年人免费在线看 | 狠狠操狠狠操 | 操操综合| 国内毛片毛片 | 免费大片av| 精品久久久久一区二区国产 | 午夜av激情| 精品国内自产拍在线观看视频 | 中文字幕 在线看 | 午夜av激情 | 欧美久久久影院 | 国产成人一区二区三区免费看 | 在线免费高清一区二区三区 | av一区在线| 在线观看日韩免费视频 | 色婷婷久久 | 成年人电影毛片 | 一本色道久久综合亚洲二区三区 | av播放在线 | 日韩系列 | 国产精品自产拍在线观看桃花 | 免费看黄网站在线 | 久久兔费看a级 | 国产亚洲人成网站在线观看 | av动态图片 | 99国产精品久久久久老师 | 久久久国产网站 | 欧美日本三级 | 中文字幕123区 | 99r精品视频在线观看 | 日本午夜免费福利视频 | 又湿又紧又大又爽a视频国产 | 免费看在线看www777 | 蜜臀av夜夜澡人人爽人人 | 国产特黄色片 | 91麻豆精品一区二区三区 | 91粉色视频| 最近日本字幕mv免费观看在线 | 久久精品国产免费看久久精品 | 欧美综合色在线图区 | 婷婷黄色片 | 婷婷久久精品 | 黄色网免费 | 亚洲人成人在线 | 国产精品九九九九九九 | 国产高清视频色在线www | 欧美一进一出抽搐大尺度视频 | 99免费在线播放99久久免费 | 91九色综合 | 怡红院av久久久久久久 | 日韩在线观看三区 | 欧美小视频在线 | 国产精品毛片久久蜜 | 免费精品久久久 | 97在线视频免费观看 | 精品在线视频观看 | 国产精品一区二区在线观看 | 麻豆视频免费在线播放 | 日韩av影视在线 | 日韩亚洲在线观看 | 国产精品一区二区免费 | 亚洲精品综合在线 | 日本中文字幕在线免费观看 | 亚洲成人资源在线观看 | 免费视频久久久久 | 波多野结衣在线播放一区 | 久久玖 | 久久精品中文字幕一区二区三区 | 亚洲天天做| 日韩欧美v | 97网在线观看 | 久久99精品久久久久久秒播蜜臀 | 成人久久毛片 | 香蕉视频免费在线播放 | 一区二区电影在线观看 | 91视频3p| 成人9ⅰ免费影视网站 | 亚洲国产小视频在线观看 | 在线观看深夜福利 | 精品在线观看视频 | 91自拍视频在线观看 | 免费看黄在线看 | 久久久国产影院 | 亚洲狠狠婷婷综合久久久 | 免费看片亚洲 | 国产中文字幕国产 | 欧美一级电影片 | 亚洲国产精品传媒在线观看 | 久热久草在线 | 久久精品123 | 九九免费在线观看 | 日韩高清成人在线 | 欧美污网站| 九九视频免费观看视频精品 | 国产精品久久久久影视 | 亚洲精品短视频 | 欧美日韩国产二区三区 | 亚洲综合在线播放 | 久久午夜国产精品 | 黄色毛片在线观看 | 免费色av | 成人免费视频网站在线观看 | 色多视频在线观看 | 亚洲黄色免费网站 | 在线观看国产成人av片 | 国产电影黄色av | 国产人免费人成免费视频 | 最近更新中文字幕 | 亚洲aⅴ免费在线观看 | 欧美亚洲专区 | 草久在线播放 | 精品国产91亚洲一区二区三区www | 成人av网站在线播放 | 亚洲精品视频在线观看网站 | 日韩视频在线不卡 | 日韩免费电影一区二区 | 国产中文字幕亚洲 | 中文字幕国产视频 | 亚洲电影一区二区 | 久久99精品一区二区三区三区 | 精品一区91 | 在线免费观看视频你懂的 | 精品av网站 | 337p日本大胆噜噜噜噜 | 日日夜夜狠狠干 | 国产录像在线观看 | 成人性生交大片免费观看网站 | 天天天天色射综合 | 天天夜夜亚洲 | 国产精品亚洲片在线播放 | 欧美日韩午夜在线 | 三级黄色a| 国内精品视频在线 | 日韩av视屏在线观看 | 在线观看国产一区二区 | 亚洲精品高清在线观看 | 国产精品免费在线播放 | 91精品国自产在线偷拍蜜桃 | 91亚洲成人| 成人久久综合 | 精品国产1区2区 | 五月天久久综合 | 在线视频久久 | 天天操天天是 | 国产一区二区久久久 | 日韩在线短视频 | 精品国产一区二 | 丝袜少妇在线 | 91亚洲国产成人 | av免费在线播放 | 五月婷婷在线视频观看 | 亚洲日本va午夜在线电影 | 天天舔天天射天天操 | 色爽网站 | 欧美另类性 | 久久久久久久久久免费视频 | 91视频a| 日韩爱爱网站 | 特级aaa毛片 | 中文在线字幕免 | 成人精品久久久 | 日本黄色免费观看 | 最新中文字幕在线资源 | 久久影视一区 | 亚洲午夜久久久久久久久电影网 | 99re6热在线精品视频 | 欧美久久九九 | 欧美特一级| 亚洲视频在线观看免费 | 中文不卡视频在线 | 久久影院精品 | 中文字幕国内精品 | 久久综合狠狠综合久久综合88 | 午夜免费福利片 | av中文字幕亚洲 | 日批在线看 | www色婷婷com| 亚洲伊人网在线观看 | 久久综合综合久久综合 | 久久精品99| av电影免费在线看 | 狠狠色丁香 | 超碰97人 | 欧美一级性生活视频 | 久久精品视频播放 | 在线电影av | 亚洲免费国产 | 99久久婷婷国产一区二区三区 | 欧美 日韩 国产 中文字幕 | 一区二区三区高清在线观看 | 日韩欧美在线观看一区二区三区 | 人人精品久久 | 国产精品99蜜臀久久不卡二区 | 激情五月网站 | 在线视频日韩 | 国产xx视频 | 亚洲精品永久免费视频 | 免费看片网站91 | 久久久久久影视 | 久久综合九色综合欧美狠狠 | 深夜免费福利在线 | 日韩电影在线视频 | 99久久久国产精品免费观看 | 国产精品久久一卡二卡 | 视频一区二区三区视频 | 超碰人人做 | 在线视频久久 | 日韩在线观看电影 | 日韩大片免费在线观看 | 黄a网| 久久一区精品 | av在线网站大全 | 免费观看9x视频网站在线观看 | 国产精品久久视频 | 九九免费精品 | 久久成人毛片 | 国产精品久久一 | 亚洲视频高清 | 亚洲免费资源 | 免费在线观看av网站 | 一区二区不卡 | 国产高清不卡一区二区三区 | 最近中文字幕久久 | 最新国产精品视频 | 婷婷激情小说网 | 黄网在线免费观看 | 成人在线观看日韩 | 天天色天天干天天色 | 国产精品 视频 | 国产69精品久久99不卡的观看体验 | 国产亚洲精品无 | 在线免费观看黄色大片 | a黄在线观看 | 日本乱码在线 | 久草精品在线观看 | 午夜精品久久久久久久99无限制 | 成人免费91| av 一区二区三区 | 精品高清美女精品国产区 | 国产精品久久久久一区二区国产 | 成人中心免费视频 | 国产97色 | 在线免费三级 | 久久66热这里只有精品 | 国产精品99久久久久人中文网介绍 | 麻豆你懂的| 日韩免费播放 | av丝袜天堂 | 国产传媒中文字幕 | 97视频网址 | 99久久er热在这里只有精品66 | 国产成人亚洲在线观看 | 亚洲自拍偷拍色图 | 99国内精品久久久久久久 | 国产偷国产偷亚洲清高 | 五月婷婷六月丁香激情 | 中文字幕在线播放一区 | 日韩精品一区二区三区免费视频观看 | 免费在线播放av电影 | 在线观看免费色 | 国产中文字幕网 | 日韩理论 | 黄色三级网站在线观看 | 久久草 | 69久久久| 成人一级片免费看 | 在线影院 国内精品 | 99免费视频 | 欧美日韩一区二区在线观看 | 狠狠躁夜夜av | 狠狠狠狠狠狠操 | av亚洲产国偷v产偷v自拍小说 | 四虎国产 | 亚洲理论电影 | 特级西西444www大精品视频免费看 | 97成人精品视频在线观看 | 美女久久99| 欧美最新大片在线看 | 伊人色综合久久天天 | 日韩免费视频在线观看 | www91在线观看 | 欧美另类高清 videos | 国产一区二区视频在线播放 | 91麻豆.com| 成年人视频免费在线 | 欧美男同视频网站 | 亚洲精品视频在线看 | 国产亚洲观看 | 日韩欧美精品在线观看视频 | 中文字幕在线影院 | 亚洲免费一级电影 | 91你懂的 | 在线播放日韩av | 亚洲国产成人在线播放 | 波多野结衣一区二区 | 久久午夜色播影院免费高清 | 欧美精品亚州精品 | 深夜男人影院 | 久久成人国产精品 | 亚洲国产精品成人综合 | 亚州精品天堂中文字幕 | 四虎精品成人免费网站 | 亚洲精品综合一区二区 | 日韩色在线观看 | 99精品视频在线观看免费 | 日本精品视频免费 | 欧美最新大片在线看 | 中文字幕在线观看三区 | 久久久久国 | 国产精品手机在线 | 日日夜夜天天人人 | 五月婷婷视频 | 国产亚洲婷婷 | 亚洲午夜久久久影院 | 日韩一区二区三区高清免费看看 | 欧洲一区二区三区精品 | 久久不卡免费视频 | 成人试看120秒 | 麻豆国产在线视频 | 久久精品国产一区二区三区 | 精品国产一二三四区 | 国产看片网站 | 日韩在线视频网 | 91视视频在线直接观看在线看网页在线看 | 视频在线观看99 | 久久艹影院 | 日韩二区在线观看 | 超碰在线最新 | 亚洲视频 视频在线 | 97成人精品| 亚洲成人精品在线观看 | 国产美女久久 | 91精品国产麻豆国产自产影视 | 国产精品久久久久久99 | 中文字幕 国产视频 | 国产激情小视频在线观看 | 激情欧美一区二区免费视频 | 黄色网址中文字幕 | 久久久久免费精品国产 | 黄色a一级视频 | 亚洲激情 在线 | 成人a视频在线观看 | 国产第一福利 | 久久成熟 | 国产专区欧美专区 | 久久精品视频免费观看 | 色偷偷av男人天堂 | 成年人看片网站 | 免费看一级| 亚洲狠狠婷婷综合久久久 | 久操伊人 | 麻豆国产精品永久免费视频 | 亚洲九九九在线观看 | 国产成人一区二区精品非洲 | 国产3p视频| 国产精品不卡在线 | 亚洲视频1区2区 | 日本性生活一级片 | 成人资源网 | 国产韩国日本高清视频 | 精品美女在线视频 | 免费三级av | 韩国中文三级 | 日本大片免费观看在线 | 国产精品av久久久久久无 | 久久国产精品影视 | 日韩免费电影网 | 夜夜澡人模人人添人人看 | 黄色特一级片 | 亚洲精品国偷自产在线99热 | 在线视频黄 | 国产夫妻性生活自拍 | 国产做a爱一级久久 | 99精品在线播放 | 国产在线观看你懂得 | 狠狠干婷婷 | 亚洲粉嫩av | 久久五月天综合 | 亚洲成熟女人毛片在线 | 国产日韩一区在线 | 探花系列在线 | 国产高清在线永久 | 国产免费大片 | 91精品一区国产高清在线gif | 在线观看免费视频你懂的 | 免费观看午夜视频 | 久久精品视频国产 | 日韩精品一区二区在线观看视频 | 天天曰夜夜爽 | 久久成人久久 | 又色又爽又黄 | 天天透天天插 | 粉嫩av一区二区三区四区 | 99精品国产福利在线观看免费 | 又色又爽的网站 | 亚洲电影图片小说 | 国产h在线观看 | 免费国产视频 | 久草视频中文在线 | 伊人久久精品久久亚洲一区 | 国产在线观看,日本 | 五月婷婷久草 | 91字幕| 日韩在线二区 | 日韩a级免费视频 | 午夜视频导航 | 国产成人精品一区二区三区网站观看 | 黄www在线观看 | 草樱av| 免费的黄色av | 欧美性大战 | 麻豆视频免费播放 | 精品久久久久久久久久久院品网 | 99精品在线观看 | 亚洲 成人 一区 | 国产一级高清 | 不卡精品视频 | 99久久精 | 国产精品免费在线播放 | 天天天射 | 国产精品一区二区久久精品爱微奶 | 成人黄色小说网 | 在线免费视频你懂的 | 一本—道久久a久久精品蜜桃 | 国产黄色片久久 | 97色狠狠 | 6080yy精品一区二区三区 | 激情久久伊人 | 99久久精品国产一区二区成人 | 国产69精品久久99的直播节目 | 亚洲精品视频在线观看网站 | a级国产片 | 国产韩国精品一区二区三区 | 久久久久国产一区二区三区四区 | 国产一区二区高清不卡 | 91麻豆网站| 玖玖999| 免费三级黄| 日韩高清一区二区 | www.av小说 | 深爱激情久久 | 天天操天天操天天操天天 | 欧美老人xxxx18 | 日本韩国在线不卡 | 欧美一级淫片videoshd | 免费裸体视频网 | 久草在线费播放视频 | 91色综合| 国产黄色片免费观看 | 欧洲在线免费视频 | 婷婷亚洲五月 | 国产999精品久久久久久绿帽 | 极品久久久久久久 | av丝袜制服 | 日韩视频在线不卡 | 五月天综合 | 九色精品在线 | 国内精品免费 | 久久精品一二三 | av中文字幕在线免费观看 | 综合久久精品 | 最新av在线免费观看 | 亚洲男人天堂a | 免费一级特黄录像 | 亚洲九九九在线观看 | 亚洲精品国产麻豆 | 成人日批视频 | 奇米影视8888在线观看大全免费 | 九九精品在线观看 | 日韩免费久久 | 国产精品a成v人在线播放 | 亚洲精品字幕 | 久久久久亚洲精品 | 久久国产精品99久久久久 | 99久久99久久 | 97在线影院 | 欧美天天综合网 | 黄色激情网址 | 久久久精品网站 | 国产一级大片在线观看 | 99精品网站| 美女啪啪图片 | 色综合久久天天 | 黄色在线视频网址 | 成人a级网站 | 天天爽夜夜爽精品视频婷婷 | 免费看的黄网站 | 欧美视频在线观看免费网址 | 青春草视频在线播放 | 久久伊人精品一区二区三区 | 中文字幕成人 | 九九电影在线 | 久日精品 | 日韩精品免费在线播放 | 日韩av在线看 | 成人一级黄色片 | 精品女同一区二区三区在线观看 | 亚洲激情| 又色又爽的网站 | 亚州成人av在线 | 色婷婷视频在线 | 精品一区二区av | 欧美日韩在线视频一区二区 | av资源免费观看 | 国产区精品区 | 在线电影播放 | 91超在线 | 色综久久| 日韩理论电影在线 | 狠狠狠色丁香婷婷综合久久88 | 色婷婷在线播放 | 国产亚洲高清视频 | 波多野结衣综合网 | 日韩欧美一级二级 | 亚洲精品乱码久久久久久蜜桃不爽 | 激情av资源 | 五月天六月丁香 | 国产精品久久久久久超碰 | 不卡精品 | 久久久久久国产精品美女 | 亚洲 欧美 另类人妖 | 天天射天天舔天天干 | 激情大尺度视频 | 欧美一区在线看 | 久热国产视频 | 日韩av片免费在线观看 | 欧美日韩免费视频 | 美女网站在线观看 | 1024久久 | 国产精品久久久久久久久久99 | 精品久久久久久久久久久院品网 | 国产色视频一区二区三区qq号 | 国产黄色片网站 | 国产一区二区久久精品 | 人人爱在线视频 | 亚洲专区在线播放 | 国产高清黄 | 日韩欧美在线综合网 | 亚洲视频国产 | 日韩av片在线 | www.夜色.com | 91九色porny蝌蚪视频 | 91久久在线观看 | 在线精品视频在线观看高清 | 成人久久18免费网站麻豆 | 91精品久久久久久久91蜜桃 | 亚洲成人黄色av | 在线一级片 | 一区二区三区在线不卡 | 国产精品一区二区精品视频免费看 | 亚洲精品福利在线 | 精品国产伦一区二区三区观看说明 | 免费在线国产视频 | 中文字幕免费高清在线 | 久久激情五月激情 | 五月天婷婷在线播放 | 岛国av在线免费 | 黄色91免费观看 | 天堂网一区二区三区 | 一区二区三区国产欧美 | 中文字幕在线观看免费 | 成人 亚洲 欧美 | 国产精品一区二区三区在线播放 | 在线中文字幕网站 | 日日草视频 | 欧美日韩在线精品一区二区 | www久久com| 欧洲在线免费视频 | 99色人 | 欧美极品少妇xbxb性爽爽视频 | 国产精品久久久久亚洲影视 | 欧美日韩免费在线视频 | 午夜在线免费观看视频 | 能在线看的av| 婷婷在线视频观看 | 成人影片免费 | 免费av观看网站 | 久久久鲁 | 国产精品久久视频 | 国产精品成人a免费观看 | 丁香九月激情综合 | 免费在线国产黄色 | 国产精品美女久久久久久久 | 久久夜夜爽 | 999久久国产精品免费观看网站 | 色综合久久精品 | 久久看片网站 | 麻豆久久精品 | 亚洲成av人片 | 久久精品老司机 | 欧美污污网站 | 久久艹99| 四虎国产视频 | 欧美精选一区二区三区 | 992tv又爽又黄的免费视频 | 日韩中文字幕电影 | 成人av一区二区三区 | 精品综合久久久 | 中国一级片在线观看 | 亚洲成人网在线 | 干av在线 | 欧美精品久久久久久久亚洲调教 | 激情视频一区二区三区 | 狠狠色综合网站久久久久久久 | 一区二区三区四区五区在线 | 久久伊人八月婷婷综合激情 | 免费在线观看日韩 | 国产成人av片 | 日韩精品亚洲专区在线观看 | 欧美日韩性生活 | 狠狠操夜夜 | 激情视频久久 | 激情五月婷婷综合 | 国产精品成人免费精品自在线观看 | 午夜在线观看一区 | 日韩电影在线看 | 国产精品一区二区免费视频 | 在线 高清 中文字幕 | 欧美日韩不卡在线观看 | 国产午夜三级一区二区三桃花影视 | 久久久久国产精品一区二区 | 久久免视频 | 久久精品成人欧美大片古装 | 日韩在线免费 | 久草精品视频在线看网站免费 | 国产一级黄色免费看 | 国产精品成人av电影 | 日韩av免费一区 | 精壮的侍卫呻吟h | 日韩电影在线观看中文字幕 | 久久香蕉国产 | 国产免费观看久久黄 | 免费观看mv大片高清 | 国产精品一区二区你懂的 | 久久精品第一页 | 91精品免费在线观看 | 日本动漫做毛片一区二区 | 一本一本久久a久久精品综合 | 天天看天天干天天操 | 国产视频日本 | 中文字幕精品久久 | 91原创在线观看 | 久久爽久久爽久久av东京爽 | 蜜桃av综合网 | 午夜在线免费观看视频 | 日韩在线观看视频网站 | 欧美日韩另类在线 | 亚洲黄色av| 国产黄色在线观看 | 美女视频一区二区 | 97成人啪啪网 | 国产精品美女久久久久久久久久久 | 国内精品视频一区二区三区八戒 | 人成电影网 | 色www. | 96精品高清视频在线观看软件特色 | 久久久免费观看 | 欧美精品首页 | 免费在线观看av网站 | 狠狠色丁香久久婷婷综合五月 | 国产精品亚洲片在线播放 | 精品免费一区 | 久久99精品久久只有精品 | 日本久久久久久久久久久 | 九九免费在线视频 | 欧美 亚洲 另类 激情 另类 | 日韩系列在线观看 | 国产不卡在线视频 | 久久国产精品久久w女人spa | 西西大胆啪啪 | 日韩免费二区 | 激情综合五月天 | 美女久久久久 | 精品亚洲视频在线 | 中文字幕电影一区 | 国产精品99久久久久久小说 | 久久久久久久久久久福利 | 在线国产精品一区 | 久久久伦理 | 在线观看国产福利片 | 在线国产精品视频 | 日韩中文字幕在线观看 | 在线观看岛国片 | 国产在线 一区二区三区 | 月下香电影 | 婷婷色吧 | 亚洲伊人成综合网 | 国产美腿白丝袜足在线av | 蜜臀av夜夜澡人人爽人人桃色 | 国产破处精品 | 99视频这里有精品 | 国产精品毛片久久久久久久久久99999999 | 97视频资源| 天天综合网久久 | 国产成人精品一区在线 | 婷婷新五月| 国产91精品在线播放 | 精品欧美小视频在线观看 | 日韩免费成人 | 成人av动漫在线 | 成人午夜电影网站 | 欧美日韩一级视频 | 国产精品九九九九九九 | 免费日韩一区 | 国产精品成人久久 | 国产精品美女久久久久久 | 亚洲97在线| 久久精品视频一 | 欧美三级在线播放 | 亚洲久草网 | 天天射天天操天天色 | 午夜 久久 tv | 久草免费看 | 国产三级久久久 | 不卡的av在线播放 | 在线免费成人 | 国产一级一片免费播放放 | 中文字幕中文字幕在线中文字幕三区 | h网站免费在线观看 | 中文字幕免费久久 | 夜夜高潮夜夜爽国产伦精品 | 91麻豆免费视频 | 免费视频97 | 欧美91精品久久久久国产性生爱 | 青青河边草免费观看 | 国产精品午夜久久久久久99热 | 欧美日韩不卡在线视频 | 久久久免费毛片 | 国产一区二区久久 | 中文字幕在线免费看线人 | 欧美一区二区三区在线播放 | 成人一级影视 | 免费三级影片 | 日韩精品久久久 | 激情丁香在线 | 少妇性xxx | 亚洲一区二区视频在线播放 | 色网站黄 | 久久精品国产第一区二区三区 | 国内精品毛片 | 免费黄a大片 | 在线观看日韩一区 | 区一区二区三在线观看 | www狠狠 | 亚洲精品日韩在线观看 | 国产午夜精品一区二区三区在线观看 | 亚洲国产片 | 97在线视| 99视频免费在线观看 | 亚洲精品裸体 | 亚洲在线视频免费 | 黄色av影院 | 精品中文字幕在线观看 | 国产在线999 | 亚洲精品视频www | 国产精品毛片久久久久久久 | 亚洲午夜激情网 | 综合久久一本 | 超碰伊人网 | 色激情五月| 久久久久中文 | 欧美在线视频a | 在线观看你懂的网址 | 九九久久久久久久久激情 | av片免费播放 | 国产精品大片 | 91在线日本| 成人午夜网址 | 国产精品久久片 | 欧美激情综合网 | 日韩欧美一区二区三区在线观看 | 日韩欧美视频一区二区 | 五月天综合| 国产伦理久久精品久久久久_ | 人人插超碰 | av一区二区三区在线观看 | 91成人在线免费观看 | 亚洲一二三久久 | 五月婷婷另类国产 | 天天操天天色天天 | 手机在线黄色网址 | 最近最新mv字幕免费观看 | 日女人免费视频 | 亚洲午夜av| 国产你懂的在线 | 日韩黄色在线观看 | 日韩字幕 | 国产97视频| 久草在线在线精品观看 | 国产手机视频在线观看 | avcom在线 | 欧美另类69 | 91久久久久久久一区二区 | 成人久久网 | 日韩精品资源 | 精品国产一区二区三区噜噜噜 | 国产精品完整版 | 国产超碰在线观看 | 色国产精品一区在线观看 | 一区二区伦理 | 欧美专区亚洲专区 | 在线播放日韩 | 欧美一级看片 | 最近中文字幕第一页 | 日韩av午夜 | 日韩欧美一区二区不卡 | 亚州国产精品久久久 | 四虎国产精品免费 | 69精品久久久 | 国产成人免费在线 | 久久视频在线看 | 最近中文字幕在线中文高清版 | 亚洲国产精品成人va在线观看 | 毛片永久新网址首页 | 国产精品一区二区三区视频免费 | 亚洲专区中文字幕 | av黄色在线播放 | 久久久免费国产 | 五月天,com| 亚洲精品国产自产拍在线观看 | 精品国产一区二区三区四区在线观看 | 在线视频观看你懂的 | 国产黄色片免费在线观看 | 中文字幕中文字幕在线一区 | 欧美精品在线观看免费 | 日韩久久久久久久久久 | 一区二区视频免费在线观看 | 天天操天天干天天干 | 亚洲精品国产精品乱码在线观看 | 天天操天天操天天操天天操天天操天天操 | 在线观看视频h | 日韩黄色一级电影 | 欧美日韩国产综合网 | 国产精久久 | 中文字幕 国产 一区 | 国产成人久久av977小说 | 手机看片国产 | 黄色影院在线观看 | 婷婷丁香激情 | 中文一区在线观看 | 久操视频在线观看 | 人人爽人人爽人人爽人人爽 | 国产美女被啪进深处喷白浆视频 | 91尤物在线播放 | 日本丰满少妇免费一区 | 国产女人40精品一区毛片视频 | 久久久久国产一区二区 | 一区二区三区视频网站 | 中文字幕在线视频免费播放 | 人交video另类hd | 激情综合婷婷 | 欧美国产一区在线 | 四川bbb搡bbb爽爽视频 | 欧美激情精品久久久久久免费 | 黄色三级视频片 | 精品成人a区在线观看 | 人人狠 | 欧美日韩国产综合网 | 99久高清在线观看视频99精品热在线观看视频 | 91av视频免费在线观看 | 国产在线小视频 | 日黄网站 | 国产96视频| 日本精品视频网站 | 亚洲国产精品小视频 | 综合天天色 | 中文字幕免费观看视频 | 国产最新福利 | 国产精品毛片一区视频播不卡 | 91精品在线看 | 精品国产大片 | 狠狠黄| 久久久网站 | 免费观看国产视频 | 国产伦精品一区二区三区照片91 | 亚洲欧洲一级 | 在线播放 一区 | 欧美一区,二区 | 日本精品久久久久中文字幕 | 91成人在线看 | 亚洲黄网站| 久久视频精品在线 | 349k.cc看片app| 91九色蝌蚪视频网站 | 天天干,天天射,天天操,天天摸 | 国内精品福利视频 | 久久免费99精品久久久久久 | 亚洲全部视频 | 在线免费观看黄色 | 午夜精品久久久久久久爽 | 免费在线a | 国内精品久久久久影院优 | 在线韩国电影免费观影完整版 | 亚洲色图美腿丝袜 | 99综合视频 | 日韩av中文字幕在线免费观看 | 天天色成人网 | 中文字幕免费不卡视频 | 99视频久 | 婷婷久久网 | 91亚洲精| 黄污网站在线 | 国产精品久久久久av福利动漫 | 91免费高清 | 91看片在线播放 | 色婷婷久久久综合中文字幕 | 成年人app网址 | 91精品久久久久久综合乱菊 | 在线亚洲成人 | 亚洲毛片一区二区三区 | 亚洲激情视频 | 天天干,天天干 | 久久公开免费视频 | 色狠狠久久av五月综合 | 中文字幕免费久久 | 99理论片 | 中文在线免费看视频 | 日韩电影中文字幕在线观看 | 天堂在线视频免费观看 | 天天爽网站| 欧美日韩中文国产一区发布 | 欧美日韩在线观看一区 | 日韩免费网址 | 在线观看激情av | 久久精品视频国产 | 网址你懂的在线观看 | 欧美午夜精品久久久久 | 国产a精品 | 波多野结衣小视频 | 久久久高清一区二区三区 | 婷婷色网站 | 黄色毛片视频免费观看中文 | 国产黄色在线网站 | 亚洲高清资源 | 麻豆91精品视频 | 久青草电影 | 丁香综合五月 | 在线精品观看国产 | 你操综合 | 一区二区在线不卡 | 国产精品初高中精品久久 | 成年人黄色在线观看 | 国产美女精品视频 | a成人v在线| 色偷偷88欧美精品久久久 | 精品久久久久久久久久久久 | 91完整版| 午夜在线看片 | 久久伦理电影 | 亚洲第二色 | 91激情视频在线 | www.狠狠插.com | 国产毛片aaa | 久久er99热精品一区二区三区 | 欧美天堂视频在线 | 韩国一区视频 | 国产一级二级三级在线观看 | 国产精品 欧美 日韩 | 国产精品电影一区 | www.国产毛片 | 最近中文字幕视频完整版 | 免费福利视频网站 | 蜜臀久久99精品久久久无需会员 | 欧美欧美 | 日日夜夜网 | 免费视频三区 | av网站有哪些 | 久草在线手机视频 | 日本中文字幕在线看 | 麻豆精品传媒视频 | 欧美激情综合五月色丁香 | 亚洲禁18久人片 | 91香蕉亚洲精品 | 99久久国产免费,99久久国产免费大片 | 亚洲精品 在线视频 | 欧美一级黄色网 | 久久午夜免费观看 | 亚洲精品男人的天堂 | 综合伊人av | 中文字幕日韩伦理 | 狠狠撸电影 | 色婷婷欧美 | 江苏妇搡bbbb搡bbbb | 国产手机在线精品 | 婷婷五综合 | 中文字幕av最新 | 国产玖玖精品视频 | 在线观av | 成人黄在线观看 |