久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

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

编程问答

EasyJF

發布時間:2024/4/11 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EasyJF 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


EasyDBO是一個非常適合中小型軟件數據庫開發的數據持久層框架,系統參考hibernate、JDO等,結合中小項目軟件的開發實際,實現簡單的對象-關系數據庫映射。 本文主要簡介EasyDBO的使用方法,作為初學者的快速上手指南。由于EasyDBO是一個不斷更新的開源項目,本教程中一些新特性、功能的介紹及應用將不定期的在EasyDBO官方網站上提供。

該教程主要由EasyJF開源團隊-EasyDBO項目組編寫,免費在各大Java專業網站及其它專業媒體上發表。
當前參該文檔編寫的EasyJF成員有(排名不分先后):
大峽、stef_wu、天意及其它EasyJF團隊成員

歡迎更多的朋友加入到我們的寫作當中!

EasyDBO項目開發人員
大峽、piginzoo、william、stef_wu、天意、散仙、qgz0910、clyyu等

目錄:

序言
一、EasyDBO簡介

1.1 對象-關系映射簡介
1.2如何實現對象-關系映射
1.3 為什么要設計EasyDBO
1.4 EasyDBO簡介

二、EasyDBO快速上手及示例

2.1獲取EasyDBO SDK及源代碼
2.2 EasyDBO文件組成
2.3 編譯安裝EasyDBO
2.4 使用EasyDBO
2.5、開始簡單的映射
2.6、使用EasyDBO總體流程簡單分析

三、EasyDBO使用詳解

3.1 ORM核心引擎EasyJDB的創建
3.1.1 映射處理核心引擎EasyJDB類簡介
3.1.2 創建EasyJDB對象實例
3.2 數據源設置
3.3數據庫查詢方言
3.4 實(域)對象PO及泛對象FO
3.5 使用接口實現簡單映射
3.6 使用配置文件配置映射關系
3.7 使用Java5注解來設置映射
3.8 主鍵配置
3.9 緩存設置
3.10 一對一映射
3.11 一對多映射
3.12 多對多映射
3.13 延遲加載
3.14 事務處理
3.15 使用存儲過程

四、EasyJDB中常用方法介紹

4.1 對象添、刪、改
4.2 從持久層讀取單個域對象DOM(PO)
4.3從持久層讀取多個域對象DOM(PO)
4.4 從持久層讀取多個泛對象FO(Fan Object)
4.5從持久層返回唯一對象
4.6 執行自定義sql語句
4.7 存儲過程

五、EasyDBO以其它框架的集成運用

5.1 EasyDBO與EasyJWeb集成
5.2 EasyDBO與Spring集成
5.3 在Struts中使用EasyDBO

?

六、使用EasyDBO的開源項目介紹
6.1 EasyJF開源Blog系統
6.2 簡易java框架開源論壇系統(最新版本0.5,更新時間10月1日)
6.3 簡易java框架開源訂銷管理系統(最新更新:2006-4-3)
6.4 EasyJF開源網上會議系統iula-0.1.0(最新更新:2006-7-13)

?

七、結束語
八、聯系我們

?

一、EasyDBO簡介

1.1 對象-關系映射簡介  

  對象-關系映射(Object/Relation Mapping,簡稱ORM),是隨著面向對象的軟件開發方法發展而產生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系數據庫是企業級應用環境中永久存放數據的主流數據存儲系統。對象和關系數據是業務實體的兩種表現形式,業務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在數據庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)系統一般以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。
  在開發關系數據庫的系統時,可以通過SQL語句讀取及操作關系數據庫數據。在Java領域,可以直接通過JDBC編程來訪問數據庫。JDBC可以說是JAVA訪問關系數據庫的最原始、最直接的方法。這種方式的優點是運行效率高,缺點是在Java程序代碼中嵌入大量SQL語句,冗余是不可避免的,開發人員常常發現自己在一次又一次地編寫相同的普通代碼,如獲得連接、準備語句、循環結果集以及其他一些 JDBC 特定元素,使得項目難以維護。特別是當涉及到非常多的關系數據表、需要在多個不同類型的關系數據庫系統中使用時,通過在程序中使用JDBC開發實施起來更加困難。
  在開發基于數據應用為主的軟件系統時,引入對象-關系映射中間件是提高開發效率、提升軟件產品的可維護、擴展性的現實需要。實踐表明,在基于數據處理為主的企業級應用程序開發中,通過引入對象-關系映射中間件,可以節省與對象持久化相關的差不多35%的編程工作量,同時提升軟件產品可維護及易擴展性,提升軟件產品質量。  

1.2如何實現對象-關系映射  

  在開發企業級應用時,有必要通過引入對象-關系映射系統中間件,實現數據庫的快速開發。企業可以通過JDBC編程來開發單獨的持久化層,把數據庫訪問操作封裝起來,提供簡潔的API,供業務層統一調用,實現自己的ORM系統中間件。

  當然,一個成熟的對象-關系映射中間件產品,不只是簡單的把內存中的對象持久化到數據庫、把數據庫中的關系數據加載到內存中,還要保證系統頻繁地訪問數據庫的性能,降低訪問數據庫的頻率,需要引入多線程、緩存、事務管理等很多細節,涉及到的技術比較復雜,因此,我們更多是使用市場上優秀的ORM系統中間件產品。


  當前主流的 ORM 中間件產品主要有:
  Hibernate
  EasyDBO
  iBatis
  JDO
  EJB Entities 3
  EJB Entity Beans 2.x
  TopLink

1.3 為什么要設計EasyDBO  

  要使用java訪問數據庫,我們都知道使用JDBC,然而jdbc相對來說畢竟是一個比較底層的數據庫訪問API,在實際應用中需要寫非常多的SQL語句,管理數據源、處理數據訪問異常等諸多工作,造成開發的極為不便。而且,由于不同數據庫之間的sql語句存在一定的差異,也使得我們寫的程序難免捆綁到某一種數據庫上,無法實現程序靈活的在不同的數據庫之間進行移植。

  近年來,對象關系映射系統得到廣泛的應用。隨著以iBatis、hibernate為代表的輕量級ORM系統普及,我們基本上可以告別JDBC,告訴煩瑣的SQL語句,同時也解決了前面提出的問題。然而,在軟件的領域,永遠沒有完美的系統解決方案,隨著我們在大量的項目中運用這些ORM系統,我們又發現了很多新的問題與苦惱。如:煩瑣的配置文件、機器語言一樣sql語句、數據訪問的效率、性能問題以及難于發現的錯誤等等。

  在一些中小型的應用軟件中,一方面由于存在諸多因素,使得需求往往存在不確定性,另一方面軟件正向更加專業化方向發展,軟件的需求越來越復雜。如果每次變動都需要經過修改域模型、改配置文件、改業務邏輯等多個機械的步驟及環節,顯得難以適應。因此,要求我們有一個能快速適應變化的超輕量級ORM系統,適應我們快捷開發的需求。

1.4 EasyDBO簡介

  EasyDBO是基于java技術,應用于Java程序中實現快速數據庫開發的對象-關系映射(ORM)系統框架。從本質上說,EasyDBO是一個對JDBC的簡單封裝,通過借鑒當前的主流ORM系統,引入了更加簡單實用的方式來實現對象及關系數據庫的映射,從而使得我們在開發中可以把精力更多的集成中在域建模及軟件業務邏輯上面。

  EasyDBO是一個超輕量級的ORM系統,其定位于解決中小型系統項目中的對象關系映射。提供更加簡便、靈活的映射方式,把實際應用中的最佳實踐融入到ORM的設計中,從而滿足快捷開發的要求,即快速、簡捷的完成應用軟件開發。


  EasyDBO對外提供一用于處理對象-關系映射等的核心引擎,我們通過使用該引擎即可實現關系數據庫的相關操作。若結合EasyJF所提供的其它的開源框架如EasyJWeb等使用,則可以在實際開發中大大提高開發效率。

二、EasyDBO快速上手及示例

2.1獲取EasyDBO SDK及源代碼  

  EasyDBO作為國內的一個Java開源項目,可以通過其開發團隊的官方網站www.easyjf.com中下載,下載地址:http://www.easyjf.com/easydbo/download.htm。當然,也可以直接從SVN上直接Check out該項目最新的源代碼,EasyDBO的SVN地址:http://svn.easyjf.com/repository/easyjf/easydbo/

2.2 EasyDBO文件組成

  下載的文件主要包括
  lib為編譯EasyDBO所需要的支持庫;
  src目錄為EasyDBO框架的全部源代碼、測試代碼及示例代碼;
  bin目錄為EasyDBO的發布命令及腳本等。

2.3 編譯安裝EasyDBO  

  一般情況下,我們直接下載整個EasyDBO項目的源代碼,然后在自己的機器上根據JDK重新編譯一次。通過執行bin里面的build.bat jar,或者雙擊build.bat,然后選擇jar,即可執行EasyDBO的編譯工作。

  如下圖所示:

  編譯完成后,若輸入的是jar命令。則會生成一個release目錄,其中有一個名為easyjf-dbo-1-0-0.jar的文件,其中后面的數字表示版本號。

  (注:由于EasyDBO中支持使用Java5注解來配置對象關系映射,因此,需要在Java5(jdk1.5)以上的環境進行編譯,才能使用全部的功能。)

2.4 使用EasyDBO  

  要在項目中使用EasyDBO,把easyjf-dbo.jar文件與log4j日志的jar,添加到你項目的類路徑或classpath中即可。

  當然,由于涉及到數據庫開發,還必須保證您所用的數據庫驅動包、連接沲驅動包也需要存放于類路徑上。

  下圖是我們使用My SQL數據,使用apache-dbcp連接池來處理數據庫的項目中,使用EasyDBO所需要的最少的jar文件。

2.5、開始簡單的映射  

  下面是我們使用EasyDBO的一個簡單例子。我們以一個留言板表Message為例,首先定一個表示留言板信息的持久層對象PO,內容是一個簡單JavaBean,由于我們使用比較簡單的接口映射方式來實現映射關系,所以這個Java Bean還實IObject接口。Message.java的內容大致如下:
package example;
import java.util.Date;
import com.easyjf.dbo.IObject;
public class Message implements IObject {
  private int cid;
  private String title;
  private String content;
  private String inputUser;
  private Date inputTime;
  private Boolean publish;
  private Integer status;


  public String getTableName() {
    return "message";
  }
  public String getKeyField() {
    return "cid";
  }
  public String getKeyGenerator() {
    return "com.easyjf.dbo.NullIdGenerator";
  }
  public int getCid() {
    return cid;
  }
  public void setCid(int cid) {
    this.cid = cid;
  }
  //...省略getter及setter方法。
}  

  下面,我們寫一個簡單的演示代碼,看看在程序中如何使用EasyDBO自動實現對象及關系表之間的映射。示例代碼如下:
package example;
import org.apache.commons.dbcp.BasicDataSource;
public class MessageTest {
  public static void main(String[] args) {
  //首先準備一個數據源
    BasicDataSource datasource = new BasicDataSource();
    datasource.setDriverClassName("org.gjt.mm.mysql.Driver");
    datasource.setUrl("jdbc:mysql://127.0.0.1:3306/easyjf");
    datasource.setUsername("root");
    datasource.setPassword("mysql");
    //使用數據源創建一個EasyDBO映射處理引擎EasyJDB對象
    com.easyjf.dbo.EasyJDB easyjdb=new com.easyjf.dbo.EasyJDB(datasource);
    Message m=new Message();
    m.setTitle("留言標題");
    m.setContent("留言內容");
    m.setInputTime(new java.util.Date());
    m.setInputUser("easyjf");
    m.setPublish(Boolean.TRUE);
    m.setStatus(new Integer(0));
    //使用EasyDBO映射處理引擎執行相關的數據持久化操作
    boolean ret=easyjdb.add(m);
    if(ret)
      System.out.println("成功寫入數據!");
    //從數據庫中讀取對象
    java.util.List list=easyjdb.query(Message.class,"1=1");
    Message m2=(Message)list.get(0);
    System.out.println(m2.getTitle());
    System.out.println(m2.getContent());
  }
}

輸出結果:
  成功寫入數據!
  留言標題
  留言內容

2.6、使用EasyDBO 總體流程簡單分析

1、選擇三種映射方式中的一種,書寫域對象(DOM或PO),即普通的Java Bean。若選擇的映射方式是接口方式,則要求Java Bean實現IObject接口;若使用Java5注解來定義映射,則要求在JavaBean中使用相關的標簽來指定映射方式;若采用配置文件方式來定義映射,則要求在easyjf-dbo.xml文件中定義對象-關系表的映射。

2、在應用程序中創建一個EasyJDB實例,設置數據源、加載配置文件(如果需要的話),然后設置EasyJDB相關參數,如緩存、是否在控制臺回顯Sql語句、默認事務處理方式等。

3、使用EasyJDB來執行數據添、刪、改等操作。

4、在需要的時候,也可以通過EasyJDB來執行傳統的SQL語句、自定義復雜的SQL查詢以及存儲過程調用等。

三、EasyDBO使用詳解

3.1 ORM核心引擎EasyJDB的創建

3.1.1 映射處理核心引擎EasyJDB類簡介

  在EasyDBO中,直接負責映射處理的類是EasyJDB,我們在應用程序中只需要取得一個映射引擎的實例,即可使用該對象實現對象-關系數據庫的映射操作。
EasyJDB中的方法大致可以歸為三種類型:
1、第一種是把對象持久化到數據庫中的相關方法,也是直接執行一定數據庫操作的方法,如add、update、del、saveOrUpdate、execute等。比如使用easyjdb.add(m),實現把域對象m中的數據保存到持久層存儲設備數據庫中。
2、第二種是把從持久層存儲設備數據庫中查詢域對象的方法。如query、uniqueResult、read等。比如easyjdb.read(Mesage.class,"2"),可以從數據庫中讀取主鍵值為2的Message對象。
3、最后一種是關于映射處理引擎參數設置的方法,包括setShowSql、setEnableCache、setAutoCommit、setMaxSize等方法。比如setEnableCache方法可以開取或關閉EasyDBO中的緩存。

3.1.2 創建EasyJDB對象實例

  為了能夠使用EasyJDB來處理對象到關系數據庫的映射,我們需要在應用程序中取得一個EasyJDB的實例。在EasyDBO中,主要有兩種方法來構造EasyJDB實例。
第一種方法:通過EasyJDB構造子來創建EasyJDB實例
在構造EasyJDB實例的時候,需要提供到少一個可能的數據源作為參數。EasyJDB提供了如下幾個:
EasyJDB(javax.sql.DataSource dataSource)
根據一個數據源來創建一個處理默認方言為MySQL數據類型方言的EasyJDB實例;
EasyJDB(javax.sql.DataSource dataSource, java.lang.String cacheName)
根據一個數據源來創建一個EasyJDB實例,并明確指定是否使用開取緩存功能;
EasyJDB(javax.sql.DataSource dataSource, ISqlQuery sqlQuery)
根據數據源及方言來創建一個EasyJDB實例。
EasyJDB(javax.sql.DataSource dataSource, ISqlQuery sqlQuery, java.lang.String cacheName)
根據數據源、數據庫方言、緩存名稱等參數,創建EasyJDB實例。
EasyJDB(javax.sql.DataSource dataSource, ISqlQuery sqlQuery, java.lang.String cacheName, boolean showSql)
根據數據源、數據庫方言、緩存名稱、是否在后臺回顯EasyDBO生成的sql語句等參數,創建EasyJDB實例。
EasyJDB()
默認構造函數,構造出的實例后需要通過手動設置正確的數據源及數據庫方言,EasyJDB引擎才能正常工作。

  下面是幾種正確的構造EasyJDB實例的示例:
  BasicDataSource datasource = new BasicDataSource();
  //...
  EasyJDB easyjdb=new com.easyjf.dbo.EasyJDB(datasource,new com.easyjf.dbo.sql.MSSqlServerQuery());
  Message m=(Message)easyjdb.read(Message.class,cid);


  EasyJDB easyjdb=new com.easyjf.dbo.EasyJDB(datasource);
  easyjdb.setSqlQuery(new MSSqlServerQuery())
  Message m=(Message)easyjdb.read(Message.class,cid);


  EasyJDB easyjdb=new com.easyjf.dbo.EasyJDB(datasource,new MSSqlServerQuery(),"EasyDBO",true);
  Message m=(Message)easyjdb.read(Message.class,cid);

第二種方法,使用EasyJDB的工廠方法創建EasyJDB實例
  EasyJDB中有一個名為getInstance的靜態方法,該方法可以直接從EasyJDB的默認配置文件中加載數據源及相關配置屬性,創建一個EasyJDB對象。在只有一個數據庫的情況下,通過在配置文件easyjf-dbo.xml中配置相關的EasyDBO參數,然后使用getInstance方法得到EasyJDB實例。
使用方法:
  EasyJDB easyjdb=EasyJDB.getInstance();
  Message m=(Message)easyjdb.read(Message.class,cid);

3.1.3 指定映射配置文件

  在程序構造完EasyJDB對象以后,可以通過setConfFiles來指定EasyDBO的映射配置文件,這樣EasyDBO會首先加載這些配置文件中的映射關系。如下面代碼所示:
public void testConfigFile()
{
  BasicDataSource datasource = new BasicDataSource();
  datasource.setDriverClassName("org.gjt.mm.mysql.Driver");
  datasource.setUrl("jdbc:mysql://127.0.0.1:3306/easyjf");
  datasource.setUsername("root");
  datasource.setPassword("mysql");
  EasyJDB easyjdb=new EasyJDB(datasource);
  java.util.List configFile=new java.util.ArrayList();
  configFile.add("/easyjf-dbo.xml");
  configFile.add("/easyjf-dbo2.xml");
  easyjdb.setConfigFiles(configFile);
  System.out.println(easyjdb.getMapping().getMap().size());
}
通過使用easyjdb.setConfigFiles方法,把/easyjf-dbo.xml及/easyjf-dbo2.xml兩個配置文件的內容都加載到EasyJDB引擎中。

3.1.4 指定緩存

  也可以構造完EasyJDB引擎后,在程序中手動構造緩存。直接設置EasyJDB的innerCache屬性值,然后再把enableCache設置成true即可。innerCache是一個DBOCache類型,DBOCache中持有一個ICache作為真正的Cache。因此,程序中指定緩存的步驟如下:
public void testCustomCache()
{
  EasyJDB easyjdb=new EasyJDB(datasource);
  com.easyjf.cache.ICache cache=new com.easyjf.cache.EasyCache();
  com.easyjf.dbo.DboCache dcache=new com.easyjf.dbo.DboCache();
  dcache.setCache(cache);
  easyjdb.setInnerCache(dcache);
  easyjdb.setEnableCache(true);
  easyjdb.setShowSql(true);
  easyjdb.setConfigFiles(configFile);
  for(int i=0;i<5;i++)
  {
    easyjdb.query(Message.class,"1=1");
  } ??
}

3.2 數據源設置

  在實際應用中,一個EasyJDB實例與一個數據源進行綁定,這里指的EasyJDB的數據源也即javax.sql.DataSource的一個實例。要能正確使用EasyDBO訪問數據庫,必須有一個有效的數據源。這些數據源可以是一個普通的Apache DBCP數據庫連接池,也可以是一個存在其它容器中的JNDI數據源,還可以是用戶自己實現的數據庫連接池。
例1、使用Apache DBCP連接池數據源
import org.apache.commons.dbcp.BasicDataSource;
  BasicDataSource mssql = new BasicDataSource();
  mssql.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");
  mssql.setUrl("jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=easyjf;SelectMethod=cursor");
  mssql.setUsername("easyjf");
  mssql.setPassword("easyjf");EasyJDB easyjdb=new EasyJDB();
  easyjdb.setDataSource(mssql);
  easyjdb.setSqlQuery(new MSSqlServerQuery());

例2、使用JNDI數據源
  Context ctx=null;
  ctx=new InitialContext();
  DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/easyjf");
  EasyJDB easyjdb=new EasyJDB(ds,new MSSqlServerQuery());

3.3數據庫查詢方言

  由于每一種數據庫的SQL語句及語法存在一定的差異。因此,為了能同時兼容不同的數據庫,EasyDBO中專門設計了一個方言類來支持不同的數據庫。在構造EasyJDB實例的時候,需要針對不同的數據庫,設置與其相對應的數據查詢方言,EasyJDB才能完全正常地工作。默認情況下,EasyJDB使用My SQL方言MySqlQuery作為EasyDBO的方言。
  方言是通過com.easyjf.dbo.sql.ISqlQuery接口定義的,若要支持不同的數據庫,則用戶可以根據該接口實現自己的方言即可。
  當前,我們已經提供了MSSqlServerQuery、MySqlQuery、OracleQuery等幾種方言,分別用于支持MS SQL(ACCESS)、MY SQL、Oracle等幾種不同類型的數據庫。
設置EasyJDB的引擎方言的方法如下:
1、直接在構造函數指定使用的方言
  EasyJDB easyjdb=new EasyJDB(datasource,new MSSqlServerQuery());   

2、使用EasyJDB類的setSqlQuery設置查詢方言
  EasyJDB easyjdb=new EasyJDB(dataSource);
  easyjdb.setSqlQuery(new MSSqlServerQuery());

3、在easyjf-dbo.xml文件中配置方言,然后使用getInstance方法取得EasyJDB實例。
easyjf-dbo.xml中配置方言
<property name="easydbo.dialect">com.easyjf.dbo.sql.MSSqlServerQuery</property>
  EasyJDB easyjdb=EasyJDB.getInstance();

3.4 實(域)對象PO及泛對象FO

  在EasyDBO中,關系表中的數據可以跟映射成兩種類型的對象,一種是實對象,也即經常所說的域對象(DOM)或程序對象PO。比如,一個User表與一個User類映射,一個Message表與Message類映射,這里的User及Message對象我們都稱為域對象或程序對象PO。
  泛對象,也即類型為EasyDBO中的DBObject類型的對象。凡是不能直接映射到某一個域對象的,都可以在查詢的時候,直接映射到DBObject。DBOject類是EasyDBO的一個核心類,用于代表關系數據表中的數據,其使用一個Map來存放查詢到的數據。

  在實際應用中,能直接映射成域對象的,我們都盡量使用域對象。若數據結構比較復雜、涉及多個相在關聯的比較隨意的查詢時,我們就可以使用泛對象來輕松簡單表示映射數據。

比如:select a.cid as cid,b.title as title,c.userName as userName from IDS?? a,Message b,User c inner join.....

3.5 使用接口實現簡單映射

  為了使User類能支持對象-關系映射,我們需要根據User類屬性在相應的對象-關系映射中間件產品中作一些配置。用過Hibernate的都知道,在hibernate中需要配置hibernate.cfg.xml文件及與User類相應的User.hbm.xml文件來定義映射關系。

  在EasyDBO中,可以通過簡單的實現EasyDBO中的com.easyjf.dbo.IObject接口,達到最簡單的對象-關系映射操作。接口映射建立在下面的假設,一個對象對應一個表,并且對象的屬性于表字段名也一一對應。
  IObject接口的內容如下:
package com.easyjf.dbo;
public interface IObject {
  String getTableName();
  String getKeyField();
  String getKeyGenerator();
}
其中getTableName()方法可以得到對象對應的關系表名稱;

getKeyField()方法返回關系中標識對象ID的主鍵字段名;

getKeyGenerator()方法返回對象標識ID的生成處理器。
  下面是實現了IObject接口的User類,并提供了可以把對象User通過EasyDBO持久化到關系數據表中的方法。擴展后的User.java全部源代碼如下:
package com.easyjweb.business;

import java.util.Date;
import com.easyjf.dbo.IObject;
public class User implements IObject ,Serializable {
private String cid;
private String userName;
private String password;
private String email;
private String tel;
private Date birthday;
private String intro;


  public String getTableName() {
    return "UserTable";
  }
  public String getKeyField() {
    return "cid";
  }
  public String getKeyGenerator() {
    return "com.easyjf.dbo.RandomIdGenerator";
  }
  public String getCid() {
    return cid;
  }
  public void setCid(String cid) {
    this.cid = cid;
  }
  //..
  //其它getter及setter方法
}
  從上面的代碼可以看出,我們可以看出,我們User類在關系表中對應的表名為User,主鍵字段是cid,主鍵生成算法是com.easyjf.dbo.RandomIdGenerator類,生成的是一個16位的隨機字符串。  
  使用接口映射方式可以實現最簡單的、最常用的單表映射,在一些以數據表為主的在系統或很多中小型的數據庫應用中,由于表之間的關系不復雜,可以使用這種方式來實現映射,不需要寫配置文件,非常實用及方便。
  由于只在接口中定義了表的名稱、主鍵字段及主鍵生成器三項信息。因此無法進行諸如有選擇性的緩遲加載,也無法定義表之間的關系等。因此,對于關系比較復雜的表,映射成對象的時候需要用定義1對1、1對N、N對M等多種關系,還有可能需要配置一些字段使用緩遲加載等,而且接口定義要求屬性的名稱與數據表字段的名稱一一對應,對于表字段名與對象屬性名不相同的時候,這種方法就無法正確工作了。

3.6 使用配置文件配置映射關系

  配置文件映射是指通過在配置文件中定義對象與關系表的映射關系。在配置文件中,除了定義對象對應的表、表之間的關系、對象屬性與表字段的對應關系以外,還可以定義表一些屬性的緩遲加載,定義1對1、1對N等關系。這是EasyDBO為了滿足比較復雜的對象-關系映射而提供的一種映射方式。
  EasyDBO的映射配置文件默認名稱為easyjf-dbo.xml,在前面的Message表的映射中,若改成配置文件映射,則域對象變成一個標識為Serializable的普通JavaBean,不再需要實現IObject接口。其內容如下:
public class Message implements Serializable {
  private String cid;
  private String title;
  private String content;
  private String inputUser;
  private Date inputTime;
  private Boolean publish;
  private Integer status;
  public String getCid() {
    return cid;
  }
  public void setCid(String cid) {
    this.cid = cid;
  }
  //...
  //其它的getter及setter方法
  }
在映射配置文件easyjf-dbo.xml中,通過下面的內容來定義對象關系映射。
<class name="com.easyjf.dbo.example.Message" table="Message" schema="dbo" catalog="easyjf" lazy = "false">
  <id name="cid" type="string">
    <column name="cid" length="16" not-null="true" />
    <generator class="com.easyjf.dbo.IdGenerator" />
  </id>


  <property name="title" type="string">
    <column name="title" length="50" not-null="true" />
  </property>


  <property name="content" type="string">
    <column name="content"/>
  </property>
  <property name="status" type="integer">
    <column name="status" length=""/>
  </property>
  <property name="inputUser" type="string">
    <column name="inputUser" length="23" />
  </property>
  <property name="inputTime" type="date">
    <column name="inputTime" length="8" />
  </property>
  <property name="publish" type="bool">
    <column name="publish" length="1" />
  </property>
</class>

  在配置文件中,使用<class>標簽來定義一個類,在<class>標簽中,name屬性表示域對象PO完整的類名,屬性table表示對應的主表;<id>標簽定義對象的主鍵,<id>標簽下的<generator>標簽定義主鍵生成器;<property>標簽定義對象的屬性,其下的<column>定義屬性對應的表字段等。
  在當字段名稱與對象屬性名稱無法一一對應,以及在需要配置比較復雜的關系時,使用該方式可以實現比較復雜、實用的對象-關系映射。

3.7 使用Java5注解來設置映射

  由于配置文件的書寫及管理比較復雜,EasyDBO還提供了使用Java5注解的形式來定義對象關系映射。對于Java5以上的版本,我們建議使用該方式來定義映射。其可以實現跟使用配置文件完全相同的功能,滿足復雜關系映射的配置。對于Java5以上的版本,我們建議使用該方式來定義映射。
  下面是使用注解來配置映射的例子。上列中的Message類書寫如下所示:
import java.io.Serializable;
import java.util.Date;import com.easyjf.dbo.annotation.*;
@Table(tableName="message")
public class MessageAnnotation implements Serializable{
  @TableField(name="cid")
  private String cid;
  @TableField(name="title")
  private String title1;
  @TableField(name="content")
  private String content1;
  @TableField(name="inputUser")
  private String inputUser;
  @TableField(name="inputTime")
  private Date inputTime;
  @TableField(name="publish")
  private Boolean publish1;
  @TableField(name="status")
  private Integer status1;
  public String getCid() {
    return cid;
  }
  public void setCid(String cid) {
    this.cid = cid;
  }
  //...
  //其它的getter及setter方法
}

  在上面的域對象PO中,@Table標簽用來定義表所對應的關系表。@TableField標簽用來定義對象屬性所對應的表字段。另外還可以通過@OneToOne標簽、@ManyToOne等標簽來定義1對1、1對多的關系,我們將在后面詳細講述。

3.8 主鍵配置

  在EasyDBO中,我們假設每一個表都有一個主鍵,這也是一種實踐證明比較科學的關系表設計方式。有了主鍵,就可以通過主鍵值直接從持久層即數據庫中讀取對象。因此,需要在映射的時候定義對象的主鍵,同時定義對象主建值的生成器。
  主鍵的定義通過IObject的String getKeyField()方法,或者是配置文件中的<id>標簽,或者是注解中的@Table標簽的keyField屬性來指定。主鍵值生成器是指在第一次把對象保存到數據庫中時,EasyDBO使用的主鍵生成算法處理器,通過IObject的String getKeyGenerator()方法,或者配置文件中的<generator>標簽,或者是@Table標簽keyGenerator屬性來指定主鍵值生成器。生成器是一個實現了IIdGenerator接口的對象。
IIdGenerator接口的內容如下:
public interface IIdGenerator {
  Object generator(Class classType);
  Object generator(Class classType, String column);
}
  在EasyDBO中,內置了幾種比較常用的主鍵值生成器。一種是用于支持自動增量的NullIdGenerator,另外兩種是用于生成16位隨機字符串的主建值生成器IdGenerator及RandomIdGenerator。用戶可以根據實際的應用需要定義自己的主鍵生成器,我們建議在一套系統中使用統一的主鍵生成器。

3.9 緩存設置

  在默認的情況下,EasyDBO不使用緩存。有兩種方法可以開取緩存功能!
  方法一:
  直接給EasyJDB的innerCache設置一個合法的DBOCache,并把enableCache設置成true,則在使用的過程中就會開取緩存功能。這種方法在基于IOC的配置中比較適用,也可以在自己的程序中手動創建DBOCache對象來設置緩存。代碼如下:
  com.easyjf.cache.ICache cache=new com.easyjf.cache.EasyCache();
  com.easyjf.dbo.DboCache dcache=new com.easyjf.dbo.DboCache();
  dcache.setCache(cache);
  easyjdb.setInnerCache(dcache);
  easyjdb.setEnableCache(true);
  
  方法二:

  若要開取緩存功能,可以在創建EasyJDB實例的時候,設置EasyJDB的cacehName為非null或""即可。若給EasyJDB對象設置了cacheName,則會自動嘗試通過easyjf-cache.xml文件中加載指定配置的cache。也可以在配置文件easyjf-dbo.xml文件中配置中設置是否使用緩存,以及緩存的名稱。

  僅僅讓EasyJDB有一個緩存名稱,或把EasyJDB的enableCache屬性設置為true只是表示EasyJDB運行過程中,將嘗試使用緩存,能否真正讓緩存正確工作,還要取決于Cache詳細參數的配置。
  Cache的詳細參數配置在另外一個名為easyjf-cache.xml的文件中,要在EasyDBO中使用緩存功能,必須確保該文件正確設置。easyjf-cache.xml文件的內容比較簡單,大致內容如下:

<?xml version="1.0" encoding="utf-8"?>
<easyjf-cache>
  <!-- storePolicy主要有LRU、LFU、FIFO三種,備注LRU緩存還有問題-->
  <cache name="EasyDBO" storePolicy="LFU" maxElements="50"
    expiredInterval="1000" type="com.easyjf.cache.EasyCache" />
</easyjf-cache>
  在配置文件中,<cache>標簽用來定義詳細的緩存內容,name表示緩存的名稱,storePolicy屬性定義緩存使用的策略,maxElements定義緩存中的最大元素個數,expiredInterval表示緩存超時的時間,type表示緩存類型。在EasyDBO中,默認是EasyCache。

  在easyjf-dbo.xml中配置緩存:  
<property name="easydbo.cache_name">EasyDBO</property>
<property name="easydbo.enable_cache">true</property>

  

在創建EasyJDB的過程中設置緩存:
EasyJDB easyjdb=new EasyJDB(dataSoruce,"EasyDBO");


3.10 一對一映射

  我們知道,在基于OO的程序設計中,對象與對象之間存在著繼承、聚合等關聯關系;而在關系表中,表與表之間也存在著一定的關聯關系。因此,在ORM系統中,我們也希望反映這種對象與對象之間的關系。在EasyDBO中,一對一關系映射是通過<one-to-one>標簽或者@OneToOne標簽實現。
下面看一個配置文件:
<class name="com.easyjf.dbo.example.OrderDetail" table="OrderDetail" schema="dbo" catalog="easyjf" lazy = "false">
<id name="cid" type="string">
<column name="cid" length="16" not-null="true" />
<generator class="com.easyjf.dbo.RandomIdGenerator" />
</id>
    <one-to-one name="order" type="com.easyjf.dbo.example.Order" column="orderId" key="cid" lazy="true">
    </one-to-one>
    <one-to-one name="product" type="com.easyjf.dbo.example.Product" column="productId" key="cid">
</one-to-one>
...
</class>

  對于<one-to-one>標簽:

  name屬性:表示與類本身對應的類在聲明時使用的屬性名,比如order就是在OrderDetail對象中定義的private Order order;

  type屬性:表示對應類的類型(Class)

  column屬性:表示在類本身的數據表中標示對應類的數據表字段,比如column="orderId"中,order項就是在OrderDetail表中使用orderId字段來對應order表的cid,一般這個是一個外鍵對應。

  Lazy屬性:表示這個對象要延遲加載,關于延遲加載請看相關小節介紹。

  在上面的配置中,定單詳細信息中包含了兩個一對一關系。即從OrderDetail的角度來看,一個定單詳細信息有一個Order及一個Product以之相對應。因此,我們可以在映射配制中使用<one-to-one>標簽,來配置OrderDetail的order屬性。
而這個時候對于OrderDetail對象來說,在他的bean的定義里面,就會是這樣:
public class OrderDetail {
  private String cid;

  private Order order;

  private Product product;

  private Integer num;

  private java.math.BigDecimal price;
//…
}
  可以直接使用
  OrderDetail detail=(OrderDetail)db.get(OrderDetail.class, id);
  String orderTitle=detail.getOrder().getTitle();
來訪問order對象了。
  這里只是單向一對一的情況,如果要想order和orderDetail對應,就是使用
  Order order=(Order)db.get(Order.class, id);
  OrderDetail detail=order.getOrderDetail();
來訪問detail對象,實現雙向一對一,那么我們還要在Order一端配置對OrderDetail的映射:
  <one-to-one name="orderDetail" type="com.easyjf.dbo.example.OrderDetail" column="orderDetailId" key="cid" lazy="true">


  當然,根據我們的經驗,一個order不會只和一個orderDetail對應,這就要使用下面小節介紹的一對多的情況。
  另外,若不喜歡使用配置文件,則可以使用Java注解來配置這種關系,如下所示:
@Table(tableName="OrderDetail")
public class OrderDetail {
  @TableField(name="cid")
  private String cid;
  @OneToOne(column="orderId",tableName="",type=Order.class)
  private Order order;
  @OneToOne(column="productId",tableName="",type=Product.class)
  private Product product;
  @TableField(name="num")
  private Integer num;
  @TableField(name="price")
  private java.math.BigDecimal price;
  public String getCid() {
    return cid;
  }
  public void setCid(String cid) {
    this.cid = cid;
  }
  //...
}

3.11 一對多映射

  一對多是指一個類的一個實例與另外一個類多個實例存在著對應關系。比如上面所說的對于一個訂單Order,有多個訂單詳細列表OrderDetail。可以通過配置文件<many-to-one>標簽或使用Java注解@ManyToOne來配置這種關系,如下面是Order對象與OrderDetail的一對多映射的配置文件:
<class name="com.easyjf.dbo.example.Order" table="OrderInfo" schema="dbo" catalog="easyjf" lazy = "false">
  <id name="cid" type="string">
    <column name="cid" length="16" not-null="true" />
    <generator class="com.easyjf.dbo.RandomIdGenerator" />
  </id>
  <property name="title" type="string">
    <column name="title" length="50" not-null="true" />
  </property>
  <many-to-one name="children" fieldType="java.util.List" type="com.easyjf.dbo.example.OrderDetail"         column="orderId" key="cid">
  </many-to-one>
</class>

對于<many-to-one>標簽:
Name屬性:一對多中,一一方的類中定義的來保存多一方類的變量名;

fieldType屬性:一對多中,一一方類用來保存多一方類的集合類型。比如這里的ArrayList或者List,

Settype屬性:一對多中,對應的多一方的類的類型(Class)column屬性:一對多中,多一方用來標示一一方的數據表的字段名,比如這里就是在orderDetail表中有一個orderId來對應一個Order對象。

key屬性:一對多中,多一方的主鍵名,這里對應的是orderDetail表中的cid字段。

在這樣的配置下,Order類就會是這樣:
public class Order {
  private String cid;

  private String title;

  private java.math.BigDecimal money;

  private List children;
同樣,我們就可以使用:
Order order=(Order)db.get(Order.class, id);
List allItem=order.getChildren();
for(...){
//遍歷所有的OrderDetail操作;
}
//...

  若不喜歡寫配置文件的朋友,也可以使用下面Java注解標識的方式:  
  @Table(tableName="orderInfo")
  public class Order {
  @TableField(name="cid")
  private String cid;
  @TableField(name="title")
  private String title;
  @TableField(name="money")
  private java.math.BigDecimal money;
  @ManyToOne(column="orderId",tableName="",type=OrderDetail.class)
  private List children=new java.util.ArrayList();
  public String getCid() {
  return cid;
  }
  public void setCid(String cid) {
  this.cid = cid;
  }
  //......
}

測試代碼:
  EasyJDB db=EasyJDB.getInstance();
  db.setAutoCommit(false);
  Order order=new Order();
  order.setTitle("測試");
  order.setCid("1111");
  java.util.List details=new java.util.ArrayList();
  for(int i=0;i<10;i++){
    OrderDetail detail=new OrderDetail();
    detail.setOrder(order);
    detail.setNum(15);
    detail.setPrice(new java.math.BigDecimal(16));
    details.add(detail);
  }
  order.setChildren(details);
  db.add(order);
  db.commit();

    在上面的代碼中,我們在使用EasyJDB的add方法保存order對象的時候,也將會把其children屬性中的OrderDetail對象保存到數據庫對應的表中。

  在一對多的關系映射中,默認情況下EasyDBO使用了延遲加載功能,若要關掉延遲加載,可以把屬性的lazy設置成false即可。

3.12 多對多映射

  在現實對象關系中,還存在多對多關系,也即一個類實例與另一個類的多個實例相互彼此對應。在實際應用中,這種多對多關系很多時候都可以轉換成一對多關系。因此,若能轉換成一對多的時候,我們盡量轉換成一對多來處理。實在不行,可以使用EasyDBO的多對多映射功能,來表示這種關系。在EasyDBO的映射配置中,使用配置文件中的<many-to-many>標簽或Java注解@ManyToMany標簽來配置這種多對多的關系。在多對多關系中,經常要引入一個中間表。下面看一個多對多的實例:

  產品的Product表結構

  供應商的Provider表結構

  存放多對多關系的ProvidrProduct表結構

  在上面的所示的關系中,一個Provider可以供應多種產品,同一個產品Product也可以由多個供應商供應。因此,產品Product與供應商Provider之間是多對多的關系。在EasyDBO中,我們通過下面配置文件來表示這種關系!

  <class name="com.easyjf.dbo.example.Product" table="product" schema="dbo" catalog="easyjf" lazy = "false">
    <id name="cid" type="string">
      <column name="cid" length="16" not-null="true" />
      <generator class="com.easyjf.dbo.IdGenerator" />
    </id>
    <many-to-many name="providers" fieldType="java.util.List" type="com.easyjf.dbo.example.Provider" tableName="providerproduct" column="productId" key="cid" tagColumn="providerName" tagKey="userName">
    </many-to-many>
    ...
  </class>
  <class name="com.easyjf.dbo.example.Provider" table="Provider" schema="dbo" catalog="easyjf" lazy = "false">
    <many-to-many name="prdoucts" fieldType="java.util.List" type="com.easyjf.dbo.example.Product" tableName="providerproduct" column="providerName" key="userName" tagColumn="productId" tagKey="cid">
    </many-to-many>
    ...
  </class>

  在上面的配置文件中:
  name-表示存在多對多關系的屬性名;

  filedType-表示屬性的類型,即集合或數組等微容器類型;

  type-表示關聯對象的實際類型,即微容器中的元素類型;

  tableName-表示中間表名;

  columan-表示關聯表中跟本對象對應的字段名稱;

  key-表示關聯表中代表本對象的屬性名稱;

  tagColumn-表示關聯目標對象的字段名稱;

  tagKey-表示關系目標對象的屬性名稱。
  在以上屬性中,除了filedType可以缺省以外,其它的屬性都是必須設置的。

  跟一對一、一對多關系一樣,我們也可以使用Java5注解來表示配置這種第,只要使用@ManyToMany標簽即可,如下所示:

Product.java
import com.easyjf.dbo.annotation.ManyToMany;
import com.easyjf.dbo.annotation.Table;
import com.easyjf.dbo.annotation.TableField;
@Table(tableName="Product")
public class Product {
  @TableField(name="cid")
  private String cid;
  @TableField(name="title")
  private String title;
  @TableField(name="intro")
  private String intro;
  @TableField(name="price")
  private java.math.BigDecimal price;
  @ManyToMany(fieldType=java.util.List.class,type=Provider.class,column="productId",tableName="providerproduct",key="cid",tagColumn="providerName",tagKey="userName")
  private java.util.List providers;
  @TableField(name="status")
  private Integer status;
  public String getCid(){
    return cid;
  }
  //...
}

Provider.java
package com.easyjf.dbo.example;
import com.easyjf.dbo.annotation.ManyToMany;
import com.easyjf.dbo.annotation.Table;
import com.easyjf.dbo.annotation.TableField;
@Table(tableName="Provider")
public class Provider {
  @TableField(name="userName")
  private String userName;
  @TableField(name="tel")
  private String tel;
  @TableField(name="birthday")
  private java.util.Date birthday;
  @TableField(name="status")
  private Integer status;
  @ManyToMany(fieldType=java.util.List.class,type=Product.class,column="providerName",tableName="providerproduct",key="userName",tagColumn="productId",tagKey="cid")
  private java.util.List products;
  public java.util.List getProducts() {
    return products;
  }
  public void setProducts(java.util.List products){
    this.products = products;
  }
  //...
}

測試代碼:
  EasyJDB db=EasyJDB.getInstance();
  db.setAutoCommit(false);
  Provider p=new Provider();
  p.setUserName("EasyJF");
  java.util.List products=new java.util.ArrayList();
  for(int i=0;i<5;i++)
  {
    Product pro=new Product();
    pro.setTitle("產品"+i);
    pro.setIntro("好產品啊"+i);
    products.add(pro);
  }
  p.setProducts(products);
  db.add(p);
  db.commit();

     則上面的代碼將Provider表中插入一條供應商信息,在Product表中插入五條產品信息,在中間表ProviderProduct中插入五條關聯數據信息。

3.13 延遲加載

  在基于ORM系統的軟件開發中,我們并不需要每時每刻都加載持久對象的所有屬性,有一些屬性的所占的內存比較大,有一時屬性加載時間也比較長,而我們又并非每次都要用到對象的全部屬性。因此,為了讓用戶能有選擇性的加載持久化對象屬性,EasyDBO提供了一個延遲加載功能,通過這個功能,把一些占用內存比較大或加載時間長的不常用的對象屬性設置成延遲加載,這樣就可以實現持久層對象加載的優化處理,提高了持久化對象的加載速度及效率。
  默認情況下,除了一對多,多對多的屬性以外,一個持久層對象其它所有的屬性都是即時加載的。若要把一個對象屬性設置成緩遲加載,需要在持久層對象的映射配置文件或者是注解中進行定義。
  在配置文件中定義緩遲加載,直接把屬性映射中的lazy屬性設置成true即可,如下面的示例:
  <class name="com.easyjf.dbo.example.OrderDetail" table="OrderDetail" schema="dbo" catalog="easyjf">
    <id name="cid" type="string">
      <column name="cid" length="16" not-null="true" />
      <generator class="com.easyjf.dbo.RandomIdGenerator" />
    </id>
    <property name="num" type="integer" >
      <column name="num" length=""/>
    </property>
    <property name="price" type="java.math.BigDecimal">
      <column name="price" length=""/>
    </property>
    <one-to-one name="order" type="com.easyjf.dbo.example.Order" column="orderId" key="cid" lazy="true">
    </one-to-one>
    <one-to-one name="product" type="com.easyjf.dbo.example.Product" column="productId" key="cid">
    </one-to-one>
  </class>

  在上面的示例中,屬性order就是使用了緩遲加載。即當使用EasyJDB的get(Class cls, Object id)來從數據庫中加載一個OrderDetail對象的時候,不會立即加載相應的oder屬性的值,只有當要使用這個持久對象的order屬性的時候,才會從數據庫中加載。
  另外,若不喜歡使用煩瑣的配置文件,也可以通過在注解中定義緩遲加載。如下所示:
@Table(tableName="OrderDetail")
public class OrderDetail {
  @TableField(name="cid")
  private String cid;
  @OneToOne(column="orderId",tableName="",type=Order.class,lazy=true)
  private Order order;
  @OneToOne(column="productId",tableName="",type=Product.class)
  private Product product;
  @TableField(name="num")
  private Integer num;
  @TableField(name="price")
  private java.math.BigDecimal price;
  //....

  在上面的OrderDetail類定義中,我們使用@TableField標簽來配制對象映射關系,其中屬性order使用了緩遲加載。

3.14 事務處理

  默認情況下,EasyDBO是不支持事務的(自動提交),要使用事務,需要通過把EasyJDB的自動提交標志設置成為false,然后再用commit()來提交數據,最后使用close方法來釋放數據源,這個原理跟JDBC的默認操作是一致的。
示例如下:
  EasyJDB db=EasyJDB.getInstance();
  db.setAutoCommit(false);
  Message m=new Message();
  Message m2=new Message();
  m.setTitle("標題");
  m2.setTitle("標題2");
  m.setInputTime(new java.util.Date());
  db.add(m);
  db.add(m2);
  db.commit();
  db.close();//釋放數據源

  從代碼中可以看到,add(m),add(m2)是在一個事務中,其中任何一條add方法出錯,則都會造成數據加整個提交失敗。

3.15 使用存儲過程

  在EasyDBO中,可以直接通過存儲過程名稱及參數調用存儲過程。EasyDBO支持兩種類型的存儲過程,一種是直接對數據庫進行相關操作的存儲過程,如數據更新、數據處理、數據刪除等,這種存儲過程不返回任何結果;另外一種是通過存儲過程返回查詢結果列表的,返回的結果以泛對象的形式存放于List中。
在EasyJDB核心映射處理類中,我們有以下幾個方法用于支持存儲過程,用戶直接調用這些方法即可。這幾個方面分別如下:
  java.util.List callQuery(java.lang.String procedureName)
調用指定的存儲過程,并返回一個類型為DBObject的結果列表。
  java.util.List callQuery(java.lang.String procedureName, java.lang.Object[] parameter)
根據所給的參數,調用指定的存儲過程,并返回一個類型為DBObject的結果列表。
  void callUpdate(java.lang.String procedureName)
執行指定名稱的存儲過程。
  void callUpdate(java.lang.String procedureName, java.lang.Object[] parameter)
根據所給的參數,執行指定名稱的存儲過程。

  下面是一個簡單列子:
  EasyJDB easyjdb=new EasyJDB(dataSource);
  List list=easyjdb.callQuery("getPM",new Object[]{"四川省"});
  for(int i=0;i<list.size;i++)
  {
    DBObject obj=(DBObject)list.get(i);
    System.out.println(obj.get("title"));
    System.out.println(obj.get("num"));
  }

其中getPM是一個存儲過程名,這個存儲過程需要給其提供一個地區作為參數。

四、EasyJDB中常用方法介紹

4.1 對象添、刪、改

  boolean add(java.lang.Object obj)
  把對象obj保存到持久層數據庫中;

  boolean update(java.lang.Object obj)
  把對象obj的內容更新的持久層數據庫中;

  boolean saveOrUpdate(java.lang.Object obj)
  把對象obj添加或更新到持久層數據庫中;

  boolean del(java.lang.Object obj)
  把對象從持久層對象中刪除。

  在上面的幾個方法中,參數obj可以是一個域對象DOM(或PO),若是一個域名對象,則EasyDBO會把其相關屬性插入或修改到對應表的相應列中,若對象還包括一對一、一對多或對多多等屬性,則在添加的時候還會在相應的表中插入或修改數據記錄;同理,若是執行刪除操作,若對象包含多對多或者一對多屬性,則還會刪除其下屬的對象。

  參數obj也可以是一個泛對象(FO),即類型為DBObject的對象。此時會根據泛對象中定義的表以及列名稱,生成一個對應操作的sql語句,然后執行該sql語句進行數據操作。

  上面四個方法,是我們在使用EasyDBO進行數據操作過程中最常用到的方法。saveOrUpdate方法是一個比較靈活的方法,其首先要查找一次系統中是否存在所要操作的對象,若存在則執行update操作,若不存在則執行add操作,在實際的應用需要靈活使用。
除了上面四個方法可以達到數據庫內容的改變以外,還可以通過存儲過程或者是直接使用EasyJDB的execute方法執行數據操作sql語句達到數據庫內容的更改。

4.2 從持久層讀取單個域對象DOM(PO)

  java.lang.Object get(java.lang.Class cls, java.lang.Object id)
  根據對象類型cls及主鍵值從特久設備中讀讀取對象,若找不到對象則返回null.。這里要求id必須為一個對象類型。
  示例
  Message message=(Message)db.get(Message.class,"1111");

  java.lang.Object read(java.lang.Class cls, java.lang.String scope)
  根據查詢條件從數據表中讀出一個對象,若符合條件的記錄有多個,則該方法只返回第一個對象,其它的將被忽略。
  示例:
  Message message=(Message)db.get(Message.class,"inputUser='大峽'");
  這種查詢方式主要采用拼湊sql語句的方式,由于可能存在sql注入攻擊,因此我們不建議使用。

  java.lang.Object read(java.lang.Class cls, java.lang.String scope, java.util.Collection params)
  根據查詢條件及具體的參數從數據表中讀出一個對象,若符合條件的記錄有多個,則該方法只返回第一個對象,其它的將被忽略。此處的參數存放于集合類型中,取個數及值與查詢條件scope中的問號"?"號對應。
  示例:
  java.util.Collection paras=new java.util.ArrayList();
  paras.add("大峽");
  Message message=(Message)db.get(Message.class,"inputUser=?",paras);
  在實際應用中,這種方法可以避免sql注入漏洞攻擊,另外還可以靈活支持jdbc的各種數據類型,因此,我們推薦使用這種方法使用查詢。

4.3從持久層讀取多個域對象DOM(PO)

  java.util.List query(java.lang.Class cls, java.lang.String scope)
  執行條件查詢,返回類型為cls的對象列表!
  示例:
  java.util.List list=db.query(Message.class,"inputUser='大峽'");
  這個查詢將從持久層數據庫中查出所有輸入人inputUser值為“大峽”的Message對象。同理,在實際應用中,這種方法可以避免sql注入漏洞攻擊,另外還可以靈活支持jdbc的各種數據類型,因此,我們推薦使用這種方法使用查詢。

  java.util.List query(java.lang.Class cls, java.lang.String scope, java.util.Collection params)
  根據查詢條件及參數執行查詢,返回類型為cls的對象列表。
  示例:
  java.util.Collection paras=new java.util.ArrayList();
  paras.add("大峽");
  java.util.List list=db.query(Message.class,"inputUser=?",paras);
  這個查詢將從持久層數據庫中查出所有輸入人inputUser值為“大峽”的所有Message對象。

  java.util.List query(java.lang.Class cls, java.lang.String scope, java.util.Collection params, int begin, int max)
  根據用戶自定義的sql語句執行查詢操作,返回從begin開始,max條記錄,類型為cls的對象列表。在我們只需要加載查詢結果中的幾個對象時,使用該方法將提高處理速度,提升系統性能。
  示例:
  java.util.Collection paras=new java.util.ArrayList();
  paras.add("大峽");
  java.util.List list=db.query(Message.class,"inputUser=?",paras,100,10);
  查詢輸入人inputUser值為“大峽”對象,從第100條符合的數據開始,最多取10個對象。

  java.util.List query(java.lang.Class cls, java.lang.String scope, java.util.Collection params, int begin, int max, boolean cache)
  根據用戶自定義的sql語句執行查詢操作,返回從begin開始,max條記錄,類型為cls的對象列表,并把查詢結果存入緩存中。
這個查詢的功能跟上面一樣,只是這個查詢將會把查詢結果存入緩存中,若下次再遇到跟這個一樣的查詢,則直接使用緩存中的查詢結果。
  示例:
  java.util.Collection paras=new java.util.ArrayList();
  paras.add("大峽");
  java.util.List list=db.query(Message.class,"inputUser=?",paras,100,10,true);


4.4 從持久層讀取多個泛對象FO(Fan Object)

  java.util.List query(java.lang.String sql)
  執行用戶自定義sql語句,直接返回泛數據表DBObject對象列表。


  java.util.List query(java.lang.String sql, java.util.Collection params)
  根據用戶自定義的sql語句及查詢參數執行查詢,返回泛數據表DBObject對象列表


  java.util.List query(java.lang.String sql, java.util.Collection params, int begin, int max)
  根據用戶自定義的sql語句執行查詢操作,返回從begin開始,max條記錄的泛數據表DBObject對象列表


  java.util.List query(java.lang.String sql, java.util.Collection params, int begin, int max, boolean cache)
  根據用戶自定義的sql語句執行查詢操作,返回從begin開始,max條記錄的泛數據表DBObject對象列表。

  在讀取多個泛對象的查詢中,需要我們提供完整的SQL語句。如select * from Message where inputUser='大峽'。與讀取多個域對象不同的是,由于沒有指定返回結果集的對象類型,因此,查詢出來的結果集合中是類型為DBObject泛對象。其它的參數與前面查詢域對象的參數意義及用法相同。
  示例:
  java.util.Collection paras=new java.util.ArrayList();
  paras.add("大峽");
  java.util.List list=db.query("select * from Message where inputUser=?",paras,0,10,true);
  for(int i=0;i<list.size();i++)
  {
    DBObject obj=(DBObject)list.get(i);
    System.out.println(obj.get("title"));
  }

4.5從持久層返回唯一對象

  java.lang.Object uniqueResult(DBTable table, DBField field, java.io.Serializable value)
  根據主鍵加載一個表中的某一個列;
  這個方法適合用于在知道表配置關系DBTable,DBField的情況下。

  java.lang.Object uniqueResult(java.lang.String sql)
  執行一條sql語句,返回唯一的對象,不緩存查詢結果。

  java.lang.Object uniqueResult(java.lang.String sql, boolean cache)
  執行一條sql語句,返回唯一的對象,根據cache的值決定是否緩存結果。

  java.lang.Object uniqueResult(java.lang.String sql, java.util.Collection params)
  根據自定義sql語句及查詢參數執行查詢,返回唯一的對象,不緩存查詢結果。

  java.lang.Object uniqueResult(java.lang.String sql, java.util.Collection params, boolean cache)
  根據自定義sql語句及查詢參數執行查詢,返回唯一的對象,根據cache的值決定是否緩存結果。

  uniqueResult查詢主要是用來查詢只返回一個對象的sql查詢,這個對象是一般的Java類型如Number、String,或者是表字段對應的類型,而不是域對象DOM(PO)或泛對象FO。uniqueResult中的sql是一條完整的sql語句,適用于查詢數據記錄總數、數據求合、統計結果、查詢數據表中某一行的某一個字段值的情況。
  示例:
  Number num=(Number)db.uniqueResult("select count(*) from Message");
返回Message表中的記錄數;

  java.util.Collection paras=new java.util.ArrayList();
  paras.add("1");
  String title=(String)db..uniqueResult("select title from Message where cid=?",paras);
  返回Message表中cid為"1"的行的title列的值。

4.6 執行自定義sql語句

  int execute(java.lang.String sql)
  執行指定的sql語句,返回受影響的記錄數。

  int execute(java.lang.String sql, java.util.Collection params)
  根據參數params中的值,執行指定的sql語句,返回受影響的記錄數。

  在實際應用中,我們盡量避免直接使用硬編碼的sql語句。然而,在一些特殊情況下,我們出于性能或其它方面的考慮,需要直接傳于自己的sql語句來操作數據庫,則可以使用EasyJDB提供的execute方法,執行具體的sql語句操作,可以避免我們寫煩瑣的數據源獲取、定義Statement、釋放數據源等JDBC底層操作,大大簡化了編程。
  示例:
  db.execute("update Message set status=2 where status<1");

4.7 存儲過程

  java.util.List callQuery(java.lang.String procedureName)
  java.util.List callQuery(java.lang.String procedureName, java.lang.Object[] parameter)
  void callUpdate(java.lang.String procedureName)
  void callUpdate(java.lang.String procedureName, java.lang.Object[] parameter)
  上面幾個方法是通過EasyDBO來調用存儲過程的接口。詳情請參考第三章第15節《關于存儲過程的使用》部分內容。

五、EasyDBO以其它框架的集成運用

5.1 EasyDBO與EasyJWeb集成

  EasyDBO是EasyJWeb的一個基礎框架,EasyJWeb之所以能實現快速開發,很大一部分因素是使用了EasyDBO。可以這么說,EasyJWeb的快速數據庫應用開發功能,全是基于EasyDBO,另外EasyJWeb中的代碼生成等也是依賴于EasyDBO。因此,EasyDBO與EasyJWeb可以說是天然集成的。當然,EasyJWeb也可以選擇其它的ORM系統框架。
  在EasyJWeb的CRUDAction中,每一個Action都有一個DAO操作對象IDAO,用于充當綜合數據層;IDAO接口的內容如下:
public interface IDAO {
  boolean save(Object obj);
  boolean update(Object obj);
  boolean del(Object obj);
  Object get(Class clz, Serializable id);
  Object getBy(Class clz, String fieldName, Serializable value);
  List query(Class clz, String scope);
  List query(Class clz, String scope, Collection paras);
  List query(Class clz, String scope, Collection paras, int begin, int max);
  Object uniqueResult(String sql);
  Object uniqueResult(String sql,Collection paras);
  int execute(String sql);
  int execute(String sql,Collection paras); // 執行任意SQL語句
}
在EasyJWeb中有一個基于EasyDBO的IDAO實現,類名為EasyDBODAO,其內容大致如下:
public class EasyDBODAO implements IDAO {
  private static final EasyDBODAO singleton = new EasyDBODAO();
  private EasyJDB db;
  public EasyDBODAO() {
  }
  public EasyDBODAO(EasyJDB db) {
    this.db = db;
  }
  public EasyJDB getDb() {
    return db;
  }
  public void setDb(EasyJDB db) {
    this.db = db;
  }
  public boolean save(Object obj) {
    return db.add(obj);
  }
  public Object get(Class clz, Serializable id) {
    return db.get(clz, (Object) id);
  }
  //...
  }

  在AbstractCrudAction中,有一個自動加載IDAO對象的方法autoLoadDAO,其中有一個自動把EasyDBO作為數據層處理的代碼,如下:
protected IDAO autoLoadDAO(Module module) {
  return EasyDBODAO.getInstance();
}

  清楚了這個結構及關系,我們就不難理解在EasyJWeb Tools自代碼生成工具中,生成的一個數據表添刪改查、及分頁顯示的代碼了。下面是一個EasyJWeb示例,由EasyJWeb Tools代碼生成工具生成的CRUD Action。

5.2 EasyDBO與Spring集成

  在上面的EasyDBO的簡單介紹中,我們會發現,EasyDBO的構造和配置完全符合構造方法注入或者Setter方法注入的使用,這使得它能和spring完善的結合使用。下面給一個簡單的spring下使用EasyDBO的配置實例。
首先,我們配置一個EasyDBO bean。
先配置一個DataSource:
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
      <value> org.gjt.mm.mysql.Driver </value>
    </property>
    <property name="url">
      <value> jdbc:mysql://localhost:3306/easydbotest </value>
    </property>
    <property name="username">
      <value>root</value>
    </property>
    <property name="password">
      <value>stef</value>
    </property>
  </bean>
  數據源配好了,我們來配置我們需要的EasyDBO bean。如果只是配置最簡單的EasyDBO,只需這樣:
  <bean id="easydbo" class="com.easyjf.dbo.EasyJDB" singleton=”true”>
    <property name="dataSource" ref="dataSource"></property>
  </bean>
  因為一個數據庫對應一個EasyDBO,這里使用singleton就可以了。現在,我們的EasyDBO已經是可用的了,來做了測試,這里我們就使用了前面的Message那個例子:
Message類不變,編寫一個簡單的業務接口如下:
public interface IMessageService {
  boolean add(Message message);
  boolean del(Message message);
  boolean update(Message message);
  List getAllMessages();
}
然后就是這個簡單業務接口的實現:
public class MessageService implements IMessageService {
  private EasyJDB db;
  public EasyJDB getDb() {
    return db;
  }
  public void setDb(EasyJDB db) {
    this.db = db;
  }

  public boolean add(Message message){
    return this.getDb().add(message);
  }

  public boolean del(Message message){
    return this.getDb().del(message);
  }

  public boolean update(Message message){
    return this.getDb().update(message);
  }

  public List getAllMessages(){
    return this.getDb().query(Message.class, "1=1");
  }
}
接下來就是測試類了:
public class MessageTest {
  private IMessageService messageService;

  public IMessageService getMessageService() {
    return messageService;
  }
  public void setMessageService(IMessageService messageService) {
    this.messageService = messageService;
  }

  public void test(){
    Message m=new Message();
    m.setTitle("留言標題");
    m.setContent("留言內容");
    m.setInputTime(new java.util.Date());
    m.setInputUser("easyjf");
    m.setStatus(new Integer(0));
    if(this.getMessageService().add(m)){
      System.out.println("成功寫入數據");
    }
    java.util.List list=this.getMessageService().getAllMessages();
    Message m2=(Message)list.get(0);
    System.out.println(m2.getTitle());
    System.out.println(m2.getContent());
    m2.setTitle("新的標題");
    if(this.getMessageService().update(m2)){
      System.out.println("成功修改數據");
    }
  }

  public static void main(String[] args){
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    MessageTest test=(MessageTest)context.getBean("messageTest");
    test.test();
  }
}
把以上幾個類都在applicationContext.xml文件里面配置好:
<bean name="messageService" class="impl.MessageService">
  <property name="db" ref="easydbo"></property>
</bean>

<bean name="messageTest" class="test.MessageTest">
  <property name="messageService" ref="messageService"></property>
</bean>

好了,現在可以運行下這個簡單的應用了:結果如下(去掉了spring的眾多debug信息):
成功寫入數據
留言標題
留言內容
成功修改數據


  叢上面這個簡單的例子可以看到,EasyDBO和spring可以很簡單的集成,就像使用hibernate,ibaits類似。下面來看一個使用了cache的配置:
  <bean id="easydbo" class="com.easyjf.dbo.EasyJDB" singleton="true">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configFiles">
      <list>
        <value>/mappings.xml</value>
      </list>
    </property>
    <property name="showSql" value="true"></property>
    <property name="enableCache" value="true"></property>
    <property name="innerCache" ref="dcache"></property> ???
  </bean>

  <bean name="dcache" class="com.easyjf.dbo.DboCache">
    <property name="cache" ref="easycache"></property>
  </bean>

  <bean name="easycache" class="com.easyjf.cache.EasyCache" />
  在上面的配置片斷中,我們把Message的mapping信息放在了mappings.xml中,所以這時的Message對象只是一個單純的javabean了。另外,我們使用setter注入了一個cache,通過使用showsql=true,和在代碼中的重復查詢操作:
for(int i=0;i<5;i++){
  java.util.List list=this.getMessageService().getAllMessages();
  Message m2=(Message)list.get(0);
  System.out.println(m2.getTitle());
  System.out.println(m2.getContent());
}
我們可以看到debug信息:
[main] INFO? com.easyjf.cache.store.MemoryStore? - defaultCache: defaultMemoryStore中找到OBJECT:domain.Message:1
1359 [main] INFO? com.easyjf.cache.store.MemoryStore? - defaultCache: defaultMemoryStore中找到OBJECT:domain.Message:2
Cache已經成功地在運行了。

5.3 在Struts中使用EasyDBO

  一般來說,現在的struts都是和spring集成使用的,這種情況下,就使用上面的那個演示即可,還有一種方法就是門面模式,這種情況下,EasyDBO的使用同前面講解得EasyDBO的普通使用方法。如果應用與數據庫交道確實很簡單,那么在這種情況下可以把EasyDBO的一個實例在一個抽象的公共類中提供,而要使用數據庫的action都繼承這個類就可以了。還有一種使用方法就是類似于hibernate為struts提供的plugin一樣,可以在一個plugin中實例化一個EasyDBO的實例,并放在applicationContext或者session里面供action使用。
  下面給一個例子,演示把EasyDBO的一個實例在一個抽象的公共類中提供,而要使用數據庫的action都繼承這個類的用法。例子仍然使用message。首先創建一個BaseDaoAction:
public class BaseDaoAction extends Action {
  private EasyJDB easyjdb;
  protected EasyJDB getEasyjdb() {
    if(easyjdb==null){
    easyjdb=initJdb();
    }
  return easyjdb;
  }

  private EasyJDB initJdb(){
    BasicDataSource datasource = new BasicDataSource();
    datasource.setDriverClassName("org.gjt.mm.mysql.Driver");
    datasource.setUrl("jdbc:mysql://127.0.0.1:3306/easydbotest");
    datasource.setUsername("root");
    datasource.setPassword("mysql");
    com.easyjf.dbo.EasyJDB db=new com.easyjf.dbo.EasyJDB(datasource);
    return db;
  }
}
然后創建一個ActionForm:
MessageForm:
public class MessageForm extends ActionForm {
  private String title;
  private String content;
  public String getContent() {
    return content;
  }
  //...


最后是用來進行持久化處理MessageAction:
public class MessageAction extends BaseDaoAction {
  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception {
      MessageForm messageform=(MessageForm)form;
      Date date=new Date();
      String title=messageform.getTitle();
      String content=messageform.getContent();
      Message message=new Message();
      message.setTitle(title);
      message.setContent(content);
      if(this.getEasyjdb.add(message)){
        return mapping.findForward("successed");
      }
      return mapping.findForward(“faild”);
}
這時的Message的映射方式隨便哪種都行。同樣,像延遲加載等配制都如出一轍了。

六、使用EasyDBO的開源項目介紹

6.1 EasyJF開源Blog系統

  EasyJF開源Blog系統是一個由EasyJF開源團隊組織開發的基于Java平臺的開源博客系統。當前Blog已經實現了基本的基本的博客的書寫、流量統計、排名、個人像冊、RSS、支持自定義模板、靜態html文件生成、權限系統、積分系統等功能。另外還將加入博客圈、音樂、專題等功能及更強大的權限系統支持。系統使用基于OO的方法設計,采用多層B/S構架,數據庫持久層使用EasyDBO,Web層使用EasyJWeb框架,java代碼與頁面完全分離,易擴展。歡迎廣大Java開源愛好者下載交流,并請多提寶貴意見及建議!  
  系統演示:http://blog.easyjf.com
  系統SVN:http://svn.easyjf.com/repository/easyjf/easyjfblog/
  系統源碼下載:http://dl.easyjf.com/downloads/easyjf/blog/easyjf-blog-0.1.1.zip

6.2 簡易java框架開源論壇系統(最新版本0.5,更新時間10月1日)

  簡易java框架開源論壇系統擁有常用論壇系統的基本功能,集前臺后臺代碼為一體,支持UBB。該論壇系統使用基于OO的方法設計,采用多層B/S構架,數據庫持久層主要使用簡易數據庫開源框架EasyDBO,Web層使用EasyJWeb框架,java代碼與頁面完全分離,易擴展。歡迎廣大Java愛好者下載使用。
  系統演示:http://ent.easyjf.com
  系統SVN:http://svn.easyjf.com/repository/easyjf/easyjfbbs/
  系統源碼下載:http://dl.easyjf.com/downloads/easyjf-bbs-0.5.0.zip

6.3 簡易java框架開源訂銷管理系統(最新更新:2006-4-3)

  該系統是一個使用Java語言開發,以國內開源Web MVC框架EasyJWeb作系統引擎的Java Web應用系統.系統主要實現的功能有訂單錄入、打印、銷售匯總、原料管理、客戶管理、生產配料計算、報表打印、匯總、系統數據管理及維護等功能,是一個使用非常簡單的編碼方式實現的Web開源應用系統。
  系統采用面向對象的設計方法,頁面設計及系統邏輯分離,具有較好的擴展性。系統使用數據庫中間件技術,支持My SQL、MS SQL Server等多種數據庫系統平臺。系統涉及到復雜表單數據提交、AJAX無刷新數據提交、WEB打印等常用應用軟件中涉及到的技術。
  系統在線演示地址:http://asp.easyjf.com 用戶名:test 密碼:test
  源碼下載:http://www.easyjf.com/download/erp0.1.zip

6.4 EasyJF開源網上會議系統iula-0.1.0(最新更新:2006-7-13)

  EasyJF開源網上會議系統iula是一個使用AJAX+EasyJWeb+EasyDBO及多線程技術技術開發的網上信息交流及互動系統,主要供EasyJF開源團隊的成員網上會議使用,會議系統模擬傳統的會議形式,可以同時開設多個不同主題的會議室,每個會議室需要提供訪問權限控制功能,會議中能夠指定會議發言模式(分為排隊發言、自由發言兩種),系統能自動記錄每個會議室的發言信息,可以供參會人員長期查閱。
  作為一個開源項目,iula-0.1.0版本當前已經實現了AJAX基本框架搭建,網上文字信息的基本交流等功能,可以作為網上會議或類似信息交流系統的一個基本框架。
  系統演示:http://www.easyjf.com/chatRoom.ejf?easyJWebCommand=show
  源碼下載:http://dl.easyjf.com/downloads/easyjf-iula-0.1.0.zip
  安裝說明:http://www.easyjf.com/html/20060713/2208218216744714.htm
  svn地址:http://svn.easyjf.com/repository/easyjf/easyjfiula

  更多實用項目介紹,請隨時關注EasyDBO官方網站:www.easyjf.com

七、結束語

  EasyDBO從項目發起到現在,已經歷將近7個月了,這期間我們遇到了很多困難,也曾經有很多次放棄的念頭,然而在廣大開源愛好者鼓勵下,終于有了這一次比較大的更新。
  感謝與EasyDBO項目組全體成員的辛勤勞動及付出,感謝EasyJF其它項目成員給們做了大量的系統測試工作,更要感謝廣大的開源愛好者對我們的建議及幫助。

  當然,由于EasyDBO項目組開發人員技術水平有限,再加上本項目還沒有得到比較徹底的測試與應用實踐,因此這個項目中肯定存在著或多或少的問題。因此,我們非常需要得到廣大開源愛者的關注與支持,歡迎大家給我們的開源作品提出批評或者建議,你所做的一切努力,都將給我們更好地改進和完善框架提供莫大的幫助。

八、聯系我們

總結

以上是生活随笔為你收集整理的EasyJF的全部內容,希望文章能夠幫你解決所遇到的問題。

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

日本高清一区免费中文视频 | 97夜夜澡人人双人人人喊 | 5858s亚洲色大成网站www | 特大黑人娇小亚洲女 | 无码人妻久久一区二区三区不卡 | 亚洲精品综合五月久久小说 | 自拍偷自拍亚洲精品10p | 免费人成网站视频在线观看 | 国产精品国产自线拍免费软件 | 无码中文字幕色专区 | 成人精品一区二区三区中文字幕 | 5858s亚洲色大成网站www | 青青青爽视频在线观看 | 久久精品视频在线看15 | 日韩av无码一区二区三区不卡 | а√天堂www在线天堂小说 | 一本无码人妻在中文字幕免费 | 国产熟女一区二区三区四区五区 | 亚洲日本一区二区三区在线 | 99视频精品全部免费免费观看 | 国产9 9在线 | 中文 | 十八禁视频网站在线观看 | 日本一区二区更新不卡 | 国产乱子伦视频在线播放 | 一本久道久久综合婷婷五月 | 亚洲欧洲中文日韩av乱码 | 国产成人无码av片在线观看不卡 | 岛国片人妻三上悠亚 | 97夜夜澡人人爽人人喊中国片 | 亚洲成a人片在线观看无码3d | 77777熟女视频在线观看 а天堂中文在线官网 | 亚欧洲精品在线视频免费观看 | 亚洲 欧美 激情 小说 另类 | 蜜桃视频插满18在线观看 | 国产激情艳情在线看视频 | 婷婷五月综合缴情在线视频 | 熟妇激情内射com | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 1000部夫妻午夜免费 | 男女性色大片免费网站 | 国产 浪潮av性色四虎 | 国产午夜福利亚洲第一 | 亚洲日韩乱码中文无码蜜桃臀网站 | 狠狠色欧美亚洲狠狠色www | 国产精品二区一区二区aⅴ污介绍 | 欧美xxxx黑人又粗又长 | 99视频精品全部免费免费观看 | 欧美高清在线精品一区 | 久久久久久av无码免费看大片 | 亚无码乱人伦一区二区 | 久久久久99精品成人片 | 麻豆国产97在线 | 欧洲 | 国产亚洲精品久久久久久 | 成人影院yy111111在线观看 | 亚洲国产精品一区二区第一页 | 日本护士xxxxhd少妇 | 中国女人内谢69xxxx | 精品一区二区不卡无码av | 丝袜 中出 制服 人妻 美腿 | 国产精品美女久久久网av | 扒开双腿疯狂进出爽爽爽视频 | 麻豆精产国品 | 亚洲无人区午夜福利码高清完整版 | 日产精品99久久久久久 | 亚洲精品一区国产 | 久久亚洲国产成人精品性色 | 领导边摸边吃奶边做爽在线观看 | 精品人人妻人人澡人人爽人人 | 久久久久99精品成人片 | 亚洲 a v无 码免 费 成 人 a v | 亚洲色欲久久久综合网东京热 | 狠狠色色综合网站 | 国产黄在线观看免费观看不卡 | 最新国产乱人伦偷精品免费网站 | 亚洲日韩精品欧美一区二区 | 精品成人av一区二区三区 | 国产极品美女高潮无套在线观看 | 狠狠色丁香久久婷婷综合五月 | 奇米影视7777久久精品人人爽 | 久久久久久久人妻无码中文字幕爆 | 亚洲自偷自偷在线制服 | 国产精品久久久午夜夜伦鲁鲁 | 精品久久久无码中文字幕 | 人人妻人人澡人人爽精品欧美 | 亚洲 日韩 欧美 成人 在线观看 | 无码国产色欲xxxxx视频 | 国产精品久久久久久久9999 | 国产成人综合色在线观看网站 | 成人免费视频视频在线观看 免费 | 亚洲va中文字幕无码久久不卡 | 99麻豆久久久国产精品免费 | 伊人久久大香线蕉av一区二区 | 亚洲一区二区三区 | 狠狠噜狠狠狠狠丁香五月 | 日本精品人妻无码77777 天堂一区人妻无码 | 中文字幕av无码一区二区三区电影 | 内射巨臀欧美在线视频 | 无码人妻丰满熟妇区毛片18 | 国产午夜福利亚洲第一 | 狂野欧美性猛交免费视频 | 蜜桃视频韩日免费播放 | 国产两女互慰高潮视频在线观看 | 特大黑人娇小亚洲女 | 又粗又大又硬毛片免费看 | 国产精品理论片在线观看 | 久久亚洲日韩精品一区二区三区 | 欧美日韩视频无码一区二区三 | 久久精品99久久香蕉国产色戒 | а√天堂www在线天堂小说 | 精品一二三区久久aaa片 | 国产欧美亚洲精品a | 精品国产乱码久久久久乱码 | 国产精品人人爽人人做我的可爱 | 思思久久99热只有频精品66 | 人人妻人人澡人人爽欧美一区 | 中文字幕人妻丝袜二区 | 99久久亚洲精品无码毛片 | 精品厕所偷拍各类美女tp嘘嘘 | 蜜桃av抽搐高潮一区二区 | 激情内射日本一区二区三区 | av小次郎收藏 | 午夜熟女插插xx免费视频 | 伊在人天堂亚洲香蕉精品区 | 国产综合在线观看 | 亚洲第一无码av无码专区 | 黑人玩弄人妻中文在线 | 亚洲中文字幕无码中文字在线 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲 激情 小说 另类 欧美 | 九九久久精品国产免费看小说 | 欧美freesex黑人又粗又大 | 国产精品成人av在线观看 | 在线 国产 欧美 亚洲 天堂 | 国精品人妻无码一区二区三区蜜柚 | 国产婷婷色一区二区三区在线 | 欧美xxxxx精品 | 熟妇激情内射com | 精品偷自拍另类在线观看 | 人妻夜夜爽天天爽三区 | 久青草影院在线观看国产 | 亚洲欧洲中文日韩av乱码 | 丰满肥臀大屁股熟妇激情视频 | 亚洲狠狠色丁香婷婷综合 | 无码国模国产在线观看 | 男女猛烈xx00免费视频试看 | 男女性色大片免费网站 | 性色欲情网站iwww九文堂 | 午夜男女很黄的视频 | 欧美变态另类xxxx | 伊人久久大香线蕉亚洲 | av香港经典三级级 在线 | 久精品国产欧美亚洲色aⅴ大片 | 精品国产青草久久久久福利 | 久久综合狠狠综合久久综合88 | 又色又爽又黄的美女裸体网站 | 精品国产一区av天美传媒 | 亚洲国产av美女网站 | 国内精品一区二区三区不卡 | 国产精品久久国产精品99 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文精品无码中文字幕无码专区 | 女人和拘做爰正片视频 | 久久国语露脸国产精品电影 | 一本加勒比波多野结衣 | 一本精品99久久精品77 | 国产精品18久久久久久麻辣 | 国产乡下妇女做爰 | av无码电影一区二区三区 | 国产精品18久久久久久麻辣 | 久热国产vs视频在线观看 | a片在线免费观看 | 国产精品永久免费视频 | 国产精品国产三级国产专播 | 欧美激情综合亚洲一二区 | 东京热无码av男人的天堂 | 亚洲 另类 在线 欧美 制服 | 欧美 日韩 人妻 高清 中文 | 乌克兰少妇性做爰 | 无码人妻丰满熟妇区五十路百度 | 成在人线av无码免费 | 亚洲区小说区激情区图片区 | 久久久www成人免费毛片 | 国产精品igao视频网 | 国产精品久久久一区二区三区 | 日韩精品无码免费一区二区三区 | 欧美日韩精品 | 久久97精品久久久久久久不卡 | 99久久久无码国产aaa精品 | 蜜桃视频韩日免费播放 | 老司机亚洲精品影院 | aⅴ亚洲 日韩 色 图网站 播放 | 又色又爽又黄的美女裸体网站 | 免费视频欧美无人区码 | 国产三级久久久精品麻豆三级 | 中文字幕久久久久人妻 | 国产精品久久久久久亚洲影视内衣 | 三上悠亚人妻中文字幕在线 | 免费看少妇作爱视频 | 亚洲中文字幕va福利 | 熟妇人妻无码xxx视频 | 久久国产精品精品国产色婷婷 | 夫妻免费无码v看片 | 东京热男人av天堂 | 国产亚洲精品精品国产亚洲综合 | 亚洲天堂2017无码中文 | 国产乡下妇女做爰 | 国精产品一区二区三区 | 国产精品毛多多水多 | 大地资源网第二页免费观看 | 清纯唯美经典一区二区 | 97无码免费人妻超级碰碰夜夜 | 漂亮人妻洗澡被公强 日日躁 | 亚洲一区二区三区无码久久 | 日韩成人一区二区三区在线观看 | 国产香蕉尹人视频在线 | 欧美第一黄网免费网站 | 欧美亚洲日韩国产人成在线播放 | 最新版天堂资源中文官网 | 日韩精品a片一区二区三区妖精 | 久久视频在线观看精品 | 真人与拘做受免费视频 | 少妇愉情理伦片bd | 大胆欧美熟妇xx | 呦交小u女精品视频 | 国产成人综合色在线观看网站 | 丰满少妇高潮惨叫视频 | 国产精品怡红院永久免费 | 国产真人无遮挡作爱免费视频 | 久久久精品国产sm最大网站 | 成人动漫在线观看 | 天天燥日日燥 | 色欲综合久久中文字幕网 | 亚洲色www成人永久网址 | 伊人久久婷婷五月综合97色 | 亚洲国产精品久久人人爱 | 桃花色综合影院 | 国产无遮挡吃胸膜奶免费看 | 精品久久久久久人妻无码中文字幕 | 亚洲成熟女人毛毛耸耸多 | 亚洲成a人片在线观看日本 | 亚洲日韩一区二区三区 | 亚洲天堂2017无码中文 | 国产精品久久精品三级 | 国产莉萝无码av在线播放 | 国产精品.xx视频.xxtv | 国产麻豆精品一区二区三区v视界 | 四十如虎的丰满熟妇啪啪 | 日日摸日日碰夜夜爽av | 丰满诱人的人妻3 | 99久久亚洲精品无码毛片 | 欧洲vodafone精品性 | 色综合久久久久综合一本到桃花网 | 欧美野外疯狂做受xxxx高潮 | 国产精品久久久久7777 | 色窝窝无码一区二区三区色欲 | 亚洲精品一区二区三区大桥未久 | 老头边吃奶边弄进去呻吟 | 一二三四社区在线中文视频 | 日本乱偷人妻中文字幕 | 国产精品久久久久7777 | 欧美老妇交乱视频在线观看 | 国产av一区二区三区最新精品 | 国产成人无码午夜视频在线观看 | 无码免费一区二区三区 | 精品久久久中文字幕人妻 | 亚洲欧美日韩国产精品一区二区 | 欧美老熟妇乱xxxxx | 18无码粉嫩小泬无套在线观看 | 领导边摸边吃奶边做爽在线观看 | 少妇无套内谢久久久久 | 色一情一乱一伦一区二区三欧美 | 国产三级久久久精品麻豆三级 | 久久精品无码一区二区三区 | 色窝窝无码一区二区三区色欲 | 狠狠噜狠狠狠狠丁香五月 | 久久精品视频在线看15 | 无套内谢老熟女 | 精品国产一区二区三区av 性色 | 亚洲中文无码av永久不收费 | 精品成在人线av无码免费看 | 成人免费无码大片a毛片 | 欧美35页视频在线观看 | 久久久久免费精品国产 | 国产精品人人爽人人做我的可爱 | 高潮喷水的毛片 | 麻豆果冻传媒2021精品传媒一区下载 | 午夜不卡av免费 一本久久a久久精品vr综合 | 在线а√天堂中文官网 | 日韩av无码一区二区三区不卡 | 国产精品亚洲а∨无码播放麻豆 | 成人无码精品一区二区三区 | 88国产精品欧美一区二区三区 | 成人无码影片精品久久久 | 无码人妻少妇伦在线电影 | 白嫩日本少妇做爰 | 国产又粗又硬又大爽黄老大爷视 | 领导边摸边吃奶边做爽在线观看 | 少妇的肉体aa片免费 | 亚洲色欲久久久综合网东京热 | 国产成人亚洲综合无码 | 欧美亚洲日韩国产人成在线播放 | 大乳丰满人妻中文字幕日本 | 免费人成在线视频无码 | 在线观看免费人成视频 | 99国产精品白浆在线观看免费 | 午夜性刺激在线视频免费 | 成人性做爰aaa片免费看 | 精品一区二区三区波多野结衣 | 俺去俺来也在线www色官网 | 色综合视频一区二区三区 | 中文字幕无码日韩专区 | 熟女少妇人妻中文字幕 | 东京热无码av男人的天堂 | 午夜熟女插插xx免费视频 | 久久精品国产亚洲精品 | 国产偷自视频区视频 | 欧美激情一区二区三区成人 | 精品久久久久香蕉网 | 人人妻人人澡人人爽人人精品浪潮 | 牲交欧美兽交欧美 | 少妇性l交大片 | 色婷婷香蕉在线一区二区 | 国产肉丝袜在线观看 | 国产精品久久久久9999小说 | 久久精品国产精品国产精品污 | 欧美激情综合亚洲一二区 | 俺去俺来也www色官网 | 国内老熟妇对白xxxxhd | 亚洲精品久久久久久一区二区 | 好爽又高潮了毛片免费下载 | 樱花草在线社区www | 亚洲区欧美区综合区自拍区 | 香港三级日本三级妇三级 | 日本熟妇大屁股人妻 | 亚洲一区二区三区偷拍女厕 | 亚洲国产欧美在线成人 | 欧美性猛交内射兽交老熟妇 | 欧美日韩一区二区综合 | 日本高清一区免费中文视频 | 国产成人午夜福利在线播放 | 日韩 欧美 动漫 国产 制服 | 亚洲成av人在线观看网址 | 一区二区传媒有限公司 | 亚洲另类伦春色综合小说 | 中文字幕乱妇无码av在线 | 欧美国产日韩久久mv | 性色欲网站人妻丰满中文久久不卡 | 国产精品.xx视频.xxtv | 97无码免费人妻超级碰碰夜夜 | 国产精品久免费的黄网站 | 国产熟妇高潮叫床视频播放 | 亚洲aⅴ无码成人网站国产app | 精品亚洲成av人在线观看 | 亚洲经典千人经典日产 | 久久婷婷五月综合色国产香蕉 | 中文字幕无码日韩专区 | 亚洲欧美精品伊人久久 | 国产电影无码午夜在线播放 | aa片在线观看视频在线播放 | 丰满少妇高潮惨叫视频 | 精品人妻中文字幕有码在线 | 无码国产乱人伦偷精品视频 | 麻豆精品国产精华精华液好用吗 | 青青青爽视频在线观看 | 久久精品人人做人人综合试看 | 亚洲欧美综合区丁香五月小说 | 纯爱无遮挡h肉动漫在线播放 | 无码人妻出轨黑人中文字幕 | 国产色精品久久人妻 | 精品日本一区二区三区在线观看 | 5858s亚洲色大成网站www | 黑人玩弄人妻中文在线 | 成人三级无码视频在线观看 | 精品亚洲韩国一区二区三区 | 国产偷自视频区视频 | 宝宝好涨水快流出来免费视频 | 色五月五月丁香亚洲综合网 | 国产福利视频一区二区 | 西西人体www44rt大胆高清 | 色窝窝无码一区二区三区色欲 | 丰满诱人的人妻3 | 精品厕所偷拍各类美女tp嘘嘘 | 欧美高清在线精品一区 | 欧美人与动性行为视频 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 色综合久久中文娱乐网 | 激情综合激情五月俺也去 | 久久亚洲日韩精品一区二区三区 | 狂野欧美激情性xxxx | 国产欧美熟妇另类久久久 | 帮老师解开蕾丝奶罩吸乳网站 | 国产av人人夜夜澡人人爽麻豆 | 中文字幕乱码人妻无码久久 | 影音先锋中文字幕无码 | 亚洲色无码一区二区三区 | 97久久精品无码一区二区 | 学生妹亚洲一区二区 | 国产农村乱对白刺激视频 | 色一情一乱一伦一视频免费看 | 国产av人人夜夜澡人人爽麻豆 | 国产熟女一区二区三区四区五区 | 亚洲综合色区中文字幕 | 狠狠色色综合网站 | 精品久久久久香蕉网 | 日韩精品a片一区二区三区妖精 | 国产又粗又硬又大爽黄老大爷视 | 无遮挡啪啪摇乳动态图 | 欧美丰满老熟妇xxxxx性 | 男人和女人高潮免费网站 | а√天堂www在线天堂小说 | 亚洲国精产品一二二线 | 中文字幕无码视频专区 | 99精品视频在线观看免费 | 少妇久久久久久人妻无码 | 人妻少妇被猛烈进入中文字幕 | 性色欲情网站iwww九文堂 | 国产免费无码一区二区视频 | 99er热精品视频 | 18黄暴禁片在线观看 | www国产亚洲精品久久久日本 | 午夜无码人妻av大片色欲 | 任你躁国产自任一区二区三区 | 久久久久国色av免费观看性色 | 久久亚洲日韩精品一区二区三区 | 一本一道久久综合久久 | 初尝人妻少妇中文字幕 | 四虎永久在线精品免费网址 | 久久综合给合久久狠狠狠97色 | 亚洲精品中文字幕乱码 | 久久久久亚洲精品中文字幕 | 青春草在线视频免费观看 | 麻豆md0077饥渴少妇 | 日本大香伊一区二区三区 | 国产真实乱对白精彩久久 | 99久久人妻精品免费二区 | 理论片87福利理论电影 | 久久综合香蕉国产蜜臀av | 麻豆国产人妻欲求不满 | 131美女爱做视频 | 帮老师解开蕾丝奶罩吸乳网站 | 成人aaa片一区国产精品 | 自拍偷自拍亚洲精品被多人伦好爽 | 熟女俱乐部五十路六十路av | 无码人妻黑人中文字幕 | 国产精品成人av在线观看 | 在教室伦流澡到高潮hnp视频 | 无码播放一区二区三区 | 国产在线精品一区二区三区直播 | 激情人妻另类人妻伦 | 国产又粗又硬又大爽黄老大爷视 | 荫蒂添的好舒服视频囗交 | 国产成人综合色在线观看网站 | 欧美日韩一区二区三区自拍 | 久久精品人妻少妇一区二区三区 | 国产麻豆精品一区二区三区v视界 | 国产真人无遮挡作爱免费视频 | 天天躁夜夜躁狠狠是什么心态 | 中文字幕人成乱码熟女app | 日本精品人妻无码免费大全 | 1000部夫妻午夜免费 | 亚洲区小说区激情区图片区 | 少妇邻居内射在线 | 给我免费的视频在线观看 | 中文精品无码中文字幕无码专区 | 欧美35页视频在线观看 | 99re在线播放 | 久久精品中文字幕一区 | 中文字幕无码乱人伦 | 波多野42部无码喷潮在线 | 亚洲精品午夜无码电影网 | 日韩亚洲欧美中文高清在线 | 亚洲欧美国产精品专区久久 | 亚洲精品中文字幕乱码 | 少妇一晚三次一区二区三区 | 久久久久久久女国产乱让韩 | 国精品人妻无码一区二区三区蜜柚 | 久久久国产精品无码免费专区 | 久久午夜无码鲁丝片秋霞 | 亚洲色大成网站www | 国产精品a成v人在线播放 | 国产成人无码午夜视频在线观看 | 欧美黑人乱大交 | 亚洲a无码综合a国产av中文 | 国产亚洲精品久久久久久久久动漫 | 国产三级精品三级男人的天堂 | 久久国产精品偷任你爽任你 | 日产精品99久久久久久 | 国产精品视频免费播放 | 97人妻精品一区二区三区 | 国産精品久久久久久久 | 久久久精品欧美一区二区免费 | 九九在线中文字幕无码 | 色综合久久久久综合一本到桃花网 | 国产精品久免费的黄网站 | 亚洲乱亚洲乱妇50p | 成人精品视频一区二区 | av无码电影一区二区三区 | 狠狠cao日日穞夜夜穞av | 亚洲欧美综合区丁香五月小说 | 国内精品久久久久久中文字幕 | 日韩人妻少妇一区二区三区 | 免费无码午夜福利片69 | 欧美日韩久久久精品a片 | 欧美日韩人成综合在线播放 | 又紧又大又爽精品一区二区 | 四虎国产精品一区二区 | 丝袜足控一区二区三区 | 又黄又爽又色的视频 | 国内丰满熟女出轨videos | 男女猛烈xx00免费视频试看 | 亚洲色成人中文字幕网站 | 国产卡一卡二卡三 | 欧美阿v高清资源不卡在线播放 | 国产一区二区三区精品视频 | 秋霞成人午夜鲁丝一区二区三区 | 久久精品丝袜高跟鞋 | 成人免费视频一区二区 | 在线欧美精品一区二区三区 | 网友自拍区视频精品 | 人人妻人人澡人人爽人人精品 | 波多野结衣乳巨码无在线观看 | 国产黑色丝袜在线播放 | 一本久久a久久精品亚洲 | 国精品人妻无码一区二区三区蜜柚 | 水蜜桃亚洲一二三四在线 | 扒开双腿吃奶呻吟做受视频 | 人妻人人添人妻人人爱 | 日日橹狠狠爱欧美视频 | 欧美老熟妇乱xxxxx | 久久久亚洲欧洲日产国码αv | 人人爽人人澡人人人妻 | www国产亚洲精品久久久日本 | 久久人人爽人人爽人人片ⅴ | 大乳丰满人妻中文字幕日本 | 亚洲国产成人av在线观看 | 日韩精品无码免费一区二区三区 | 久久天天躁夜夜躁狠狠 | 亚洲一区二区三区 | 国精品人妻无码一区二区三区蜜柚 | 欧美日本日韩 | 国产精品久久久久7777 | 亚洲欧美精品伊人久久 | 大肉大捧一进一出视频出来呀 | 精品日本一区二区三区在线观看 | 人人爽人人爽人人片av亚洲 | 国产综合在线观看 | 香港三级日本三级妇三级 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 日韩精品久久久肉伦网站 | 在线视频网站www色 | 成人无码影片精品久久久 | 国产精品嫩草久久久久 | 又色又爽又黄的美女裸体网站 | 人人爽人人爽人人片av亚洲 | 成人无码影片精品久久久 | 国产精品久久久一区二区三区 | 国产亚洲人成在线播放 | 日韩av无码一区二区三区 | 午夜免费福利小电影 | 国产av一区二区精品久久凹凸 | 99久久精品无码一区二区毛片 | 国产精品亚洲专区无码不卡 | 免费观看黄网站 | 亚洲国产成人av在线观看 | 亚洲国产精品一区二区第一页 | 国产成人av免费观看 | 亚洲日韩av一区二区三区中文 | 国产国产精品人在线视 | 亚洲综合无码一区二区三区 | 福利一区二区三区视频在线观看 | 国产人妻精品一区二区三区 | 亚洲国产精品毛片av不卡在线 | 国产成人人人97超碰超爽8 | 7777奇米四色成人眼影 | 丰腴饱满的极品熟妇 | 日本护士xxxxhd少妇 | 四虎4hu永久免费 | 色婷婷欧美在线播放内射 | 国产成人一区二区三区别 | 日本一区二区三区免费高清 | 动漫av网站免费观看 | 国产人妻人伦精品1国产丝袜 | 国产艳妇av在线观看果冻传媒 | 亚洲另类伦春色综合小说 | 久久精品丝袜高跟鞋 | 双乳奶水饱满少妇呻吟 | 国产绳艺sm调教室论坛 | 亚洲精品www久久久 | 大地资源网第二页免费观看 | 精品亚洲成av人在线观看 | 天天av天天av天天透 | 又色又爽又黄的美女裸体网站 | 亚洲国产精品成人久久蜜臀 | 国产无遮挡又黄又爽免费视频 | www国产精品内射老师 | 精品久久8x国产免费观看 | 亚洲熟女一区二区三区 | 蜜桃视频插满18在线观看 | 亚洲人成网站色7799 | 伊人久久大香线焦av综合影院 | 人人妻人人澡人人爽欧美一区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 永久免费观看国产裸体美女 | 十八禁视频网站在线观看 | 四虎国产精品一区二区 | 青草青草久热国产精品 | 九九久久精品国产免费看小说 | 国产精品久久久久久亚洲影视内衣 | 妺妺窝人体色www婷婷 | 男人和女人高潮免费网站 | 国产精品亚洲专区无码不卡 | 免费人成在线观看网站 | 东京热男人av天堂 | 免费看男女做好爽好硬视频 | 午夜精品一区二区三区的区别 | 国产成人无码一二三区视频 | 综合人妻久久一区二区精品 | 成人亚洲精品久久久久软件 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 一本久久伊人热热精品中文字幕 | 亚洲成av人在线观看网址 | 2020久久超碰国产精品最新 | 中文无码伦av中文字幕 | 精品国产一区av天美传媒 | 精品成人av一区二区三区 | 性啪啪chinese东北女人 | 99久久无码一区人妻 | 天天做天天爱天天爽综合网 | 女人被男人爽到呻吟的视频 | 中文毛片无遮挡高清免费 | 国内老熟妇对白xxxxhd | 无码人妻精品一区二区三区不卡 | 色噜噜亚洲男人的天堂 | 国产偷自视频区视频 | 色诱久久久久综合网ywww | 国产乱人伦偷精品视频 | 国产黑色丝袜在线播放 | 18精品久久久无码午夜福利 | 一本久道高清无码视频 | 十八禁真人啪啪免费网站 | 亚洲一区二区三区在线观看网站 | 日日摸夜夜摸狠狠摸婷婷 | 无码人妻丰满熟妇区五十路百度 | 欧美黑人巨大xxxxx | 午夜男女很黄的视频 | 国产精品视频免费播放 | 97久久国产亚洲精品超碰热 | 伊人久久大香线蕉午夜 | 国产日产欧产精品精品app | 99国产欧美久久久精品 | 波多野结衣高清一区二区三区 | 中文字幕久久久久人妻 | 久久午夜夜伦鲁鲁片无码免费 | 成人女人看片免费视频放人 | 日韩精品无码免费一区二区三区 | 无码纯肉视频在线观看 | 成人动漫在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品国精品国产自在久国产87 | 日本丰满熟妇videos | www国产亚洲精品久久久日本 | 国产麻豆精品一区二区三区v视界 | a片免费视频在线观看 | 欧美日韩在线亚洲综合国产人 | 久久精品人人做人人综合试看 | 玩弄人妻少妇500系列视频 | 给我免费的视频在线观看 | 国产另类ts人妖一区二区 | 国产一区二区三区日韩精品 | 国产97人人超碰caoprom | 亚洲午夜久久久影院 | 国产偷国产偷精品高清尤物 | 国语精品一区二区三区 | 熟妇激情内射com | 丁香花在线影院观看在线播放 | 天天躁夜夜躁狠狠是什么心态 | 亚洲精品午夜国产va久久成人 | 亚洲精品一区二区三区在线 | 狠狠综合久久久久综合网 | 亚洲天堂2017无码 | 国产香蕉尹人视频在线 | 国产婷婷色一区二区三区在线 | 久久99精品国产麻豆蜜芽 | 亚洲人成影院在线无码按摩店 | 免费看男女做好爽好硬视频 | 亚洲大尺度无码无码专区 | 国产精品成人av在线观看 | 日本一区二区三区免费播放 | 一个人看的www免费视频在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 久久精品无码一区二区三区 | 娇妻被黑人粗大高潮白浆 | 清纯唯美经典一区二区 | 真人与拘做受免费视频一 | 色婷婷久久一区二区三区麻豆 | 荫蒂添的好舒服视频囗交 | 久热国产vs视频在线观看 | 亚洲色在线无码国产精品不卡 | 国产电影无码午夜在线播放 | 久久亚洲精品中文字幕无男同 | 国产人妻人伦精品1国产丝袜 | 女高中生第一次破苞av | 亚洲熟妇自偷自拍另类 | 又湿又紧又大又爽a视频国产 | 久久亚洲中文字幕无码 | 日本丰满熟妇videos | 中文字幕无码av波多野吉衣 | 中文字幕人妻无码一夲道 | 丰满人妻精品国产99aⅴ | 伊人久久大香线蕉午夜 | 欧美变态另类xxxx | 色五月丁香五月综合五月 | 中文字幕人成乱码熟女app | 欧美人与动性行为视频 | 狠狠色色综合网站 | 无码av免费一区二区三区试看 | 国产精品美女久久久 | 女人和拘做爰正片视频 | 无码国模国产在线观看 | 亚洲成av人综合在线观看 | 日本一卡2卡3卡四卡精品网站 | 色老头在线一区二区三区 | 又黄又爽又色的视频 | 精品国产av色一区二区深夜久久 | 亚洲成在人网站无码天堂 | 真人与拘做受免费视频 | 日本成熟视频免费视频 | 丝袜 中出 制服 人妻 美腿 | 性做久久久久久久久 | 真人与拘做受免费视频 | 亚洲 高清 成人 动漫 | 18禁黄网站男男禁片免费观看 | 少妇激情av一区二区 | 任你躁在线精品免费 | 免费网站看v片在线18禁无码 | 日本肉体xxxx裸交 | 国产97色在线 | 免 | 国产综合色产在线精品 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲性无码av中文字幕 | 伊人久久大香线焦av综合影院 | 久久亚洲国产成人精品性色 | 欧美人与牲动交xxxx | 久久久成人毛片无码 | 国产精品-区区久久久狼 | 亚洲 另类 在线 欧美 制服 | 强辱丰满人妻hd中文字幕 | 四虎国产精品一区二区 | 亚洲一区二区三区四区 | 精品国产一区二区三区av 性色 | 日日天日日夜日日摸 | 亚洲一区av无码专区在线观看 | 人妻夜夜爽天天爽三区 | 久久国产精品二国产精品 | 久久久婷婷五月亚洲97号色 | 久热国产vs视频在线观看 | 88国产精品欧美一区二区三区 | 中文无码伦av中文字幕 | 亚洲国产精品久久人人爱 | 亚洲综合在线一区二区三区 | 亚洲天堂2017无码 | 亚洲a无码综合a国产av中文 | 99久久人妻精品免费一区 | 亚洲午夜久久久影院 | 人妻尝试又大又粗久久 | 欧美猛少妇色xxxxx | 亚洲精品无码人妻无码 | 成 人 免费观看网站 | 国产超碰人人爽人人做人人添 | 国产在热线精品视频 | 无码帝国www无码专区色综合 | 久久人人97超碰a片精品 | 国产精品成人av在线观看 | 国产激情无码一区二区 | 欧美真人作爱免费视频 | 久久国产精品偷任你爽任你 | 亚洲一区二区三区播放 | 亚洲人成网站免费播放 | 欧美性猛交xxxx富婆 | 真人与拘做受免费视频一 | 欧美黑人乱大交 | 无码人妻少妇伦在线电影 | 美女极度色诱视频国产 | 日韩精品无码一本二本三本色 | 国产精品亚洲lv粉色 | 色噜噜亚洲男人的天堂 | 国产一区二区不卡老阿姨 | 亚洲呦女专区 | 一本大道久久东京热无码av | 成人性做爰aaa片免费看不忠 | 国产熟女一区二区三区四区五区 | www一区二区www免费 | 亚洲成av人在线观看网址 | 激情亚洲一区国产精品 | 中国大陆精品视频xxxx | 成人无码视频在线观看网站 | 国产精品99爱免费视频 | 高潮毛片无遮挡高清免费视频 | 午夜福利电影 | 无码国内精品人妻少妇 | 日韩成人一区二区三区在线观看 | 波多野结衣高清一区二区三区 | 免费国产黄网站在线观看 | 国产福利视频一区二区 | 亚洲a无码综合a国产av中文 | 九九久久精品国产免费看小说 | 久久亚洲日韩精品一区二区三区 | 波多野42部无码喷潮在线 | 成年美女黄网站色大免费视频 | 人人爽人人澡人人高潮 | 亚洲一区av无码专区在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 蜜桃视频插满18在线观看 | 中文字幕日韩精品一区二区三区 | 99麻豆久久久国产精品免费 | 国产成人无码区免费内射一片色欲 | 未满成年国产在线观看 | 狠狠亚洲超碰狼人久久 | 亚洲色成人中文字幕网站 | 丝袜足控一区二区三区 | 水蜜桃亚洲一二三四在线 | 国产福利视频一区二区 | 亚洲国产欧美日韩精品一区二区三区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 成人免费视频视频在线观看 免费 | 天堂在线观看www | 亚洲成色www久久网站 | 成人无码精品一区二区三区 | 精品一区二区不卡无码av | 丰满少妇女裸体bbw | 牲欲强的熟妇农村老妇女 | 99久久精品无码一区二区毛片 | 亚洲国产精品美女久久久久 | 东京一本一道一二三区 | 中国女人内谢69xxxxxa片 | 麻豆果冻传媒2021精品传媒一区下载 | 少妇人妻av毛片在线看 | 一本精品99久久精品77 | 亚洲a无码综合a国产av中文 | 丰满岳乱妇在线观看中字无码 | 2019午夜福利不卡片在线 | 中文精品久久久久人妻不卡 | 丰满护士巨好爽好大乳 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 人妻少妇被猛烈进入中文字幕 | 久久久久久亚洲精品a片成人 | 麻豆md0077饥渴少妇 | 国内精品久久毛片一区二区 | 玩弄人妻少妇500系列视频 | 88国产精品欧美一区二区三区 | 日本饥渴人妻欲求不满 | 国产内射爽爽大片视频社区在线 | 日本免费一区二区三区最新 | 55夜色66夜色国产精品视频 | 免费无码一区二区三区蜜桃大 | 无码一区二区三区在线观看 | 无码国模国产在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 日韩精品无码免费一区二区三区 | 日本精品久久久久中文字幕 | 日本又色又爽又黄的a片18禁 | 欧美精品无码一区二区三区 | 久久久久99精品国产片 | 国内精品九九久久久精品 | 国内综合精品午夜久久资源 | 成 人 网 站国产免费观看 | 亚洲国产精品毛片av不卡在线 | 性啪啪chinese东北女人 | 亚洲成av人片在线观看无码不卡 | 国产亚洲精品精品国产亚洲综合 | 婷婷丁香五月天综合东京热 | 国产黑色丝袜在线播放 | 3d动漫精品啪啪一区二区中 | 国产人妻大战黑人第1集 | 国内精品人妻无码久久久影院蜜桃 | 久久国产精品_国产精品 | 亚洲国产成人a精品不卡在线 | 亚洲国产日韩a在线播放 | 在教室伦流澡到高潮hnp视频 | 鲁鲁鲁爽爽爽在线视频观看 | 国产无套粉嫩白浆在线 | 老熟妇乱子伦牲交视频 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲欧美国产精品久久 | 日日麻批免费40分钟无码 | 黑人巨大精品欧美黑寡妇 | 成人精品一区二区三区中文字幕 | 亚洲中文字幕在线观看 | 亚洲人成网站免费播放 | 欧美放荡的少妇 | 高清不卡一区二区三区 | 国产农村乱对白刺激视频 | 黑人玩弄人妻中文在线 | 国精产品一品二品国精品69xx | 久久久www成人免费毛片 | 色一情一乱一伦 | 亚洲精品一区国产 | 永久免费精品精品永久-夜色 | 精品亚洲成av人在线观看 | 西西人体www44rt大胆高清 | 久久精品视频在线看15 | 国产人妻大战黑人第1集 | 国产人妻人伦精品1国产丝袜 | 少妇一晚三次一区二区三区 | 欧美一区二区三区 | 色综合久久久无码中文字幕 | 六月丁香婷婷色狠狠久久 | 好屌草这里只有精品 | 夜夜影院未满十八勿进 | 色窝窝无码一区二区三区色欲 | 国产午夜无码精品免费看 | 无码国产色欲xxxxx视频 | 亚洲а∨天堂久久精品2021 | 精品久久久久香蕉网 | 国产超碰人人爽人人做人人添 | 国产精品第一区揄拍无码 | 性啪啪chinese东北女人 | 无遮无挡爽爽免费视频 | 少女韩国电视剧在线观看完整 | 国产成人人人97超碰超爽8 | 少妇性l交大片欧洲热妇乱xxx | 亚洲精品综合一区二区三区在线 | 乱码av麻豆丝袜熟女系列 | 国产精品国产三级国产专播 | 嫩b人妻精品一区二区三区 | 国产精品无码一区二区桃花视频 | 午夜成人1000部免费视频 | 无码精品国产va在线观看dvd | 亚洲男人av天堂午夜在 | 亚洲精品成a人在线观看 | 国产97色在线 | 免 | 国产精品爱久久久久久久 | 亚洲毛片av日韩av无码 | 无码国模国产在线观看 | 67194成是人免费无码 | 色综合久久中文娱乐网 | 少妇激情av一区二区 | 一本久道高清无码视频 | 国产精品久久久久影院嫩草 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产高清av在线播放 | 免费无码一区二区三区蜜桃大 | 亚洲人成网站色7799 | 1000部夫妻午夜免费 | 亚洲精品无码国产 | 亚洲欧洲中文日韩av乱码 | 中文字幕精品av一区二区五区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产精品对白交换视频 | 人妻少妇被猛烈进入中文字幕 | 久久视频在线观看精品 | 男女猛烈xx00免费视频试看 | 强辱丰满人妻hd中文字幕 | 人人澡人摸人人添 | 天海翼激烈高潮到腰振不止 | 77777熟女视频在线观看 а天堂中文在线官网 | 中文字幕久久久久人妻 | 成熟妇人a片免费看网站 | 国产手机在线αⅴ片无码观看 | 2019午夜福利不卡片在线 | 一本久道久久综合婷婷五月 | 丰满人妻一区二区三区免费视频 | 日产精品高潮呻吟av久久 | 国产香蕉97碰碰久久人人 | 日日天日日夜日日摸 | 国产成人精品必看 | 国产成人综合色在线观看网站 | 无码一区二区三区在线观看 | 亚洲国产av精品一区二区蜜芽 | 亚洲s色大片在线观看 | 久久国产精品精品国产色婷婷 | 亚洲精品中文字幕乱码 | 中文字幕人成乱码熟女app | 欧美午夜特黄aaaaaa片 | 久久久婷婷五月亚洲97号色 | 国产精品内射视频免费 | 午夜无码区在线观看 | 久久婷婷五月综合色国产香蕉 | 亚洲精品一区三区三区在线观看 | 亚洲成av人片天堂网无码】 | 国产成人无码a区在线观看视频app | 强伦人妻一区二区三区视频18 | 人妻少妇精品无码专区动漫 | 老熟妇乱子伦牲交视频 | 三上悠亚人妻中文字幕在线 | 国产激情无码一区二区app | 亚洲综合无码一区二区三区 | 黑森林福利视频导航 | 日本大香伊一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国内精品久久久久久中文字幕 | 内射后入在线观看一区 | 国产成人精品必看 | 久久久精品国产sm最大网站 | 久久精品无码一区二区三区 | 国产一区二区不卡老阿姨 | 一区二区三区乱码在线 | 欧洲 | 国内精品一区二区三区不卡 | 丰满人妻一区二区三区免费视频 | 国产猛烈高潮尖叫视频免费 | 国产人妻人伦精品1国产丝袜 | 综合网日日天干夜夜久久 | 亚洲中文字幕无码一久久区 | 伊人色综合久久天天小片 | 国产精品无码一区二区三区不卡 | 狠狠噜狠狠狠狠丁香五月 | 国产后入清纯学生妹 | 国产精品久久久久影院嫩草 | 野外少妇愉情中文字幕 | 7777奇米四色成人眼影 | 国产精品理论片在线观看 | 国产精品对白交换视频 | 国产无遮挡又黄又爽又色 | 人妻少妇精品无码专区动漫 | 奇米影视7777久久精品人人爽 | 国产麻豆精品一区二区三区v视界 | 麻豆国产97在线 | 欧洲 | 久久国产精品偷任你爽任你 | 东北女人啪啪对白 | 国语自产偷拍精品视频偷 | 四虎永久在线精品免费网址 | 少妇人妻偷人精品无码视频 | 亚洲精品国产精品乱码视色 | 少妇厨房愉情理9仑片视频 | 久9re热视频这里只有精品 | 99久久精品日本一区二区免费 | 人人爽人人爽人人片av亚洲 | 精品aⅴ一区二区三区 | 日韩av无码一区二区三区 | 国产黑色丝袜在线播放 | 日本爽爽爽爽爽爽在线观看免 | 亚洲综合无码一区二区三区 | 在线播放无码字幕亚洲 | 草草网站影院白丝内射 | 亚洲第一无码av无码专区 | 国产色视频一区二区三区 | 欧美激情一区二区三区成人 | 欧美日韩人成综合在线播放 | 国产av无码专区亚洲awww | 国内少妇偷人精品视频免费 | 粗大的内捧猛烈进出视频 | 国精品人妻无码一区二区三区蜜柚 | 成 人 免费观看网站 | 亚欧洲精品在线视频免费观看 | 国产精品美女久久久 | 日韩视频 中文字幕 视频一区 | 一个人看的www免费视频在线观看 | 欧美丰满老熟妇xxxxx性 | 色婷婷久久一区二区三区麻豆 | 玩弄少妇高潮ⅹxxxyw | 男女猛烈xx00免费视频试看 | 精品久久综合1区2区3区激情 | 少妇性荡欲午夜性开放视频剧场 | 伊人久久大香线蕉av一区二区 | 国产两女互慰高潮视频在线观看 | 亚洲精品久久久久中文第一幕 | 亚洲va中文字幕无码久久不卡 | 亚洲一区二区三区国产精华液 | 波多野结衣高清一区二区三区 | 久久亚洲精品中文字幕无男同 | 亚洲精品一区二区三区在线 | 色综合久久88色综合天天 | 久久久久人妻一区精品色欧美 | 免费无码的av片在线观看 | 天天拍夜夜添久久精品大 | 亚洲综合在线一区二区三区 | 无码纯肉视频在线观看 | 中文亚洲成a人片在线观看 | 国产特级毛片aaaaaa高潮流水 | 无码一区二区三区在线观看 | 亚洲综合无码一区二区三区 | 国产精品va在线观看无码 | 天天躁夜夜躁狠狠是什么心态 | 国产午夜福利亚洲第一 | 久久综合给久久狠狠97色 | yw尤物av无码国产在线观看 | 亚洲国产精品美女久久久久 | 成人aaa片一区国产精品 | 久久久久99精品国产片 | 久久97精品久久久久久久不卡 | 国产成人亚洲综合无码 | 欧美熟妇另类久久久久久不卡 | 欧美freesex黑人又粗又大 | 亚洲综合色区中文字幕 | 欧美丰满熟妇xxxx | 蜜桃无码一区二区三区 | 国产乱子伦视频在线播放 | 色一情一乱一伦一区二区三欧美 | 亚洲日韩乱码中文无码蜜桃臀网站 | 天下第一社区视频www日本 | 亚洲aⅴ无码成人网站国产app | 88国产精品欧美一区二区三区 | 国产综合在线观看 | a在线亚洲男人的天堂 | 国产小呦泬泬99精品 | 午夜精品一区二区三区的区别 | 欧洲熟妇色 欧美 | aⅴ在线视频男人的天堂 | 亚洲成色在线综合网站 | 蜜桃视频插满18在线观看 | 蜜桃视频插满18在线观看 | 婷婷五月综合缴情在线视频 | 久久人人爽人人爽人人片ⅴ | 亚洲成av人片在线观看无码不卡 | 久久成人a毛片免费观看网站 | 色婷婷av一区二区三区之红樱桃 | 伊人久久大香线焦av综合影院 | 国产成人午夜福利在线播放 | 97资源共享在线视频 | 波多野结衣av在线观看 | 99在线 | 亚洲 | 欧美三级不卡在线观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | а√资源新版在线天堂 | 18精品久久久无码午夜福利 | 无码精品人妻一区二区三区av | 亚洲人交乣女bbw | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲精品国产精品乱码视色 | 午夜精品一区二区三区在线观看 | 亚洲综合伊人久久大杳蕉 | 18禁黄网站男男禁片免费观看 | 秋霞成人午夜鲁丝一区二区三区 | 天堂а√在线中文在线 | 国产内射老熟女aaaa | 精品水蜜桃久久久久久久 | 亚洲午夜福利在线观看 | 亚洲高清偷拍一区二区三区 | 亚洲综合无码久久精品综合 | 久久精品中文闷骚内射 | 亚洲热妇无码av在线播放 | 亚洲自偷自拍另类第1页 | 1000部啪啪未满十八勿入下载 | 娇妻被黑人粗大高潮白浆 | 久久久久亚洲精品男人的天堂 | 欧美喷潮久久久xxxxx | 久精品国产欧美亚洲色aⅴ大片 | 国产婷婷色一区二区三区在线 | 亚洲熟妇色xxxxx欧美老妇 | 免费无码午夜福利片69 | 国产又爽又猛又粗的视频a片 | 久久精品国产精品国产精品污 | 正在播放老肥熟妇露脸 | 国产人妻人伦精品1国产丝袜 | 色偷偷人人澡人人爽人人模 | 狠狠综合久久久久综合网 | 成在人线av无码免观看麻豆 | 中文精品久久久久人妻不卡 | 美女张开腿让人桶 | 日产精品高潮呻吟av久久 | 精品国产精品久久一区免费式 | 亚洲 a v无 码免 费 成 人 a v | 乱码av麻豆丝袜熟女系列 | 成人片黄网站色大片免费观看 | 国产成人综合美国十次 | 久久亚洲国产成人精品性色 | 啦啦啦www在线观看免费视频 | 亚洲国产精品一区二区第一页 | 久久国产精品_国产精品 | 乱人伦人妻中文字幕无码久久网 | 国产超碰人人爽人人做人人添 | 中文字幕中文有码在线 | 成熟妇人a片免费看网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久久久99精品国产片 | 丰满人妻被黑人猛烈进入 | 中文字幕 亚洲精品 第1页 | 97夜夜澡人人爽人人喊中国片 | 极品尤物被啪到呻吟喷水 | 久久午夜无码鲁丝片 | 国产精品无套呻吟在线 | 国产成人无码一二三区视频 | 亚洲午夜福利在线观看 | 欧美丰满熟妇xxxx性ppx人交 | 性欧美熟妇videofreesex | 免费观看的无遮挡av | 免费看男女做好爽好硬视频 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲一区二区三区偷拍女厕 | 最新国产麻豆aⅴ精品无码 | 在线观看国产一区二区三区 | 国产偷抇久久精品a片69 | 特黄特色大片免费播放器图片 | 午夜精品一区二区三区的区别 | 精品久久久久久亚洲精品 | 日韩精品一区二区av在线 | 97夜夜澡人人双人人人喊 | 东京热男人av天堂 | 成 人 网 站国产免费观看 | 人人妻人人澡人人爽欧美一区九九 | 欧美日韩视频无码一区二区三 | 国产精品人妻一区二区三区四 | 国产精品国产三级国产专播 | 欧美性生交活xxxxxdddd | 免费视频欧美无人区码 | 久久久中文字幕日本无吗 | 少妇厨房愉情理9仑片视频 | 装睡被陌生人摸出水好爽 | 亚洲人成影院在线观看 | 国产成人精品无码播放 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 夜精品a片一区二区三区无码白浆 | aa片在线观看视频在线播放 | 免费国产黄网站在线观看 | 少妇无套内谢久久久久 | 国产免费无码一区二区视频 | 欧美精品一区二区精品久久 | 国产福利视频一区二区 | 波多野42部无码喷潮在线 | 国产亚洲精品精品国产亚洲综合 | 伊人久久婷婷五月综合97色 | 97人妻精品一区二区三区 | 亚洲综合在线一区二区三区 | 国产精品久久久久无码av色戒 | 成人一区二区免费视频 | 亚洲自偷精品视频自拍 | 欧美日韩一区二区免费视频 | 国产精品亚洲lv粉色 | 中国女人内谢69xxxxxa片 | 亚洲区欧美区综合区自拍区 | 十八禁真人啪啪免费网站 | 鲁鲁鲁爽爽爽在线视频观看 | av在线亚洲欧洲日产一区二区 | 亚洲日韩av一区二区三区四区 | 澳门永久av免费网站 | 久久久久成人片免费观看蜜芽 | 黑人巨大精品欧美一区二区 | 少妇性俱乐部纵欲狂欢电影 | 精品久久久久久人妻无码中文字幕 | 欧美自拍另类欧美综合图片区 | 给我免费的视频在线观看 | 六十路熟妇乱子伦 | 在线精品亚洲一区二区 | 国产亚洲tv在线观看 | 成熟女人特级毛片www免费 | 无码国产乱人伦偷精品视频 | 亚洲中文字幕无码一久久区 | 麻豆果冻传媒2021精品传媒一区下载 | 在线欧美精品一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲国产精品无码一区二区三区 | 久久久久免费看成人影片 | 亚洲综合伊人久久大杳蕉 | 无码帝国www无码专区色综合 | 日韩av无码一区二区三区 | √天堂资源地址中文在线 | 一个人免费观看的www视频 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品久久福利网站 | 国产乱码精品一品二品 | 日韩精品一区二区av在线 | 99久久99久久免费精品蜜桃 | 亚洲一区二区三区国产精华液 | 最新国产麻豆aⅴ精品无码 | 熟女体下毛毛黑森林 | 粗大的内捧猛烈进出视频 | 国产又粗又硬又大爽黄老大爷视 | 一区二区三区高清视频一 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲日韩av一区二区三区四区 | 亚洲一区二区三区国产精华液 | 思思久久99热只有频精品66 | 18禁止看的免费污网站 | 中文字幕乱码人妻二区三区 | √天堂资源地址中文在线 | 亚洲精品中文字幕久久久久 | 色综合久久中文娱乐网 | 亚洲综合另类小说色区 | 国产高潮视频在线观看 | 蜜臀aⅴ国产精品久久久国产老师 | 狠狠噜狠狠狠狠丁香五月 | 麻豆国产人妻欲求不满谁演的 | 亚洲一区二区三区播放 | 一个人看的www免费视频在线观看 | 乱人伦中文视频在线观看 | 玩弄少妇高潮ⅹxxxyw | 国产亚洲人成a在线v网站 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲男女内射在线播放 | 中文字幕无码免费久久9一区9 | 久久国产精品偷任你爽任你 | 国产一区二区三区影院 | 熟妇激情内射com | 精品一区二区三区无码免费视频 | 国产精品国产三级国产专播 | 综合激情五月综合激情五月激情1 | 麻豆国产97在线 | 欧洲 | 无码成人精品区在线观看 | 欧美人与物videos另类 | 午夜无码区在线观看 | 狠狠色丁香久久婷婷综合五月 | 一本大道久久东京热无码av | 熟妇激情内射com | 狠狠亚洲超碰狼人久久 | 国产人妻精品午夜福利免费 | 国产97人人超碰caoprom | 大地资源网第二页免费观看 | 精品人人妻人人澡人人爽人人 | 国产精品久久久久9999小说 | 九九综合va免费看 | 亚洲精品国产第一综合99久久 | 国产亚洲tv在线观看 | 欧美精品一区二区精品久久 | 一本久久伊人热热精品中文字幕 | 亚洲中文字幕成人无码 | 小泽玛莉亚一区二区视频在线 | 欧美老妇交乱视频在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美xxxxx精品 | 久久久久免费精品国产 | 久久精品国产99精品亚洲 | 水蜜桃亚洲一二三四在线 | 99久久久无码国产精品免费 | 老子影院午夜伦不卡 | 国产口爆吞精在线视频 | 青青青爽视频在线观看 | 亚洲欧美色中文字幕在线 | 国产综合久久久久鬼色 | 日本精品少妇一区二区三区 | 成人性做爰aaa片免费看不忠 | 中文字幕无码免费久久99 | 欧美熟妇另类久久久久久多毛 | 亚洲狠狠色丁香婷婷综合 | 亚洲国产精品毛片av不卡在线 | 色情久久久av熟女人妻网站 | 国产精品久久久 | 熟女少妇在线视频播放 | 国产另类ts人妖一区二区 | 色五月丁香五月综合五月 | 久久综合狠狠综合久久综合88 | 久久99精品国产麻豆蜜芽 | 18黄暴禁片在线观看 | 亚洲aⅴ无码成人网站国产app | 亚洲精品中文字幕乱码 | 国产乱人伦av在线无码 | 日韩精品a片一区二区三区妖精 | 日韩精品无码一区二区中文字幕 | 亚洲中文字幕va福利 | 精品乱码久久久久久久 | 成人亚洲精品久久久久软件 | 女人被男人躁得好爽免费视频 | 中文字幕av日韩精品一区二区 | 国产精品久久久久久亚洲毛片 | 亚洲精品中文字幕 | 国产性生大片免费观看性 | 国产成人无码一二三区视频 | 欧美日韩视频无码一区二区三 | 日韩欧美成人免费观看 | 偷窥村妇洗澡毛毛多 | 国产人妻精品一区二区三区 | 国产精品国产自线拍免费软件 | 中文字幕无码乱人伦 | 亚洲精品午夜无码电影网 | 四虎4hu永久免费 | 激情亚洲一区国产精品 | 67194成是人免费无码 | 中文无码精品a∨在线观看不卡 | 亚洲七七久久桃花影院 | 女人和拘做爰正片视频 | 色综合久久中文娱乐网 | 图片小说视频一区二区 | 一二三四在线观看免费视频 | av香港经典三级级 在线 | 天天做天天爱天天爽综合网 | 国产精品怡红院永久免费 | 十八禁视频网站在线观看 | 最近免费中文字幕中文高清百度 | 国产人妻精品一区二区三区不卡 | 亚洲国产精品成人久久蜜臀 | 精品无码国产自产拍在线观看蜜 | 精品亚洲韩国一区二区三区 | 一区二区三区乱码在线 | 欧洲 | 精品久久久久久人妻无码中文字幕 | 一本色道婷婷久久欧美 | 国产成人无码av在线影院 | 亚洲爆乳无码专区 | 色狠狠av一区二区三区 | 婷婷五月综合激情中文字幕 | 精品国精品国产自在久国产87 | 欧美黑人性暴力猛交喷水 | 丰满人妻被黑人猛烈进入 | 精品无码一区二区三区的天堂 | 国产超级va在线观看视频 | 亚洲va中文字幕无码久久不卡 | 午夜福利一区二区三区在线观看 | 亚洲中文字幕va福利 | 久久国内精品自在自线 | 亚洲色偷偷偷综合网 | 两性色午夜免费视频 | 日韩欧美群交p片內射中文 | 色婷婷综合激情综在线播放 | 国产美女精品一区二区三区 | 久久久久av无码免费网 | 精品一区二区三区无码免费视频 | 亚洲色欲久久久综合网东京热 | 人妻插b视频一区二区三区 | 欧美性生交活xxxxxdddd | 一本久道久久综合婷婷五月 | 无码吃奶揉捏奶头高潮视频 | 国产乱码精品一品二品 | 国产亚洲精品久久久ai换 | 国产精品人妻一区二区三区四 | 天堂久久天堂av色综合 | 一个人看的www免费视频在线观看 | 色婷婷久久一区二区三区麻豆 | 大地资源网第二页免费观看 | 76少妇精品导航 | 免费无码肉片在线观看 | 亚洲中文字幕在线无码一区二区 | 国产成人综合在线女婷五月99播放 | 爱做久久久久久 | 一本大道伊人av久久综合 | 色综合久久久久综合一本到桃花网 | 88国产精品欧美一区二区三区 | 日韩精品一区二区av在线 | 久久久久成人片免费观看蜜芽 | 精品 日韩 国产 欧美 视频 | 水蜜桃av无码 | 乱人伦人妻中文字幕无码久久网 | 天天躁日日躁狠狠躁免费麻豆 | 十八禁真人啪啪免费网站 | 国产情侣作爱视频免费观看 | 欧美激情内射喷水高潮 | 无码人妻精品一区二区三区下载 | 人人爽人人澡人人高潮 | 亚洲欧美中文字幕5发布 | 国产国产精品人在线视 | 亚洲无人区午夜福利码高清完整版 | 免费国产黄网站在线观看 | 亚洲经典千人经典日产 | 欧美人与禽zoz0性伦交 | 野外少妇愉情中文字幕 | 久久精品国产一区二区三区 | 又色又爽又黄的美女裸体网站 | 免费中文字幕日韩欧美 | 欧美人与善在线com | 精品欧美一区二区三区久久久 | 99久久婷婷国产综合精品青草免费 | 国产人成高清在线视频99最全资源 | 日韩精品a片一区二区三区妖精 | 2020久久超碰国产精品最新 | 97资源共享在线视频 | 九月婷婷人人澡人人添人人爽 | 亚洲精品国产精品乱码不卡 | 亚洲国产精品一区二区第一页 | www一区二区www免费 | 免费无码一区二区三区蜜桃大 | 内射爽无广熟女亚洲 | 97色伦图片97综合影院 | 久久综合香蕉国产蜜臀av | 欧美日韩视频无码一区二区三 | a在线观看免费网站大全 | 欧美日韩人成综合在线播放 | 88国产精品欧美一区二区三区 | av无码电影一区二区三区 | 大肉大捧一进一出好爽视频 | 久久亚洲精品成人无码 | 国产色xx群视频射精 | 亚洲精品久久久久avwww潮水 | 精品国产成人一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 国产特级毛片aaaaaaa高清 | 成人动漫在线观看 | 又紧又大又爽精品一区二区 | 日韩在线不卡免费视频一区 | 麻豆蜜桃av蜜臀av色欲av | 久久伊人色av天堂九九小黄鸭 | 乱码午夜-极国产极内射 | 亚洲第一无码av无码专区 | 2020久久超碰国产精品最新 | 亚洲欧洲无卡二区视頻 | 国产69精品久久久久app下载 | 国产激情无码一区二区app | 狠狠色欧美亚洲狠狠色www | 国产熟女一区二区三区四区五区 | 亚洲欧美精品aaaaaa片 | 日本又色又爽又黄的a片18禁 | 色五月丁香五月综合五月 | 爽爽影院免费观看 | 久久亚洲日韩精品一区二区三区 | 97久久国产亚洲精品超碰热 | 中文精品久久久久人妻不卡 | 丰满护士巨好爽好大乳 | 亚洲成色www久久网站 | 亚洲精品中文字幕久久久久 | 久久久国产精品无码免费专区 | 国产成人综合色在线观看网站 | 夜夜躁日日躁狠狠久久av | 野外少妇愉情中文字幕 | 久久综合给久久狠狠97色 | 麻豆国产97在线 | 欧洲 | 亚洲国产高清在线观看视频 | 人人妻人人澡人人爽精品欧美 | 任你躁在线精品免费 | 风流少妇按摩来高潮 | 女人色极品影院 | 亚洲一区二区三区在线观看网站 | 国产乱人伦偷精品视频 | 无码帝国www无码专区色综合 | 超碰97人人做人人爱少妇 | 国产绳艺sm调教室论坛 | 亚洲国产精华液网站w | 亚洲国产精品一区二区第一页 | 少妇无码av无码专区在线观看 | 亚洲区欧美区综合区自拍区 | 国产超碰人人爽人人做人人添 | 国产特级毛片aaaaaaa高清 | 鲁鲁鲁爽爽爽在线视频观看 | 女人被男人爽到呻吟的视频 | 99久久精品无码一区二区毛片 | 嫩b人妻精品一区二区三区 | 国产精品久久国产精品99 | 国产人妻人伦精品 | 天堂亚洲2017在线观看 | 欧洲熟妇色 欧美 | 国产免费久久久久久无码 | 日韩欧美群交p片內射中文 | 国产卡一卡二卡三 | 四虎影视成人永久免费观看视频 | 午夜福利不卡在线视频 | 久久国产36精品色熟妇 | 色婷婷av一区二区三区之红樱桃 | 亚洲精品午夜国产va久久成人 | 国产人妻久久精品二区三区老狼 | 国产在线精品一区二区三区直播 | 国内精品一区二区三区不卡 | 中文久久乱码一区二区 | 国产亚洲人成a在线v网站 | 国产精品亚洲а∨无码播放麻豆 | 欧美 亚洲 国产 另类 | 无码吃奶揉捏奶头高潮视频 | 熟妇女人妻丰满少妇中文字幕 | 亚洲人成网站免费播放 | 日本一卡二卡不卡视频查询 | 国产99久久精品一区二区 | 久久人妻内射无码一区三区 | 亚洲人成网站在线播放942 | 久久国产36精品色熟妇 | 性色欲网站人妻丰满中文久久不卡 | 思思久久99热只有频精品66 | 亚洲娇小与黑人巨大交 | 欧美激情综合亚洲一二区 | 国产在线aaa片一区二区99 | 天天综合网天天综合色 | 牛和人交xxxx欧美 | 亚洲va欧美va天堂v国产综合 | 蜜桃臀无码内射一区二区三区 | 亚洲成在人网站无码天堂 | 久久人人爽人人人人片 | 300部国产真实乱 | 亚洲の无码国产の无码步美 | 在线播放无码字幕亚洲 | 亚洲国产精品成人久久蜜臀 | 亚洲人成人无码网www国产 | 亚洲人成网站色7799 | 亚洲啪av永久无码精品放毛片 | 三上悠亚人妻中文字幕在线 | 双乳奶水饱满少妇呻吟 | 国产一区二区三区四区五区加勒比 | 国产97在线 | 亚洲 | 国产综合色产在线精品 | 精品久久8x国产免费观看 | 日欧一片内射va在线影院 | 中文字幕日产无线码一区 | 久久久国产精品无码免费专区 | 亚洲精品一区二区三区婷婷月 | 国产成人无码区免费内射一片色欲 | 亚洲中文字幕无码一久久区 | 天天躁日日躁狠狠躁免费麻豆 | 中文字幕无码热在线视频 | 天天做天天爱天天爽综合网 | 成熟女人特级毛片www免费 | 色婷婷综合中文久久一本 | 国产亚洲日韩欧美另类第八页 | 无码精品国产va在线观看dvd | 麻豆md0077饥渴少妇 | 无码帝国www无码专区色综合 | 嫩b人妻精品一区二区三区 | 俄罗斯老熟妇色xxxx | 亚洲精品久久久久avwww潮水 | 国产午夜亚洲精品不卡下载 | 亚洲欧美精品aaaaaa片 | 55夜色66夜色国产精品视频 | 中国女人内谢69xxxx | 搡女人真爽免费视频大全 | 午夜成人1000部免费视频 | 中文字幕无码免费久久9一区9 | 一区二区三区乱码在线 | 欧洲 | 久久精品国产亚洲精品 | 亚洲精品综合一区二区三区在线 | 免费中文字幕日韩欧美 | 国产成人精品三级麻豆 | 熟妇人妻无乱码中文字幕 | 欧美精品免费观看二区 | 水蜜桃亚洲一二三四在线 | 三上悠亚人妻中文字幕在线 | 女人被男人躁得好爽免费视频 | 窝窝午夜理论片影院 | 疯狂三人交性欧美 | 欧美 日韩 人妻 高清 中文 | 性欧美熟妇videofreesex | 麻豆国产人妻欲求不满谁演的 | 亚洲日韩av片在线观看 | www一区二区www免费 | 午夜精品久久久久久久久 | 日本护士xxxxhd少妇 | 丝袜 中出 制服 人妻 美腿 | 欧美xxxx黑人又粗又长 | 亚洲自偷精品视频自拍 | 性色av无码免费一区二区三区 | 超碰97人人做人人爱少妇 | 玩弄中年熟妇正在播放 | 午夜无码人妻av大片色欲 | 欧美日本精品一区二区三区 | 男女性色大片免费网站 | 久久伊人色av天堂九九小黄鸭 | 图片区 小说区 区 亚洲五月 | 无码人妻出轨黑人中文字幕 | 国产美女极度色诱视频www | 亚洲爆乳精品无码一区二区三区 | 曰韩无码二三区中文字幕 | 激情爆乳一区二区三区 | 亚洲小说图区综合在线 | 欧美日韩一区二区免费视频 | 日本肉体xxxx裸交 | 国产亚洲日韩欧美另类第八页 | 无码午夜成人1000部免费视频 | 亚洲另类伦春色综合小说 | 精品人妻中文字幕有码在线 | 国产三级久久久精品麻豆三级 | 日本一卡2卡3卡四卡精品网站 | 色综合久久中文娱乐网 | 一本色道久久综合亚洲精品不卡 | 国产精品无码一区二区三区不卡 | 日本一卡2卡3卡四卡精品网站 | 亚洲国产欧美在线成人 | 国产精品va在线观看无码 | 国产亚洲人成在线播放 | 久久97精品久久久久久久不卡 | 国产亚洲精品久久久久久大师 | 日日摸日日碰夜夜爽av | 伊人色综合久久天天小片 | 国产精品igao视频网 | 亚洲日韩中文字幕在线播放 | 蜜桃臀无码内射一区二区三区 | 国产成人精品三级麻豆 | 久久精品国产亚洲精品 | 国产精品办公室沙发 | 久久视频在线观看精品 | 久久99精品久久久久久动态图 | 人人澡人人透人人爽 | 国产成人精品视频ⅴa片软件竹菊 | 人妻少妇精品视频专区 | 丰满人妻翻云覆雨呻吟视频 | 国产精品久久久久久无码 | 国产av无码专区亚洲a∨毛片 | 精品人人妻人人澡人人爽人人 | 六月丁香婷婷色狠狠久久 | 97夜夜澡人人双人人人喊 | 欧美人与牲动交xxxx | 理论片87福利理论电影 | 中文字幕av无码一区二区三区电影 | 亚洲精品国偷拍自产在线观看蜜桃 | 1000部夫妻午夜免费 | 少妇高潮一区二区三区99 | 欧美zoozzooz性欧美 | 亚洲国产一区二区三区在线观看 | 风流少妇按摩来高潮 | 国产精品二区一区二区aⅴ污介绍 | 人人妻人人澡人人爽人人精品浪潮 | 伊人久久大香线焦av综合影院 | 曰本女人与公拘交酡免费视频 | 伊人久久大香线蕉亚洲 | 国内精品人妻无码久久久影院蜜桃 |