<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-42  評論-578  文章-1  trackbacks-0

            寫這個主題的文章在網絡上應該暫時沒有吧,也看過許多SSH整合開發的書,許多都是舊版本的框架整合,而且大部分都是以XML配置文件的方式,即使談到Annotation也是針對其中一個框架而言的。隨著開源框架更新版本中不斷引進對Annotation的支持,使得我們可以用單方面去管理我們的類與關系,而不用像以往那樣,一旦遇到問題,就要不斷在Java視圖和XML視圖中切換。好,開始吧,既然網絡中暫時沒有這方面的文章,我就來開創個先例。自己探索學習一下,也讓大家來學習和提出批評和建議。
            首選說一下我們的開發準備吧!
            開發環境:Tomcat 6.0,JDK1.6,MySQL5.0
            開發工具:Eclipse-jee(Eclipse的官網上下載)
            所要下載的框架包:struts-2.0.11.2-all.zipspring-framework-2.5.5-with-dependencies.ziphibernate-distribution-3.3.1.GA-dist.zip,這三個壓縮包在其官方網站都可以下載。當然,這個小項目所要用到不止這些,我們用到的時候再去下載。
            好,我們來開始第一階段的探索——Hibernate3.3的Annotation的實現。
            新建我們的Dynamic Web Project,取名為"ssh_annotation”,配置Tomcat6.0的支持,打開MySQL,建立一個空數據庫,取名為"ssh_annotation"。記得,要引進MySQL的JDBC驅動包mysql-connector-java-5.0.8-bin.jar
            在解壓縮的hibernate-distribution-3.3.1.GA目錄中,把hibernate.jar,和\lib\required\下的所用jar包引進到我們項目的lib目錄下。
            不知道用過Hibernate3.3開發的朋友會不會遇到過這樣的問題:把上面的包都準備好的,開發Hibernate測試類時,會報Caused by: java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 或者Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/LogManager的錯誤。這是因為Hibernate3.3提供的jar包,缺少了slf4j-log4j12.jar這個包。解決辦法是:在Hibernate的官方網站上下載hibernate-annotations-3.4.0.GA.zip,解壓縮,把其\lib\下的slf4j-log4j12.jar引進我們項目的lib目錄下。而我們引進這個jar包后,若我們沒有引進log4j.jar的話,就會報java.lang.NoClassDefFoundError: org/apache/log4j/LogManager的錯誤,可能是slf4j-log4j12.jar要用調用log4j的類吧。我們也引進log4j.jar即行。

            當然,hibernate-annotations-3.4.0.GA.zip 是我們開發Hibernate Annotation所要用到的,除以上面那些jar包外,我們還要引進其hibernate-annotations.jar,及其\lib\下的hibernate-commons-annotations.jarejb3-persistence.jar。好,暫時就這些,我們接下來需要用到哪些jar包時再引進。
            好,第一步,來開發我們的實體類User。代碼如下:
    package com.rong.entity;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.Table;

    @Entity
    @Table(name
    ="tb_user")
    public class User {
        
        @Id    @GeneratedValue(strategy
    =GenerationType.IDENTITY)
        
    private int id;
        
        @Column(name
    ="username", length=15)
        
    private String username;
        
        @Column(name
    ="password", length=15)
        
    private String password;
        
        
    public int getId() {
            
    return id;
        }

        
    public void setId(int id) {
            
    this.id = id;
        }

        
    public String getUsername() {
            
    return username;
        }

        
    public void setUsername(String username) {
            
    this.username = username;
        }

        
    public String getPassword() {
            
    return password;
        }

        
    public void setPassword(String password) {
            
    this.password = password;
        }


    }
            簡單解釋一下吧:
            @Entity定義User類為實體類,@Id定義該屬性對應的列為主鍵,@GeneratedValue(strategy=GenerationType.IDENTITY)定義主鍵生成策略為Indentity,適用于MySQL和MS SQL等數據庫。@Column(name="username", length=15)定義列名和取值長度。
            應該不難的,更多有關Hibernate的注解,請下載并參考我整理的Hibernate Annotation幫助文檔 /Files/rongxh7/hibernateAannotations.rar 。慢慢學吧!
            
            當然,必要的XML配置文件還是要有的:
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
    >

    <hibernate-configuration>

        
    <session-factory>

            
    <!-- Database connection settings -->
            
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            
    <property name="connection.url">jdbc:mysql://localhost:3306/ssh_annotation</property>
            
    <property name="connection.username">root</property>
            
    <property name="connection.password">root</property>

            
    <!-- 數據庫言 -->
            
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
            
            
    <!-- 將Session扔到線程里去處理 -->
            
    <property name="current_session_context_class">thread</property>

            
    <!-- 在控制臺打印SQL語句 -->
            
    <property name="show_sql">true</property>

            
    <!-- 自動把實體類與屬性映射成數據庫中的表與列 -->
            
    <property name="hbm2ddl.auto">update</property>
             
            
    <!--  
            <mapping resource="com/rong/entity/User.hbm.xml"/>
             
    -->
             
             
    <!-- 在Hibernate中注冊User實體類,區別于上面注釋掉的resource寫法 -->
             
    <mapping class="com.rong.entity.User"/>

        
    </session-factory>

    </hibernate-configuration>

            到這里,我們可以運行Tomcat,Hibernate會根據hbm2ddl.auto自動地把實體類與屬性轉變成數據庫中的表與列。但這一步,要事先在數據庫中建立一個名為"ssh_annotation"的空數據庫。好了,看一下,你的數據庫中是否有"tb_user"的表生成了?!
            接下來,我們來開發一個包裝器類,取名HibernateUtil,代碼如下:
    package test.rong.hibernate;

    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;

    public class HibernateUtil {
        
        
    private static final SessionFactory sessionFactory;

        
    static {
            
    try {
                
    //用xxx.hbm.xml形式配置實體映射
                
    //sessionFactory = new Configuration().configure().buildSessionFactory();
                
    //用Annotation形式配置實體映射
                sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
            }
     catch (Throwable ex) {
                System.err.println(
    "Initial SessionFactory creation failed." + ex);
                
    throw new ExceptionInInitializerError(ex);
            }

        }


        
    public static SessionFactory getSessionFactory() {
            
    return sessionFactory;
        }


    }

            學過Hibernate的朋友們,應該對這個類不陌生吧。在此,我就不多解釋啦,注意一下我注釋的地方就行。下面,我們來進行測試,下載最新版本的Junit4.5.jar,試一下感覺如何。當然,舊版本的應該也沒問題的啦!寫測試代碼如下:    

    package test.rong.hibernate;

    import java.util.Iterator;
    import java.util.List;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.junit.Before;
    import org.junit.Test;
    import com.rong.entity.User;

    public class EntityTest {
        
        
    private Session session;
        
        @Before
        
    public void initSession(){
            
    this.session = HibernateUtil.getSessionFactory().getCurrentSession();
        }

        
        @Test    
    //測試添加用戶
        public void testSave(){
            session.beginTransaction();
            User user 
    = new User();
            user.setUsername(
    "rongxh7");
            user.setPassword(
    "blogjava");
            session.save(user);
            session.getTransaction().commit();
        }

        
        @Test    
    //測試查詢用戶列表
        @SuppressWarnings("unchecked")
        
    public void testQuery(){
            session.beginTransaction();
            Query query 
    = session.createQuery("from User u");
            List
    <User> users = query.list();
            
    for(Iterator<User> it = users.iterator() ; it.hasNext() ; ){
                User user 
    = it.next();
                System.out.println(
    "username = " + user.getUsername());
            }

            session.beginTransaction().commit();
        }

        
        @Test    
    //測試查詢單個用戶
        public void testGet(){
            session.beginTransaction();
            User user 
    = (User)session.get(User.class1);
            System.out.println(
    "username = " + user.getUsername());
            session.getTransaction().commit();
        }

        
        @Test    
    //測試查詢修改用戶
        public void testUpdate(){
            session.beginTransaction();
            User user 
    = (User)session.load(User.class1);
            user.setPassword(
    "hello blogjava");
            session.update(user);
            session.getTransaction().commit();
        }

        
        @Test    
    //測試刪除用戶
        public void testDelete(){
            session.beginTransaction();
            session.delete(session.load(User.
    class1));
            session.getTransaction().commit();
        }


    }

            
            到此,我們的Hibernate Annotation開發完成了。你成功了沒?如果有什么問題,請回復,我盡力為你解答!好,第一階段暫告一段落。不要忘記,我們是要做的是基于Annotatioln的SSH整合開發,讓我們一起期待下一階段吧!
            (*^-^*) 本文原創,轉載請注明出處, http://www.tkk7.com/rongxh7謝謝! (*^-^*)


    本文原創,轉載請注明出處,謝謝!http://www.tkk7.com/rongxh7(心夢帆影JavaEE技術博客)
        

    posted on 2009-03-23 21:05 心夢帆影 閱讀(15660) 評論(38)  編輯  收藏 所屬分類: Struts2.xHibernateSpring

    評論:
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-23 21:40 | 何奇山
    沙發。。寫的很好!!!  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-23 21:42 | Java Programmer
    這個東西實在是太簡單了,網上到處都是,所謂的annotation與xml也并沒有理念、本質上的區別,還是來點項目實戰內容吧,你說的這些東西項目中完全用不上  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-23 21:57 | wexl
    想知道原來 Spring中配置的DAO 注入的sessionFactory,怎么用在使用annotation時注入。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-23 22:17 | wexl
    @wexl
    搞明白了,使用SimpleHibernateTemplate  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2009-03-23 22:20 | haha
    好 期待下集  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-23 23:07 | 28商機網
    建議樓主你去看下 SpringSide 參考下它的模式  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-23 23:49 | ,,らSummer
    樓主寫得很精彩,期待看到你更多的好文。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-24 08:23 | Kevin.Chiu
    為什么不用struts2.1.6??  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-24 12:08 | 道長A@ajava.org
    一直以來,我就不喜歡Annotation,它只不過是掛著羊皮賣狗肉而已,比狗肉還不好。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-24 12:09 | 道長A@ajava.org
    不過,還是很期待后續文章。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-24 20:55 | duduli
    之前就聽過hibernate的Annotation很方便。
    可能還沒適應這樣的方式,
    期待后續。。。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-28 16:19 | 杯中水
    你不覺得上面的代碼有些問題嗎?
    qq:418805369  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-03-28 18:13 | kidd
    為什么得用openSession才可以通過測試  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2009-05-21 00:07 | Alan
    錯誤信息:

    SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
    Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder


    大哥指導下!
      回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-05-29 11:06 | None
    @Alan
    少slf4j-log4j12.jar包  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-05-29 11:07 | None
    @杯中水
    有啥問題啊~~說說撒   回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-05-30 19:45 | None
    注解方式jdk版本至少1.6  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2009-05-31 21:44 | hone
    Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2009-06-05 11:38 | soon
    為什么不寫一下它們如何整合?  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2009-08-24 14:01 | xiaoqiang
    我的報java.lang.NoClassDefFoundError: org/hibernate/event/PostCollectionRecreateEventListener 實在不知道是啥原因  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-01-05 13:55 | tencher
    一個空的工程按照你說的做,
    把hibernate.cfg.xml文件做成后放到src下,
    編譯后,啟動tomcat
    什么也沒有自動生成,
    請指教。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-01-22 15:58 | Apache's___Tomcat
    web.xml要做什么配置嗎,我運行之后根本未對數據庫作什么動作  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-01-24 14:57 | rongxh7
    @Apache's___Tomcat
    在web.xml中配置spring,而在spring的配置文件中配置Hibernate,具體的配置內容,你參考一下網上的文章,我現在不在自己電腦上,暫不能把代碼貼出來,請見諒!  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-01-24 14:59 | rongxh7
    @tencher
    你還應該在Spring的配置文件中配置上hibernate,在web.xml中配置上spring,當服務器運行時,會從spring容器識別出hibernate。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-01-27 20:12 | laihais
    好像不是很行,樓主可以發份源碼來嗎?謝謝。Mail:461455263@qq.com  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-02-02 09:06 | jack-xia
    樓主能發一份源碼我好嗎?想深入參考一下!!謝謝了~~~
    Mail:xxf880324@163.com
    萬分感謝,你為我們新手做的一切!!!  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2010-03-11 16:48 | flying
    寫的相當的不錯   回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-03-14 22:29 | samir
    樓主費心了,寫的真不錯,謝謝分享~~  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2010-03-20 22:09 | tianya
    樓主,也給我一份源碼吧!謝謝tianya0506102@163.com  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-06-04 10:28 | Mac Hotesion
    樓主寫的不錯,辛苦了。
    我遇到了下面兩個問題:
    1. 樓主實體類User用的javax.persistence.Entity;.....是哪一個包的?
    我目前用的是:ejb3-persistence.jar,看了你的文章一直沒有提到ejb3-persistence.jar,難道你用的是另外一個包嗎?
    我的不用這個包會報錯。

    2. 你的Action中用的javax.annotation.Resource用的是哪一個包的?是不是javaee.jar包?①如果是的話,就和ejb3-persistence.jar包發生了沖突,這兩個包中都有javax.persistence.Entity;........②如果不是的話,你用的是哪個包?

    3. 是否也給我一份源碼吧!謝謝 houtingsong163@163.com   回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-08-02 17:15 | tt
    我查詢 有異常 怎么回事額
    java.lang.reflect.UndeclaredThrowableException
    at $Proxy10.createQuery(Unknown Source)
    at test.rong.hibernate.EntityTest.testQuery(EntityTest.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
    Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342)
    ... 24 more
    Caused by: java.lang.NoClassDefFoundError: antlr/ANTLRException
    at org.hibernate.hql.ast.ASTQueryTranslatorFactory.createQueryTranslator(ASTQueryTranslatorFactory.java:58)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:98)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
    ... 29 more

      回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-08-02 17:17 | tt
    oh 好了。少了個jar包 antlr/ANTLRException  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2010-09-07 17:17 | sunlongfei_001@126.com
    寫的很好,建議大家慢慢的仿照例題運行。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2011-02-11 15:40 | zheyiw
    照著做的報錯:
    java.lang.NoClassDefFoundError: org/hibernate/loader/custom/SQLQueryReturn  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2011-02-25 11:51 | neal
    今天閑來無事弄里一下,不過是oracle下,直接啟動tomcat 沒有生成tb_user,而是運行測試類時生成的  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2011-08-18 16:58 | Mara
    版本問題很多啊,剛開始用的是hibernate3.6,出現不少問題,hibernate_cfg.xml配置文件不對,找不到Entity,提示少類。后來下了3.31才通過。。。。  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1) 2011-10-30 17:41 | dmcpxy
    沒有提到 Spring的啊?  回復  更多評論
      
    # re: 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合開發 (1)[未登錄] 2012-09-14 11:38 | silver
    你只是很簡單的講了 hibernate annotations 和 struts, spring 毫無瓜葛  回復  更多評論
      
    主站蜘蛛池模板: 大地资源中文在线观看免费版| 西西人体44rt高清亚洲| 日本一区二区三区在线视频观看免费| 天天摸天天碰成人免费视频| 亚洲中文无码亚洲人成影院| 色妞WWW精品免费视频| 最新亚洲春色Av无码专区| 999在线视频精品免费播放观看| 亚洲冬月枫中文字幕在线看| 日本免费网址大全在线观看| 激情内射亚洲一区二区三区爱妻 | 夭天干天天做天天免费看| 亚洲一区二区三区在线观看网站 | 亚洲一区二区三区免费视频| 久久久高清免费视频 | 成在人线av无码免费高潮喷水| 亚洲欧洲精品无码AV| 中文无码成人免费视频在线观看| 久久亚洲国产成人亚| 100部毛片免费全部播放完整| 亚洲午夜精品一区二区公牛电影院 | 2022国内精品免费福利视频| 亚洲欧洲精品无码AV| 无码精品人妻一区二区三区免费看 | 亚洲va中文字幕| 亚洲 另类 无码 在线| 亚洲日韩在线观看免费视频| 亚洲国产精品一区第二页| 在线观看免费av网站| 中文字幕乱码亚洲无线三区 | 亚欧免费视频一区二区三区| 中文字幕亚洲综合小综合在线 | 亚洲三级视频在线观看| 午夜毛片不卡高清免费| 全部在线播放免费毛片| 亚洲日韩精品A∨片无码| 最近免费中文在线视频| 亚洲无码一区二区三区| 亚洲第一区精品观看| 中文字幕免费不卡二区| 亚洲一区二区三区久久久久|