国产凹凸在线-国产拗女一区二区三区-国产白白视-国产白领-国产白拍-国产白丝jk被疯狂输-国产白丝喷-国产白丝在线

金喜正规买球

Step by Step-構建自己的ORM系列-數據訪問層

轉帖|其它|編輯:郝浩|2010-12-08 15:54:49.000|閱讀 493 次

概述:當然我寫這個系列的過程中,也會有自己認識偏激的地方,或者思路不正確的地方,還請大伙多多指出和批評。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

一、開篇

  當然我寫這個系列的過程中,也會有自己認識偏激的地方,或者思路不正確的地方,還請大伙多多指出和批評。我也是在我目前的項目中學習到了很多的寶貴的經驗,其實我們應該能看到ORM給我們提供的方便和不便之處,我們取其精華,剔除糟粕,不過這真的很難。我其實對一些流行的ORM的底層實現,研究的不多也不深,像Nhibernate,我只是了解Hibernate,是當時從JAVA中了解過來的,不深入,Castle框架倒是用過一段時間,EntityFreamWork,我也沒有用過,只是象征性的下載最新版本,體驗了下AOP的方式,我感覺其實有很多的時候,我們使用AOP的方式,能夠改進我們程序的靈活性。這塊可能還需要大牛們多多指點。

  我理想的ORM是實現持久化的透明,這個怎么理解呢?就是說我在程序的開發中,我不想在業務代碼中書寫相應的持久化操作,也不關心業務層中的去如何調用你的ORM,去完成CRUD的操作。我只關心我的業務邏輯,這個有點像DDD(領域驅動開發)里面的領域層了,只關心領域內部的業務邏輯,而不關心其他的東西,這樣方便我們快速的抓住關注的東西,而盡量讓與領域無關的東西不要影響業務領域邏輯的實現。

二、摘要

  本篇主要開始講述《Step by Step-構建自己的ORM系列-數據訪問層》關于數據訪問層的部分,其實前面也對這塊的內容有了一定的介紹了,其實本篇就是教你如何完成ORM中的數據訪問層的操作,這里是提供統一的數據訪問方法的實現。當然這里的操作還是主要集中在數據庫的操作,包括如何根據實體對象返回實體的列表,包括生成SQL語句的幾類實現,還包括一些實現后續的ORM的配置管理的維護,這里就是提供可視化的XML文件的配置,這個具體怎么來做呢?因為我們平時針對ORM的使用,都是直接修改XML文件,我們可以提供一個可視化的界面,讓那個用戶配置這些相應的設置。通過這些配置,我們可以實現數據庫的平滑的遷移,緩存應用的配置,包括其他的一些相關設置信息。總體來說這些操作都可以依托于,我們這里的數據訪問層來完成。

  我們來看看ORM中數據訪問層的重要作用和地位吧:

   

  上圖我們知道,我們所有的相關功能的基礎,都是基于數據訪問層來做的,所以我們處理好這個層的相關邏輯后,后續的問題就會比較容易開展。下面我們就會針對這些疑問開始一個個的解決我們的數據訪問層應該提供的相關功能!大體的功能應該有如下功能:

  1、持久化的操作方法CUD??梢詳U展提供創建表+其他的修改表等相關的自動腳本工具。提供持久化透明的方式。

  2、提供緩存服務,將對象的相應映射信息緩存起來,這樣后續執行生成語句等操作,效率上會是很大的提升。

  3、我們在處理對象對于Update語句,應該能處理好只能更變化的信息,如果沒有發生變化,那么我們是不是不用執行更新操作了呢?減少數據庫的操作次數。

  4、提供基礎的查詢方法,以后所有的基于ORM上的查詢基于這個查詢進行擴展。提供持久化透明的查詢方式。

  5、并發和事務的控制。我們這里可能提供一個內部的版本號的方式來做,一旦修改過這個對象或者發生改變,任何時候的操作,我們都是針對這個版本號的記錄來做的,版本號通過內部提供的方法來進行。

三、本文大綱

  1、開篇。

   2、摘要。

   3、本文大綱。

   4、ORM之數據訪問層分析。

   5、ORM相關代碼實現。

   6、本章總結。

四、ORM之數據訪問層分析

   我們先來針對上面的幾個問題,我們給出實現思路,來分析下給出的思路的可行性和如何實現的解析。具體的代碼下節給出核心實現方案。

  4.1、提供通用的持久化的操作

  這個具體的解析在上篇中已經給出了相應的思路了,我們通過在底層提供相應的方法來做。一般來說,對應數據庫的四種操作,我們在數據訪問層,也提供了相應的語句的自動構造的過程,具體的構造,我們前面給出的實現方案是通過特性來實現,特性中定義具體的數據庫字段,類型,長度等一些列的參數。我這里就不復述了,我這里分析下我們這樣實現的好處。我們知道繼承的方式是挺好的,我為什么這么說,通過提供一個基類,基類中定義通用的CUD的操作方法,這樣只要是繼承這個類的子類,都會有CUD的操作方法了,但是我們為了提供持久化透明的方案,那么無疑,對于持久化的操作,我們就不希望由業務邏輯層中的業務邏輯對象來完成,那么如何來做呢?我們通過數據訪問層,提供統一的操作方法,讓服務層來完成業務對象的持久化操作。這樣就能實現,持久化透明的方案。

  所以我們可以這樣來做,在數據訪問層中,我們提供一個接口,接口中定義持久化操作的幾類方案,通過不同的實現配置,我們可以在XML配置文件中進行指定,我們采用重量級的ORM還是輕量級的ORM,這樣我們也理想的實現了低耦合的特性。

  同時,對于不同的文件的操作,我們可以支持多文件類型的寫入,當然對于不同的數據庫存儲,如果我們利用關系型數據庫我們需要ORM,對于對象數據庫的操作,或者XML文件的操作,我們這時候的ORM就變了。

  4.2、提供緩存服務

  我們知道,我們第一篇中主要是通過自定義特性+反射的形式來處理:我們并沒有提供完整的特性操作,其實還有很多的情況,比如說,我們還可以提供對視圖的映射,提供一個視圖的特性等。還有其他的特性有很多,后續會給出完整的代碼結構,我們知道自定義特性+反射,如果每次在將對象映射成數據庫表的時候,那么效率上是多么的低下啊,那么這個時候,我們可以考慮使用緩存的方式,將數據庫表中的數據庫列與對象中的屬性列進行映射,我們可以把這些對應關系放在緩存中,那么如果我們在后續的處理中遇到與數據庫相關操作,需要進行對象映射的時候,我們都先會去緩存中查找有沒有指定鍵值的映射數據庫表列存在,存在取出生成SQL語句,否則通過反射取出對應的數據庫表列,放在緩存中。下面給出示意圖。將這個過程進行描述:

  

  當然我這里給出的肯定是反向的根據對象生成操作數據的SQL語句的方式。這里沒有考慮,當數據庫表發生變化的時候,我應該自動同步緩存中的映射集合信息,當然我們可以通過一定的策略,來實現這樣的雙向同步問題。例如如下的方式可能就是可行的方案。

  通過上述的方式,我們通過同步組件,在每次進行數據操作之前,我們可以應用更好的策略,比如記錄或者遍歷文件的修改狀態,對比文件的最后修改日期,是不是發生修改,或者當某個文件發生修改之后,我們記錄在某個配置文件中,這樣我們可以提高同步的效率,因為通過這樣的方式,我們不需要每次檢查對象是不是發生變化了,這樣我們如果發現對象沒有發生變化,那么我們就不要讓同步組件去檢測對象是否發生變化,這樣就能提高效率,同時支持當映射對象發生變化的時候,我們不用修改我們的關系數據庫。大家都知道,面向對象設計建模與關系數據庫的最大難題就是雙方的變化的同步性的方案是很難定的,我這里只是給出一個簡單的思路和方式,可能還有更好的方案,也請大家多多告訴我。

   4.3、Update語句的操作

  我不知道,你們在面試的時候,如果你經常開發底層的面向對象的ORM的時候,應該會遇到這樣的問題,我們在查詢一個映射對象的時候,我們可能只需要取出這個對象的部分列,而不是全部的數據列,這個時候,我們如何指定呢?就是填充對象的時候,我們只需要填充指定的列?或者我們需要在在保存編輯的時候,我們不更新未發生變化的數據庫,其實主要是要求,我們在生成SQL語句的時候,我們希望我們的更新語句中不要出現,沒有發生變化的數據列的設置,這個如何做到呢?我想我們可以通過如下的2種方式來做。

   1、通過對象的序列化,來復制一個對象,并且系統中緩存這個對象,在編輯之前,緩存,等到提交后,釋放這個對象。這個由系統默認的提供方法。前提是標記對象是編輯狀態,這樣在修改對象之前進行復制,不然如果修改完了,再復制就沒有什么意義了

  2、通過字典來保存更新數值的數據列,通過數據字典來存放。我們在字典中存放映射的數據列,將發生變化的數據列和數據列的值進行標記發生改變,我們在生成更新語句的時候。直接遍歷這個集合,將列狀態發生改變的列生成相應的操作語句即可。這些都是可行的方式,我們在前面的架構設計中也提到過的。都是給過思路的,這里我也不多復述了。

  4.4、提供基礎的查詢方法

   這里說的提供基礎的查詢方法,指的是基于數據庫操作之上,我們提供幾個常用的查詢方法,包括自動生成版本號的方法等,我們的版本號可以通過日期+流水號的形式來生成,或者是其他的情況。GUID也是可行的辦法。不過維護起來可能不是很方便。所以底層提供相應的操作方法更容易來做。

  我們這里考慮提供如下的基礎查詢方法,復雜的查詢方法,我們可以提供一個入口來做。例如我們提供如下幾類方法:

   1、底層生成版本號的方法,自增ID流水號,根據不同的生成規則自定義設置ID生成規則,來組織生成ID的通用方法。

   2、提供實體與數據庫行集之間的轉換,我們需要將數據庫記錄轉換為實體集合。通過查詢方法返回對象集合。這里提供返回指定主鍵的對象集合。

   3、返回一個數據表或者視圖中的所有記錄。

   4、返回傳入分頁個數,和分頁排序字段,分頁條件的分頁集合。

   5、返回指定列的查詢方法。(這里沒有想到好的辦法,怎么樣的形式比較靈活能夠動態的指定返回的列,比如說1列,10列,5列等),希望大家提出好的意見和建議!

   6、提供統一的入口,編寫SQL語句傳入到數據訪問層中進行查詢和檢索,根據指定的返回類型來返回泛型對象。

  4.5、并發和事務控制

   我想一個系統中必須考慮的就是事務處理了,我們進行批量操作的時候,如果數據不同步,那就太痛苦了,也是不能使用的系統的,我們希望我們的ORM能夠自動的集成事務和并發,當然這里說的并發是當用戶數上升到一定量的時候,就會產生這樣的問題,理論上來說只要有2個以上的用戶,就必須考慮并發操作!并發我們有幾個控制的思路,總體來說應該說說我們前面的設計的內部的一個自動生成的版本號,是最好的選擇。具體怎么個意思呢?我們來解釋下:

  對于并發控制,我們知道,并發控制的問題:寫丟失,讀出來的數據是臟數據,無疑就是這么2個比較常見的問題,那么我們如何來對寫丟失進行限制呢?目前通用的方案都是通過樂觀鎖來處理,二個人可以同時對某個信息進行讀取,但是只能有一個人在進行編輯,但是最后修改的內容會把前面修改的信息覆蓋掉,這是樂觀鎖的處理方式。

   悲觀鎖,則是只要有人在修改,那么可能你不能進行修改,也不能讀取,這種方式,當然可以保證信息的修改的同步性和一致性,但是用戶的易用性和友好性方面不夠人性化,相比來說,有人修改,就不能被其他人修改,但是可以讀取的方式體驗方面要差一些,不過各有使用的場景,一般來說,悲觀鎖是樂觀鎖的一個補充。

   我們這里既不是樂觀鎖,也不是悲觀鎖的形式,通過版本來對某個記錄的版本進行記錄,一旦發生改變,那么記錄的版本就要發生變化,我們這里對這個行集的版本的更新可以通過ORM提供的版本的生成規則來生成一個版本號,或者是通過觸發器來實現,當然性能也是我們需要考慮的部分。

  對于事務,我想一般的不是分布式操作的應用,我們通過數據庫提供的本身的事務服務來完成,基本上就可以滿足日常的需求,也沒有什么特別難的地方,我想這里我也就不詳細的說了,我們來簡單的說下,分布式事務的一致性,對于這種分布式的事務操作,我們可以采用離線并發模式來處理。這個怎么理解呢?就是通過工作單元來實現。我們把每一個操作看著一個工作單元,如果我們在執行某個事務操作的過程中,如果返回是0或者是其他的不是我們期望的結果時,我們不會進行任何的提交操作,如果全部執行通過,我們循環所有的工作單元進行提交,否則我們回滾所有的系統事務。我們把這樣的分布式事務,看作一個業務事務,由一些列的工作單元組成,這些工作單元看作是系統事務。

五、ORM相關代碼實現

  5.1、CUD的基本實現代碼:

  1,Create語句的實現:

   private Dictionary<string, Column> _autoIncrementColumns = new Dictionary<string, Column>();
private Dictionary<string, Column> _updateColumns = new Dictionary<string, Column>();

   public string TableName
{
get
{
return string.Empty;
}
}

   public Dictionary<string, Column> UpdateColumns
{
get
{
return this._updateColumns;
}
set
{
this._updateColumns = value;
}
}

   public Dictionary<string, Column> AutoIncrementColumns
{
get
{
return this._autoIncrementColumns;
}
set
{
this._autoIncrementColumns = value;
}
}

   public virtual IDbCommand GetDbCommand()
{
// 如果column的值沒有被更新過,則返回null
if (this.UpdateColumns.Count == 0)
{
return null;
}

   ArrayList fieldList = new ArrayList();
ArrayList valueList = new ArrayList();
SqlCommand cmd = new SqlCommand();

   foreach (Column column in this.UpdateColumns.Values)
{
fieldList.Add("[" + column.Key + "]");
valueList.Add("@" + column.Value);
}

   string fieldString = string.Join(" , ", (string[])fieldList.ToArray(typeof(string)));
string valueString = string.Join(" , ", (string[])valueList.ToArray(typeof(string)));
string cmdText = string.Format("INSERT INTO [{0}]({1}) VALUES({2})",
this.TableName,
fieldString,
valueString);

   string sqlGetIndentityID = null;

   if (this.AutoIncrementColumns.Count == 1)
{
sqlGetIndentityID = string.Format("SELECT [{0}] = SCOPE_IDENTITY()");
}

   if (sqlGetIndentityID != null)
{
cmdText = cmdText + " ; " + sqlGetIndentityID;
}

   cmd.CommandText = cmdText;

   return cmd;

   }
}

  下面給出Update語句,是從上面的更新集合中編輯,將列的狀態發生改變的列添加生成到語句中-示例代碼如下:

   public virtual IDbCommand GetDbCommand()
{
// 如果column的值沒有被更新過,則返回null
if (this.UpdateColumns.Count == 0)
{
return null;
}

   ArrayList fieldList = new ArrayList();
ArrayList valueList = new ArrayList();
SqlCommand cmd = new SqlCommand();

   string updateSQL=string.Empty;
foreach (Column column in this.UpdateColumns.Values)
{
if (column.State)
updateSQL += "[" + column.Key + "]=" + "@" + column.Value;
}

   string cmdText= string.Format("UPDATE {0} SET {1}={2}&quot;, updateSQL);

   cmd.CommandText = cmdText;

   return cmd;
}

  至于刪除的代碼比較簡單,我這里就不給出刪除的代碼了,總體來說形式是相同的。

  5.2、緩存服務代碼

  我有2篇關于緩存的介紹,緩存中最難搞的問題就是緩存的過期的問題,對應反射的性能問題也是存在過期的問題,比如說我們的數據庫表發生變化,或者對象中的屬性發生變化后,那么我們的緩存中的內容也需要進行更新,不然我們生成的數據庫操作語句將會不正確。我們這里的策略就是將映射出來的對象,放在服務器中的緩存中,當然對于B/S和C/S系統中可能采取的緩存方式和策略還是有區別的。B/S我們的緩存可以采用緩存到服務器中,或者是通過緩存服務器來完成,一般是通過Remoting來將服務器與緩存服務器完成通信。我們看看簡單的示例代碼吧:

  public class Cache
{
private static System.Web.Caching.Cache cache = HttpRuntime.Cache;//這里是默認取當前應用程序的服務緩存。

   public static object Get(string key)
{
return cache[key];
}

   public static bool Remove(string key)
{
return !(null == cache.Remove(key));
}

   public static void Set(string key, object value)
{
cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(3));
}
}

  上面給出的緩存類的示例代碼,具體的操作,使用反射后,將反射后對象元數據信息緩存起來,通過對象名來緩存:

  具體代碼如下:

   PropertyInfo[] property = null;
if (Cache.Get("") != null)
{
property = (PropertyInfo[])Cache.Get("");
}
else
{
Type t = Type.GetType("");

   property = t.GetProperties();
}

  通過上面的幾行簡單的代碼就能表達出我們上面講述的思路,具體如何過期,這個上面也給出了一些思路,可能大伙有更好的思路,我這里就不班門弄斧了。

   5.3,提供基礎的查詢服務

   我想大伙對于查詢語句的操作,應該說是司空見慣了吧,我們如何能更好的完成統一的查詢服務可能是我們關心的問題,我這里不會給出多數據庫的實現,但是可以給大伙一個思路,我們這里定義返回的查詢命令的時候,如果說支持多數據的話,可以定義一個統一的接口,不同的數據庫提供不同的實現接口,然后根據統一的ORM配置來調用不同的組件來生成SQL語句,完成調用操作。

  相關的查詢服務代碼如下:

   /// <summary>
/// 系統自動生成的版本號
/// </summary>
/// <returns></returns>
public string GetVersion()
{
return DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
}

   public int GetMax<T>()
{
//根據T的類型獲取T的最大列,完成查詢操作。
string sqlText = " Select MAX(ISNULL(列名,0))+1 FROM TableName";

   return 0;
}

   public List<T> GetAll<T>()
{
//根據T的類型獲取T的最大列,完成查詢操作。
string sqlText = &quot; Select * FROM TableName";

   return new List<T>();
}

   public List<T> GetList<T>(string condition,int pagesize,string orderField)
{
//根據T的類型獲取T的最大列,完成查詢操作。
string sqlText = &quot; Select * FROM TableName where " + condition + &quot; order by " + orderField;

   return new List<T>();
}

  上面給出的不是全部的代碼,部分代碼還是大家自己去完成吧,我這里想的是,一些客戶比較復雜的自定義代碼通過一個接口傳入的形式,來完成基礎查詢服務的調用。

  我們這里給出通用的接口定義:

  CommandType CommandType
{
get;
set;
}

   string whereCondition
{
get;
set;
}

   string orderCondition
{
get;
set;
}

   string TableName
{
get;
set;
}

   Column[] ColumnList
{
get;
set;
}

   string SQL
{
get;
set;
}

  給出默認幾類示例的實現:

   public class BaseSQL : ISelect
{
public System.Data.CommandType CommandType
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

   public string whereCondition
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

   public string orderCondition
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

   public string TableName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

   public Column[] ColumnList
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

   public string SQL
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

   具體調用的代碼如下:

   public class SpecialSQL : BaseSQL
{
public void Test()
{
this.TableName = "";
this.SQL = " SELECT * FROM TEST ";
this.whereCondition = " ID=4 ";
this.orderCondition = " ORDER BY ID DESC ";
}
}

  當然這里的繼承的方式不是很推薦,可以采用抽象工廠的模式,來創建這個查詢對象,然后我們在調用這個查詢對象的地方,我們可以自定義這個SQL查詢對象,后臺的ORM自動解析,完成自定義SQL語句的統一查詢服務入口。

六、本章總結

  本文主要是講述ORM中的數據訪問層,我這里由于一些特殊的原因,代碼給出的不是特別的詳細,一方面是由于之前的那部分的代碼丟了,現在一時難以還原,所以造成有些代碼給出的不是特別完整的情況,請大家見諒.
 

  


標簽:

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn

文章轉載自://www.cnblogs.com/hegezhou_hot/

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
一区二区三区国产精品午夜福利 | 国产又刺激又黄又爽又湿 | 日韩国产欧美在线观看一区二区 | 精品视频一 | 国内精品视频在线 | 怡红院综合图 | 国产91免费| 日本在线看免费 | 午夜影院c绿象 | 高清欧美性xxxx成熟 | 欧洲精品 | 精品一区网友自拍偷拍第一页 | 亚洲日韩 | 国产伦久视频免费观看视频 | 国产精品三级在线看免费看 | 国产操女人| 国产传媒在线观看 | 91精品国产自在现偷 | 精品一区二区三区四区 | 精品欧美一区二区三区免费观看 | 国产小视频在线观看免费 | 米奇影院日韩免费 | 亚洲欧美日韩中文字幕在线不卡 | 一区二区三区国产精品午夜福利 | 亚洲亚洲人成综合网络 | 91高清完整版在线观看 | 国产精品揄拍100视频 | 欧美1区2区3区| 欧美视频专区一二在线观看 | 精品国产中文字幕 | 亚美影视免费在线观看 | 国产老色批视频在线观看应用 | 国产日本在线观看网址 | 亚洲日本一区二区三区在线不卡 | 老年人一级特黄aa大片 | 精品国精品 | 国产中文字幕玖玖观看互动交流 | 一区二区三区四区免费视频 | 国产伦精品一区二区三区免.费 | 日本高清一区免费中文视频 | 97色成人 | 日本视频免费 | 肥老上视频 | 日韩精品三 | 欧美日韩亚洲国产高清 | 欧美精品69 | 亚洲日本中文 | 可以免费观看的电影网 | а√天堂中文官网在线8 | 国产激情免费视频在 | 日本一区二区三区精品国产 | 国产精品首页熟女 | 日本女黄在线观看 | 欧美日韩一区二区不卡三区 | 亚洲色久婷婷 | 欧洲尺码日本尺码美国欧洲lv | 欧美日韩国产精品视频一区二 | 日韩日皮在线一区二区 | 国产日韩高 | 国产精品露脸国语 | 一区二区三区中文字幕 | 天黑黑影院免费观看视频在线播放 | 极品艳医 | 国产日韩精品欧美一区喷 | 91天堂а8天堂资源在线官网 | 欧美一级精品 | 国产91精品系列在线观看 | 欧美日韩天堂在线视频 | 国产激情免费视频在线观看 | 亚洲中文字幕一区二区三区 | 免费一级欧美大片在 | 精品自拍偷拍日韩欧美 | 爱如潮水视频在线观看 | 青草青草久热精品视频在线播放 | 乱子伦一级在 | 日本高清www在线观看视频 | 欧美亚洲人成在线免费观看 | 日本一本免费一二区 | 国产亚洲| 国产精品美女视视频 | 欧洲成人免费高清视频 | 国产性爱精品家庭乱伦视频 | 日韩综羞羞视频免费网站欧美 | 精品视频在线观看 | 国产乡下三级全黄三级在线观看 | 亚洲精品国产高清在线观看 | 亚洲一区 | 国产婬妇視频网站 | 亚洲日日 | 国产一区二区三区免费 | 请放心下载! | 国产日韩a在线观看免费视频 | 国产国语对白露脸正在播放 | 日本最新在线一区二区 | 日韩视频中文字幕视频一区 | 国产普通话对白视频二区 | 日韩精品一线二线三线优势 | 97色伦图片97综合影院 | 蜜臀视频在线一区二区三区 | 欧美日韩精品在线播放 | 免费激情网站国产高清第一页 | 国产资源精品一区二区免费 | 国产凸凹视频一 | 人成午夜视频在线观看 | 九九热在线视频观看这里 | 国产偷国产偷亚洲高清人 | 激情综合在线亚洲五月天 | 日本免费一区二区三区在线视频 | 另类视频一区二区三区 | 国产精品视频每日更新 | 日韩免费观看 | 不卡的神马电影网 | 国产在线手机视频时看 | 成人精品天堂一区二区三区 | 国产又色又爽又黄又刺激的视 | 婷婷亚洲综| 成全电影大| 一色屋精品视频在线观看 | 欧美日韩成人午夜电影 | 国产r在线 | 亚洲中文字幕在线停止 | 精品国产a∨无 | 秋霞电影 | a级片免费 | 国产精偷伦视频在线观看 | 精品蓝导航视频福利在线 | 美女露胸无遮 | 视频二区三区国产情侣在线 | 国产专区第一页在线看 | 日韩欧美国产中文综合 | 色一情一乱一伦 | 国产精品私人影院 | 午夜网站在 | 欧美亚洲性爱综 | 精品免费一区二区三区视频 | 99精品国产最新观看网址 | 特别黄的免费视频大片 | 国产最新三级 | 免费的高清影视网站 | 欧美aa| 欧美日韩在线亚洲国产人 | 日韩欧美国产精品免费一二 | 91永久视频在线 | 国产色爽免费视频 | 欧美三级成人精品在线播放 | 亚洲精品网址在线观看 | 国产乱子伦l精品 | 成年午夜免费 | 亚洲欧美一区二区三区国产 | 91福利一区二区在线观看 | 花蝴蝶免 | 中文字幕免 | 欧美日韩国产无线码无毒 | 三级视频网站在线观看视频 | 91精品高清在线 | 中文成人 | 亚洲人色大成年网站在线观看 | 欧美人与动 | 国产精品欧美日韩一区二区 | 日韩一区二区精品 | 精品熟女中文字幕 | 羞羞影院| 午夜亚洲中文电影 | 国产女明星专区视频在线播放 | 欧美交换配乱 | 国产乱视频 | 999精品色在线播放 免费电影网站在线观看 | 免费高清欧美亚洲视频 | 国产特黄精品一区二区在线 | 国产狼人视频 | 日韩理论中文在 | 免费国产久在线视频 | 国产96亚洲一区二区三区 | adc成人影院18以下勿进 | 欧美一级特黄高清视频 | 99热手机在线观看 | 国产在线一区二区在线视频 | 国产亚洲精品成人a在线 | 欧美日韩国产码高清 | 为您呈现最新最热的电影力作 | 加勒比一本| 国产日韩传媒一区二区三区四区 | 欧美视频一区二区三区在线观 | 欧美日韩一区二区三区精品播放 | 精品午夜在 | 国产精品黄大片在线播放 | 亚洲高清在线观 | 国产欧美国日产在线播放 | 18c.mic禁慢天堂王者 | 三级国产4国语三级在线 | 一部电影的精彩一键畅览 | 日本女人一级视频在线观看 | 麻花影视最 | 日韩欧美精品一区二区三区 | 两性色午夜视频免费老司机 | 国产肉丝袜在线播放一区二 | 97碰成人国产免费公开视频 | 97碰碰碰视频在线观看 | 污网站在线观看视频平台 | 欧美日日日 | 18+视频网站 | 日本中文字幕在线视频一区 | 国产精品日韩欧美一区二区三区 | 三级在线观看自 | 最新免费电影在线播放 | 日本一道高清 | 欧美一区二区三区gg高清影视 | 自产视频在线观看 | 欧美经典日韩在 | 亚欧乱色国产精品免费九库 | 手机看片102 | 国产普通话视频在线播放 | 中美日韩亚洲高清 | 国产乱码一卡二卡3卡四卡 国产精品视频每日更新播放 | 国产精品揄拍100视频最近 | 日本高清中文字幕在线 | 日韩在线视频一区二区 | 秋霞国产午夜伦午夜福利片 | 国产又粗又猛又爽的网站 | 中国老熟女重囗味hdxx | 国产+欧美+激情 | 羞羞视频免费看网站 | 色色色色色色资源女人天堂 | 国产片视频在线观看 | 成人欧美s视频在线观看 | 91永久视频在线 | 亚洲精品欧 | 91精品国自产拍老熟女露脸 | 超前点播最新电影电视剧 | 色两性网欧美 | 亚洲精品国产精品国自产网站 | 欧美日本一区 | 中国熟女仑乱hd | 中文字幕无线免费 | a加勒比一本东京 | 欧洲亚洲欧美国产日本高清 | 精品人妖一区二区三区四区 | 愛妃)日韩视频在线免费观看 | 日本精品在线一区欧美 | 91免费精品国自产在线不卡 | 国产91精品在线观看导航 | 亚洲日韩aⅴ在线视频 | 中文字幕在线免费专区 | 欧美肉大捧一进一出免费视频 | 日韩和欧美一久 | 国内精品自在自线视频香 | 九九国产视频 | 成人国产一区二区三区 | 国产精品福利在线观 | 国产亚洲国语精品自产拍在线 | 国产精品午夜福利在线观看地 | 欧美一区二区三区大鸡 | 欧美日韩国产中文高清视 | 精品成人欧美大片 | 国产92刮伦脏话对 | 入禽太深免费 | 欧美精品在线播放 | 一区二区三区亚洲综合 | 日本一区二区三区在线观看 | 欧美精品狂躁 | 国产一区二区三区免费大片天美 | 国产女精品 | 国产国语自产拍在线观看 | 青草影视 | 国产精品日韩一区二区三区 | 国产精品资源网站在线观看 | 国产日韩精品一区二区三区在线 | 日韩精品亚洲人成在线 | 亚洲国产精品一区第一页 | 91蝌蚪网 | 亚洲成a人片在线v观看 | 女同女同精品一区二区 | 欧美一级做a爱高清免费观看 | 精品免费在线视频 | 无人区大片中文字幕在线 | 对白精彩 | 91国产在线 | 欧美亚洲日韩国产人成在线播放 | 国产一区二区三区成人欧美日韩 | 日本一区二区三区四区公司 | 国产亚洲v片在线观看女人 日韩免费网页版视频 | 精品国产午夜肉伦 | 神马影院88 | 亚洲自拍欧美日韩丝袜 | 国产成aⅴ人在线观看天堂无 | 18视频免费网址在线观看 | 亚洲熟女精品中文字幕 | 日韩欧美一级 | 男女午夜视频在线观 | 在野外被三个男人躁一夜 | 欧美一级夜夜爽 | 午夜亚洲理 | 国产伦在线视频大全 | 国产亚洲精品a在线观看app | 日韩精品视频美在线精品视频 | 国产综合亚洲专区在线 | 欧美日韩区一区二区三 | 国产偷窥不卡视频 | 免费最新电视剧 | 在线观看最新国产专区 | 欧美在线观看视频免费 | 国产精品视频丁香花综合 | 国产偷窥女洗浴在线观看亚洲 | 男人j日女人p免费视频 | 加勒比一本大道香蕉大在线 | 最新亚洲人成网站在线 | 国产精品亚洲日日摸夜夜添 | 午夜成人影院在线观看不卡 | 日本欧美亚洲素人 | 成人看的羞羞视频免费观看 | 亚洲日韩成人精品不卡在线 | 秋霞电影午夜在线观看 | 国产男女高清视频m免费 | 国产精品亚洲一区 | 北京国贸大酒店张津 | 99国产美| 日本japa| 国产拍拍拍精品视频 | 国产人妖高清一区二区 | 国产仑乱老女人露脸的 | 中文字幕乱 | 欧美日韩v在线 | 日韩精品一区二区三区四区蜜桃 | 精品亚洲不卡一区二区三区四区 | 精品国产日韩亚洲一区二区 | 99热欧美| 国产精品一区一区三区mba | 国产普通对白手机在线 | 日本在线一区三区国产主 | 97青草最新免费精品视频 | 国产sm重味一区二 | 国产精品亚洲片在线观看不卡 | 国产精品熟女一区二区 | 亚洲欧美日韩一区高清中文字幕 | 桃色一区二区三区 | 亚洲人在线观看影院 | 182tv免费视频在线观看 | 欧美日韩精品在线二区 | 成人午夜视频在线视频 | 亚洲人和日本人jzz视频 | 国产拍拍拍精品视频 | 国产91精品免费专区 | 日韩一二三四区永久地址 | www.亚洲| 亚洲色成人www永久在线观看 | 欧美视频在线观看一区二区 | 国产农村妇女特 | 免费网站看v片在线爱的影院 | 国产乱之伦露脸对白xxxx | 91精品国产自产高清在 | 欧美激情视频在线免费观看 | 丰满多毛的陰户 | 国产精品成人免费视频网站京东 | 国产在线观 | 亚洲v高清一区二区三区尤物 | 日韩粗大的内捧猛烈进出视频网 | 国产精品专区第一页在线观 | 日本精品一区在线观看 | 亚洲高清一区二区三区不卡 | 一区二区三区国产精华护肤品 | 免费电影在线影视网站 | 国产精品亚洲欧美在线观看 | 欧美人交a欧美 | 国产一区二区精品夜夜嗨 | 综合永久入口 | 成人性生交大片免费看r | 91李宗精品72集 | 97影院理论午夜论不卡 | 欧美精品亚洲精品日韩 | 欧美日韩精品久 | 日韩伦理在线播放成 | 中文字幕不卡九十九区 | 午夜福利啪爽国产片精品 | 日本漫遊網站 | 国产精品巨作无遮拦 | 成人播放日韩在线观看 | 丰满的继坶3中文在线观看 福利国产精品 | 免费高清欧美亚洲视频 | 不卡视频在线播放 | 国产综合在线观看视频 | 欧美综合国产日本 | 韩国午夜理论a三级在线观看 | 好吊色在线视频 | 日本免费影片一区二区 | 欧产日产国产精品精品 | 精美日产 | 国产高清在线a免费视频观看 | 国产一区二区精品免费播放 | 国产乱来 | 老女肥女熟国产在线视频网址 | 亚洲欧美另类日韩综合 | 67pao国产成视频永久免费 | 精品日韩国产欧美 | 国产乱偷国产偷高清 | 人人超人人超免费国产 | 日韩欧美在线一级一中文字暮 | 欧美综合 | 字幕一区精品自拍 | 欧美一区三区 | 九九综合黑白配久 | 欧美日韩在线图片一区 | 成人短视频在线免费观看网站 | 国产一区二区精品一区二区 | 免费国产一级特黄aa大片在线 | 欧美亚洲日韩中文字幕每日更新 | 国产激情免费播放 | 国产精品福利在线观 | 歐美一區二區三區 | 免费视频专区一国产盗摄 | 91免费到线观看免费 | 人伦小说视频在线 | 国产精品高清在线观看93 | 日产亚洲一| 欧美午夜色淫网 | 国产欧美日韩精品在线观看 | 老熟女导航精品导航 | 国产精品手机免费 | 欧美三级极品视频在线观看 | 精品女同一区你懂在线国产 | 国产一级二级三级精品视频 | 欧美曰韩免费一级在线 | 日本三级全黄三级a | 国产乱理伦片在线午夜观看 | 日韩电影在线天堂 | 一二三四视频 | 精品一线二线三线在线 | 国产综合成人一区二区三区电影院 | 天天综合网~永久入口 | 在线观看永久免费视频网站 | 日本三级在线看观 | 日本在线| 免费高清在线观看人数多少 | 国产色婷 | 国产视频一区二区 | 高清欧美日韩 | 国色天香在线视频www | 国产精品露脸国语对白99 | 国产高清在线91福利 | 乱伦欧美中文高清 | 一色屋精品视频在线观看 | 国产又湿又 | 精品国产污污污 | 国产福利一区二区三区在线观看 | 精品一区二区三区三级视频 | 开心五月丁香花综合网 | 国产亚洲精品导航 | 中国字幕在线看韩国电影 | 欧美性猛交xxxx乱大交3 | 很黄很色的免费视频在线观看 | 91人成亚洲高清在 | 爱丫爱丫影院官网 | 亚洲午夜国产精品无卡 | 日韩专区一中文字目一区二区 | 国产欧美精品一区二区三区四区 | 在线观看日产一区二区三区 | 欧美手机手机在线视频一区 | 欧美乱伦国产精品 | 成年人1 | 日韩精品在线二区三区 | 午夜成人精 | 强伦轩一区二区三区四区播放 | 天堂中文а | 国产精品一区一区 | 欧美老妇与 | 日本成人一区在线 | 亚洲精品免费视频观看 | 日本免费一区二区三区中文字幕 | 精品成人免費自拍視頻 | 男女羞羞视频免费在线观看网站 | 精品一卡二卡三卡四卡 | 在线观看精品国产福利片app | 欧美亚洲性爱电影 | 欧美综合婷婷欧美综合五月 | 国产真实乱对白精彩 | 日韩性爱视频 | 日本一区二区三区中文字幕 | 安全绿色的在线电 | 国产对白精品刺激一区二区 | 午夜国产精品免费观看 | 国产99视频精品免费观看6 | 精品蜜臀一区二区三区在线 | 亚洲欧美日韩、中文 | a级片免费播放 | 国产酒店揄拍视频在线观看 | 视频在线华人精品草 | 成人亚洲国产欧美另类 | 爱情岛论坛| 亚洲а∨天堂2025在线网站 | 欧美亚州视频在线播放国产 | 亚洲二区在线 | 另类专区 | 国产制服国产制服一区二区 | 国产在线观看免费a∨ | 日韩女优一区视频 | 300部国产真实乱 | 欧美性色欧美a在线观看 | 国产+日韩+另类+视频一区 | 亚洲高清免费观看 | 韩日精品视频 | 在线中文字幕日韩 | 日本一区二区三区不卡视频中 | 初爱视频教程韩国 | 亚洲日本中文字幕一 | 女女同性一区二区三区在线 | 国产人成网线在线播放va | 欧美日韩国产免费看 | 国产又粗又黄又爽的视频 | 一个人看的www日本高清视频 | 亚洲视频免费观看 | 日日爽夜夜 | 欧美激情在线播放 | 亚洲日本va在 | 亚洲一页 | 日本精品一区二区三区四区 | 精品一卡二卡三卡四卡2 | 国产日韩欧美 | 日韩欧美视频一二区 | 国产综合在线91精品思思 | 国产欧美日韩综合精品一区二区三 | 欧美日韩一区二区三区高清在线 | 九九九精品成人免费视频 | 国产精品极品美女自在线观看免 | 99精品国产自在现线国产品在 | 国产午夜理论不卡在线观看 | 国产亚州视频在线视频 | 国产视频综合 | www国产| 国产一区在线精品 | 欧美日韩影院 | 在线观看视频在线播放9 | 日韩欧美一区二区三区在线观看 | 含羞草国产亚洲精品岁国产精品 | 成人精品一区二区三区中文字幕 | 好看的中文字幕aⅴ在线视频 | 国产萌白酱喷水在线播放尤物 | ⅹxxx乱大交 | 一区二区三区免费高清视频 | 国产伦精品一区二区三区免.费 | 最新欧美国产亚洲一区二区三区 | 国产又粗又猛又爽又黄的视频 | 国产在线观看不卡免费高清 | 男女免费| 欧洲乱码伦视频免费 | 老司机深夜免费福 | 99国产在线视频 | 国产真实露脸精彩对白91 | 国产精品对白刺激音频在线观看 | 日韩一区二区 | 日本在线看片网站 | 国产噜噜 | a级日韩乱理伦片 | 成人国产日本亚洲精品 | 老司机精 | 精品国产亚洲一 | 国产亚洲玖玖精品 | 农村黄a三级 | 国产欧美日韩综合精品一区二区三 | 国产sm重味| 国产人伦激情在线观看 | 加勒比一本大道香蕉大在线 | 国产精品人成电影在线观看 | 国产最新精品精品视频 | 精品国内一区二区三区免费 | 最新好剧电影在线观影平台 | 最近日本中文字幕免费完整 | 国产导航在线柠檬导航 | 国产美女高清片免费观看 | 8x8ⅹ成人免费观看网站 | 日本中文字幕一區二區三區不卡 | 国产费视频在线观看 | 国内揄拍国 | 9999热 | 国产亚洲一 | 中文日本不卡二区 | 国产九区 | 精品欧美一区二区在线看片 | 日本免费一二 | 91网站免费观看直播 | 亚洲伊人精品国产91综合 | 91高清国| 国产在线原创七七欠欠色综 | 国产福利91精品一区二区三 | 欧美激情亚洲激情 | 国产亚洲欧美日本高清 | 黑人巨大精品欧美视频一区 | 亚洲免费人成 | 国产无人区码一码二码三mba | 国产福利免费 | 韩国精品一区二区视频 | 国产在线不卡免费高清dvd | 午夜理论片在线观看免费 | 亚洲日产乱码一二三区别 | 最好看的中文字幕国语电影 | 欧美日韩一区二区三区在线视频 | 国产一二三四精 | a级国产乱理片在线观看 | 亚洲精品综合精品自拍 | 国内成人免费视 | 国产男女免费完整视频 | 国产精品初高中在线播放 | 欧美阿v高清资源不卡在线播放 | 亚洲精品中文字幕 | 国产精品人成视频免费播放 | 欧美日一级 | 欧美激情一区二区三区中文字幕 | 日韩~密 | 日本免码va在线看免费最新 | gogogo高清| 中文字幕一区在线观看视频 | 国产精品亚洲精品五月 | 国产婷婷综合在线精品尤物 | 热映电影 | 欧美精品亚洲精品日韩专 | 国产日韩精品欧美一区视频 | 99re热视频精品首页 | 国产伦精品一区二区三区男技 | 国产视频美女精品福利社 | 区小说区激情区 | 97精品视频在线观看 | 亚洲一区日韩高清中文字幕 | 亚洲免费综合色在线视频 | 99精品视频在线观看免费 | 国产91刘玥在线观看 | 又湿又紧又大又爽又a视频 精品高清三级乱伦 | 日韩一级香蕉片在线观看 | 国产精品猎奇系列在线观看 | 女人窝人体色www在线观看 | 亚洲欧美日本国产专区一区 | 区三区夜夜嗨 | 久青草国产在视频在线观看 | 日本黄页网站 | 综合激情在线 | 国产精品自在拍在 | 亚洲一线产区二线产区精华 | 国产在线观看第50页 | 欧美在线一区视频 | 亚洲va综合va国产产va中文 | 国产青草视频在线观看免费影院 | 国产综合这里只有精品 | 日本免费中文字幕在线看 | 午夜影视网站 | 成人国产免费软件 | 国产精品免费在线观看一区 | 色豆豆永 | 日本三级韩国三级美三级91 | 亚洲欧美日韩一区在线 | 亚洲一区在线精品 | 国产卡一卡二卡三卡四卡免费 | 国产区精品高清在线观看 | 国产不卡一区二区三区免费视频 | 国产偷国产偷亚洲欧美高清 | 欧亚尺码专线欧洲b1b1 | 亚洲精品视在线看1 | 国产精品国产自线拍免费不卡 | 国产精品99五月天 | 最新色国产精品精品视频 | 日本影片一区二区 | 日本视频一区二区 | 区三区夜色 | 国产一区二区成人 | a级国产乱理论片在线 | 日韩欧美一级一中文字幕 | 日本高清www午色夜com | 国产日韩综合精品一区二区三区 | 成人精品视频一区二区三区不卡 | 后进极品翘臀在线播放 | 中文字字幕在线中 | 黄a大片 | 亚洲国产欧美国产综合一区 | 日本高清xxxx视频 | 日韩欧美三区免费观看 | 国产又粗又猛又爽的网站 | 亚洲国产一区二区在线免费 | 91精品国产吴梦 | 欧美日韩国产在线人成 | 鲁鲁鲁鲁鲁视 | 国产最新精品精品视频 | 日本午夜福利剧场 | 另类一区二区 | 亚洲国产综合一区日韩精品 | 亚洲国产高清国产拍精品 | 日本福利 | 欧美激情精 | 国产人在线成免费视频 | 国产精品夜色一 | 日韩欧美亚洲国产永久在线观看 | 99精品国产自在现线国产品在 | 亚洲欧美成ⅴ人在线观看 | 国产综合第一页 | 高清在线观看视频 | 国产欧美日韩综合精品二区 | 一区二区中文字幕 | 国产精品不卡一区二区 | 国产欧美日韩在线视频观看 | 国产视频一区在线 | 欧美日产亚洲国产精品 | 国产精品视频观看 | 91人成在线观看网站 | 另类在线观看网站 | 日本三级韩国三级香港三级a级 | 国产精品一区二区在线观看免费 | 91精选日韩综合永久入口 | 黑人性较视频免费视频 | 99ri日韩精品视频 | 欧美国产日韩另类视频区 | 自产视频在线观看 | 在线观看国产一线天木耳奈奈 | 亚洲日本v中文字幕区 | 亚洲美女又黄又爽在线观看 | 美女视频免费观看网站黄 | 国产精品亚洲专区在线观看 | 国产操操| 免费日韩电影网 | 国产精品福利一区二区 | 三级国产在线观看 | 一区二三国产好的精华液 | 青青青国产在线观看资源 | 日韩精品一区二区三区成人vr | 乱伦国产欧美三级 | 第一页欧日韩在线视频 | 国产精品成人免费观看 | 日韩午夜看片成人精品 | 国产精品777 | 成人app破解不限次数 | 99精品久 | 亚洲自偷自拍另类第1页 | 日本不无在线一区二区三区 | 日本一区二区三区四区视频 | 国产亚洲日韩网暴欧美台湾 | 永久免费不卡在线 | 亚洲已满18点击进入在线观看 | 欧美偷拍亚洲精品传媒 | 高清欧美性猛 | 九九视频在线观看6 | 精品日韩欧美在线 | 亚洲欧美一区二区三区 | 丝袜国产精品视频二区 | 国产色综合免费观看 | 宅男在线永久免费观看 | 国产欧美日韩精品专区 | 精品人妖一区二区三区四区 | 亚洲色精品视频 | 国产免费一 | 国产偷v国产偷v亚洲 | 日本高清二区视频久二 | 国产1024在线永久免费观看 | 日本女黄在线观看 | 日本一区二区免费在线播放 | 日韩亚洲成a人片在线观看 亚洲色偷偷综合亚洲v | 日韩欧美一区二区三区综学生 | 探花在线 | 国产精品自产拍在线观看中文 | 欧美人与动性行为网站免费 | 国产精品欧美精品aⅴ在线 中文一区二区三 | 欧美喷潮系列在线观看 | 三级国产在线观看 | 欧美日韩在线亚洲 | 亚洲国产精品尤物yw在线观看 | 欧美激情在线播放 | 免费国精产品自偷自偷免费看 | 91成人午 | 国产香蕉一人在线视频 | 欧洲欧美人成视频在线 | 亚洲国产精品一区第二页 | aa精品 | 梦乃爱华作品在线观看播放 | 日韩在线中文字幕欧美 | 国产性一| 电视剧热播大 | 99ri视频一区二区三区 | 日本精品二三区视频在线观看 | 欧美色欧| 五月丁香中文字 | 欧洲一卡2卡三卡4卡免费视频 | 国产一区二区三区a | 国产熟女熟女 | 亚洲精品视频一区二区 | 国产又色又爽又黄又刺激的网站 | 日本视频一区二区三区 | 日本福利电影在线观看 | 亚洲精品园精 | 野花日本大全免费 | 狂野欧美性猛xxxx乱大交 | 日日夜人人澡人人澡人人看免 | 国产后入在线观 | h视频网站 | 真人做爰片免费 | 国产又黄又爽又猛的免费视频播放 | 国产亚洲精品日本亚洲网站 | 高清影视播放 | 亚洲v欧美v日韩v国产v | 69热视| 亚洲日本 | 国产网站免费视频 | 色综合天天综合网国产国产人 | 99精品无人区乱码1区2区3区 | 日韩精品一区在线播放精品 | 国产欧美视频一区二区三区 | 日本三级国产在线 |