隨筆-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.aygfsteel.com/rongxh7謝謝! (*^-^*)


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

          posted on 2009-03-23 21:05 心夢帆影 閱讀(15663) 評論(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 毫無瓜葛  回復  更多評論
            
          主站蜘蛛池模板: 开江县| 随州市| 宿迁市| 扶沟县| 乐亭县| 宁河县| 临江市| 宝应县| 五华县| 泽普县| 高尔夫| 台东市| 宁乡县| 云和县| 河间市| 化德县| 商都县| 贵定县| 屏南县| 长顺县| 南京市| 大方县| 龙海市| 前郭尔| 泗洪县| 峡江县| 镇沅| 兰西县| 广元市| 乐东| 绥宁县| 名山县| 丰顺县| 四会市| 体育| 锡林郭勒盟| 攀枝花市| 南充市| 九寨沟县| 双峰县| 金溪县|