blogjava's web log

          blogjava's web log
          ...

          偷窺struts+hibernate分頁(第一種方法)

          根據原文有點改動。原文忘記在那里看到了。看到提個醒


          新建表

          DROP?DATABASE?IF?EXISTS?`wjcms`;
          CREATE?DATABASE?`wjcms`?/*!40100?DEFAULT?CHARACTER?SET?gb2312?*/;
          USE?`wjcms`;

          #
          #?
          Table?structure?for?table?t_article
          #

          CREATE?TABLE?`t_article`?(
          ??`a_id`?
          int(11)?NOT?NULL?auto_increment,
          ??`a_sort`?
          int(11)?NOT?NULL?default?'0',
          ??`a_title`?
          varchar(50)?default?NULL,
          ??`a_body`?
          text,
          ??`a_author`?
          varchar(11)?default?'',
          ??`a_hit`?
          int(11)?NOT?NULL?default?'0',
          ??`c_id`?
          int(11)?default?'0',
          ??`a_date`?
          varchar(20)?default?NULL,
          ??
          PRIMARY?KEY??(`a_id`)
          )?

          實體

          public class articleVO {
          ??? private int a_id;
          ??? private int a_sort;
          ??? private int a_hit;
          ??? private int c_id;
          ??? private String a_title;
          ??? private String a_body;
          ??? private String a_author;
          ??? private String a_date;
          ??? // getter setter


          新建page.java

          package?page.dal;

          public?class?page?{
          ????
          private?int?totalRows;?//總行數
          ????private?int?pageSize?=?10;?//每頁顯示的行數
          ????private?int?currentPage;?//當前頁號
          ????private?int?totalPages;?//總頁數
          ????private?int?startRow;?//當前頁在數據庫中的起始行

          ????
          public?page(int?_totalRows)?{
          ?????totalRows?
          =?_totalRows;
          ?????totalPages
          =totalRows/pageSize;
          ?????
          int?mod=totalRows%pageSize;
          ?????
          if(mod>0){
          ???????totalPages
          ++;
          ?????}
          ?????currentPage?
          =?1;
          ?????startRow?
          =?0;
          ???}

          ???
          public?int?getStartRow()?{
          ?????
          return?startRow;
          ???}

          ???
          public?int?getTotalPages()?{
          ?????
          return?totalPages;
          ???}

          ???
          public?int?getCurrentPage()?{
          ?????
          return?currentPage;
          ???}

          ???
          public?int?getPageSize()?{
          ?????
          return?pageSize;
          ???}

          ???
          public?void?setTotalRows(int?totalRows)?{
          ?????
          this.totalRows?=?totalRows;
          ???}

          ???
          public?void?setStartRow(int?startRow)?{
          ?????
          this.startRow?=?startRow;
          ???}

          ???
          public?void?setTotalPages(int?totalPages)?{
          ?????
          this.totalPages?=?totalPages;
          ???}

          ???
          public?void?setCurrentPage(int?currentPage)?{
          ?????
          this.currentPage?=?currentPage;
          ???}

          ???
          public?void?setPageSize(int?pageSize)?{
          ?????
          this.pageSize?=?pageSize;
          ???}

          ???
          public?int?getTotalRows()?{
          ?????
          return?totalRows;
          ???}

          ???
          public?void?first()?{
          ?????currentPage?
          =?1;
          ?????startRow?
          =?0;
          ???}

          ???
          public?void?previous()?{
          ?????
          if?(currentPage?==?1)?{
          ???????
          return;
          ?????}
          ?????currentPage
          --;
          ?????startRow?
          =?(currentPage?-?1)?*?pageSize;
          ???}

          ???
          public?void?next()?{
          ?????
          if?(currentPage?<?totalPages)?{
          ???????currentPage
          ++;
          ?????}
          ?????startRow?
          =?(currentPage?-?1)?*?pageSize;
          ???}

          ???
          public?void?last()?{
          ?????currentPage?
          =?totalPages;
          ?????startRow?
          =?(currentPage?-?1)?*?pageSize;
          ???}

          ???
          public?void?refresh(int?_currentPage)?{
          ?????currentPage?
          =?_currentPage;
          ?????
          if?(currentPage?>?totalPages)?{
          ???????last();
          ?????}
          ???}

          ?}



          新建 pageHelp.java

          package?page.dal;
          import?javax.servlet.http.*;

          public?class?PagerHelp?{
          ????
          public?static?page?getPager(HttpServletRequest?httpServletRequest,int?totalRows)?{

          ?????
          //定義pager對象,用于傳到頁面
          ?????page?pager?=?new?page(totalRows);

          ?????
          //從Request對象中獲取當前頁號
          ?????String?currentPage?=?httpServletRequest.getParameter("currentPage");

          ?????
          //如果當前頁號為空,表示為首次查詢該頁
          ?????
          //如果不為空,則刷新page對象,輸入當前頁號等信息
          ?????if?(currentPage?!=?null)?{
          ???????pager.refresh(Integer.parseInt(currentPage));
          ?????}

          ?????
          //獲取當前執行的方法,首頁,前一頁,后一頁,尾頁。
          ?????String?pagerMethod?=?httpServletRequest.getParameter("pageMethod");

          ?????
          if?(pagerMethod?!=?null)?{
          ???????
          if?(pagerMethod.equals("first"))?{
          ?????????pager.first();
          ???????}?
          else?if?(pagerMethod.equals("previous"))?{
          ?????????pager.previous();
          ???????}?
          else?if?(pagerMethod.equals("next"))?{
          ?????????pager.next();
          ???????}?
          else?if?(pagerMethod.equals("last"))?{
          ?????????pager.last();
          ???????}
          ?????}
          ?????
          return?pager;
          ???}

          }



          新建 util.java
          package?page.dal;
          import?net.sf.hibernate.Query;
          import?net.sf.hibernate.cfg.Configuration;
          import?java.util.List;
          import?net.sf.hibernate.HibernateException;
          import?net.sf.hibernate.SessionFactory;
          import?net.sf.hibernate.Session;
          import?java.util.*;
          public?class?util?{
          ????
          public?util()?{
          ????}
          ?????
          private?Session?ss=null;
          ????
          public?Session?getSession()
          ??{
          ??????
          //??Configuration?config=null;
          ??????SessionFactory?sessionFactory;
          ??????
          try?{
          ??????????Configuration?cfg?
          =?new?Configuration();
          ??????????sessionFactory?
          =?cfg.addClass(articleVO.class).
          ???????????????????????????buildSessionFactory();
          ??????????
          //?SessionFactory?sessionFactory=config.buildSessionFactory();
          ??????????ss?=?sessionFactory.openSession();
          ??????????
          return?ss;
          ??????}?
          catch?(HibernateException?ex)?{
          ??????????System.out.print(
          "getsession出錯了。。"?+?ex.getMessage());
          ??????????
          return?null;
          ??????}
          ??}

          ??
          public?int?getCount()
          ??{
          ??????String?sql
          ="select?count(*)?from?articleVO"?;
          ??????
          this.getSession();

          ????
          try?{
          ?????
          //?ss.createQuery("select?count(a)as?cont?from?articleVO?a?");
          ??????int?rows=?((Integer)?ss.iterate(sql).next()).intValue();
          ??????ss.flush();
          ??????
          return?rows;

          ????}?
          catch?(HibernateException?ex)?{
          ????????System.out.print(
          "ex::"+ex.getMessage());
          ????????
          return?0;
          ????}


          ??}

          ??
          public?Collection??getList(int?pagesize,int?currow)?throws?HibernateException?{
          ??????Collection?vehicleList?
          =?null;
          ??????
          this.getSession();
          ??????Query?q
          =ss.createQuery("from?articleVO");
          ??????q.setFirstResult(currow);
          ??????q.setMaxResults(pagesize);
          ??????vehicleList
          =q.list();
          ??????ss.flush();
          ??????
          return?vehicleList;
          ??}

          }


          新建 struts? PageAction.java


          package?page.dal;

          import?org.apache.struts.action.ActionMapping;
          import?org.apache.struts.action.ActionForm;
          import?javax.servlet.http.HttpServletRequest;
          import?javax.servlet.http.HttpServletResponse;
          import?org.apache.struts.action.ActionForward;
          import?org.apache.struts.action.Action;
          import?page.dal.*;
          import?java.util.*;
          import?net.sf.hibernate.*;

          public?class?pageAction?extends?Action?{
          ????
          public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,
          ?????????????????????????????????HttpServletRequest?request,
          ?????????????????????????????????HttpServletResponse?response)?{
          ????????Collection?clInfos?
          =?null;//用于輸出到頁面的記錄集合
          ????????int?totalRows;//記錄總行數
          ????????util?dal=new?util();
          ????????totalRows
          =dal.getCount();
          ????????System.out.print(
          "總行數=="+totalRows);
          ????????page?p
          =PagerHelp.getPager(request,totalRows);
          ????????
          try?{
          ????????????clInfos?
          =?dal.getList(p.getPageSize(),?p.getStartRow());

          ????????}?
          catch?(HibernateException?ex)?{
          ????????????System.out.print(
          "action里的錯誤="+ex.getMessage());
          ????????}
          ????????request.setAttribute(
          "page",p);
          ????????request.setAttribute(
          "list",clInfos);
          ????????
          return?mapping.findForward("page");
          ????????
          //pageForm?pageForm?=?(pageForm)?form;
          ??????
          //??throw?new?java.lang.UnsupportedOperationException(
          ??????????????
          //??"Method?$execute()?not?yet?implemented.");
          ????}
          }


          前臺頁面

          <%@?taglib?uri="/WEB-INF/struts-tiles.tld"?prefix="tiles"?%>
          <%@?taglib?uri="/WEB-INF/struts-nested.tld"?prefix="nested"?%>
          <%@?taglib?uri="/WEB-INF/struts-logic.tld"?prefix="logic"?%>
          <%@?taglib?uri="/WEB-INF/struts-bean.tld"?prefix="bean"?%>
          <%@?taglib?uri="/WEB-INF/struts-html.tld"?prefix="html"?%>
          <%@?page?contentType="text/html;?charset=GBK"?%>
          <html:html>
          <head>
          <title>
          page
          </title>
          </head>
          <body>
          <table?align="center"?border="2">
          <tr>
          <th>a_title</th>
          <th>a_body</th>
          <th>a_a_date</th>
          <th>a_author</th>
          </tr>

          <logic:iterate?id="listd"?name="list">
          <tr>
          <td>
          <bean:write?name="listd"?property="a_title"/>
          </td>
          <td>
          <bean:write?name="listd"?property="a_author"/>
          </td>
          <td>
          <bean:write?name="listd"?property="a_date"/>
          </td>
          <td>
          <bean:write?name="listd"?property="a_date"/>
          </td>
          </tr>
          </logic:iterate>

          </table>

          <bean:write?name="page"?property="currentPage"/>
          <bean:write?name="page"?property="totalPages"?/>
          <html:link?action="/pageAction.do?pageMethod=first"
          paramName
          ="page"?paramProperty="currentPage"?paramId="currentPage">首頁</html:link>
          ???
          <html:link?action="/pageAction.do?pageMethod=previous"
          paramName
          ="page"?paramProperty="currentPage"?paramId="currentPage">上一頁</html:link>
          ???
          <html:link?action="/pageAction.do?pageMethod=next"
          paramName
          ="page"?paramProperty="currentPage"?paramId="currentPage">下一頁</html:link>

          ???
          <html:link?action="/pageAction.do?pageMethod=last"
          paramName
          ="page"?paramProperty="currentPage"?paramId="currentPage">尾頁</html:link>
          </body>
          </html:html>



          啟動瀏覽 pageAction.do? 運行OK。



          ****************************************************************************************


          配置文件


          <?xml?version="1.0"?encoding="UTF-8"?>

          <!DOCTYPE?hibernate-mapping?PUBLIC
          ????"-//Hibernate/Hibernate?Mapping?DTD?2.0//EN"
          ????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
          >
          <hibernate-mapping>

          ????
          <class?name="page.dal.articleVO"?table="t_article"?>


          ????
          <id?name="a_id"?column="a_id"?unsaved-value="0"?>
          ??????
          <generator?class="native"/>
          ?
          </id>
          ?????
          <property?name="c_id"????column="c_id"/>
          ?????
          <property?name="a_title"?column="a_title"/>
          ?????
          <property?name="a_sort"??column="a_sort"/>
          ?????
          <property?name="a_date"??column="a_date"/>
          ?????
          <property?name="a_body"??column="a_body"/>
          ?????
          <property?name="a_hit"???column="a_hit"/>
          ?????
          <property?name="a_author"?column="a_author"/>
          ???
          ????
          ??
          </class>

          </hibernate-mapping>

          hibernate.dialect?net.sf.hibernate.dialect.MySQLDialect
          hibernate.connection.driver_class?org.gjt.mm.mysql.Driver
          hibernate.connection.url?jdbc:mysql://localhost:
          3306/wjcms
          hibernate.connection.username?root
          hibernate.connection.password?
          hibernate.connection.pool_size?
          1
          hibernate.proxool.pool_alias?pool1
          hibernate.show_sql?true
          hibernate.max_fetch_depth?
          1
          hibernate.cache.use_query_cache?true



          posted on 2006-08-29 11:38 record java and net 閱讀(16740) 評論(18)  編輯  收藏 所屬分類: javaSpring

          評論

          # re: 偷窺struts+hibernate分頁(第一種方法)[未登錄] 2007-06-21 22:06 cc

          呵呵 弄了2天 終于結合到了 我的程序里了 非常的感謝你!!!

          順便問一下 你的page是actionForm嗎 我對你的page的數據封裝(取值,賦值)不是很明白 你能不能給我講一講 謝謝你

          我是名新手 希望您能給我解惑!!

          QQ:531672250  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2007-08-17 22:56 書亭

          感謝分享  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-02-13 17:26 nicelife

          安裝你的實例一步步做了一遍練習,
          測試結果,100萬條以內的記錄5秒內能查詢出來,500萬條以內10秒,有點慢,如果換成小型機或服務器能提高很多,不知道是否正常,能夠改進提高速度。  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-02-13 17:27 nicelife

          -- Test PC Environment
          winxp, Oracle 9.2.0.1.0, j2sdk 1.5.0_11, Tomcat5.0, Eclipse 3.2, PL/SQL Developer 7.0, Struts 1.2.9, Hibernate 3.2.2  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-02-27 10:47 weber

          好像URL中的currentPage和頁面中的第?頁顯示不一致,要顯示一致如何做到?  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-03-10 15:03 wenlong342

          多謝摟主了,很好的程序.  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-03-13 13:46 hyc

          不太實用....  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-03-27 13:13 COOL

          寫得還行,挺不錯,  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-05-15 20:12 jiangdong

          樓主可不可以把可以直接運行源文件發一份給我,這上面有錯誤,不勝感激!
          郵箱:
          jiangdongsx@gmail.com  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-06-18 11:09 fy_iceworld

          您好。請問在這句中 int rows= ((Integer) ss.iterate(sql).next()).intValue();

          ss.iterate這個方法為什么eclipse提示找不到??
            回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2008-10-14 16:05 asdf

          很不錯哦...  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 關于這個entire的一些具體問題 2009-04-17 21:49 ss

          假如,我要分頁的內容不是整張表,而是一個有Where條件的集合,該怎么改?  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2009-05-18 00:48 angely

          不知道為什么,我currentPage一直獲取到的都是空置!

          //從Request對象中獲取當前頁號
          String currentPage = httpServletRequest.getParameter("currentPage");  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2009-06-12 16:29 hsj

          分頁最郁悶就是又要分頁,又要知道總記錄數.樓主辦法有兩個問題:
          1.用兩次查詢來分別獲得總記錄數和記錄集.數據量大的話相當慢.
          2.得到記錄總數的方法(count(*))用的范圍不廣,如果我的SQL里有goup by , order by 怎么辦?  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2009-10-25 19:46 struts1.x

          暈,struts1.x呀,也不注明,看完才明白。  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2010-06-23 20:50

          查詢的時候想加個查詢條件 ,就是typeid 點下一頁的時候就獲取不到了 .怎么解決  回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法)[未登錄] 2011-01-06 14:28

          樓主看了你的代碼 感覺很好  但是我拿下來運行 都是有錯  你能不能把你的原代碼(所以的)都發給我郵箱里一下 謝謝了414832466@qq.com   回復  更多評論   

          # re: 偷窺struts+hibernate分頁(第一種方法) 2012-02-20 11:26 walkingdog

          代碼很亂  回復  更多評論   

          導航

          常用鏈接

          留言簿(44)

          新聞檔案

          2.動態語言

          3.工具箱

          9.文檔教程

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 隆昌县| 蛟河市| 余庆县| 无棣县| 武夷山市| 常宁市| 通河县| 永清县| 房产| 廊坊市| 葵青区| 崇仁县| 永兴县| 海盐县| 化隆| 和平县| 旌德县| 宁化县| 靖州| 凯里市| 策勒县| 永定县| 隆安县| 磴口县| 长沙县| 班玛县| 崇明县| 年辖:市辖区| 鄂伦春自治旗| 垣曲县| 林口县| 阳曲县| 龙井市| 永和县| 邢台县| 镇雄县| 乃东县| 余干县| 浑源县| 横山县| 商水县|