posts - 17, comments - 1, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          用hibernate實現數據庫底層分頁

          Posted on 2006-11-02 20:43 HotJava 閱讀(701) 評論(0)  編輯  收藏

          1、創建SessionFactory,為了減輕服務器負擔,保證一個應用中僅生成一個SessionFactory即可.

          package ?dao;

          import ?org.hibernate.cfg. * ;
          import ?org.hibernate. * ;

          public ? class ?MySessionFactory? {
          ????
          private ? static ?Configuration?config = null ;
          ????
          private ? static ?SessionFactory?sf = null ;
          ????
          private ?MySessionFactory() {
          ????????config
          = new ?Configuration().configure();
          ????????sf
          = config.buildSessionFactory();
          ????}

          ????
          ????
          public ? static ?SessionFactory?getSessionFactory() {
          ????????
          if (sf == null ) {
          ????????????
          new ?MySessionFactory();
          ????????}

          ????????
          return ?sf;
          ????}

          ????
          }

          ?2、實現分頁過程
          方法getTotalPage()得到總頁數, getObject()將所查詢的數據封裝到list里!

          ?

          package ?dao;

          import ?java.util.List;

          import ?org.hibernate.Query;
          import ?org.hibernate.Session;
          import ?org.hibernate.SessionFactory;
          import ?org.hibernate.Transaction;

          public ? class ?pageList? {
          ????
          // ?分頁實現代碼:
          ????
          // ?得到總頁數?pagesize為一個頁面顯示的記錄數
          ???? public ? int ?getTotalPage(String?hql,? int ?pagesize)? {
          ????????SessionFactory?sf?
          = ?MySessionFactory.getSessionFactory();
          ????????Session?session?
          = ?sf.openSession();
          ????????Transaction?ts?
          = ?session.beginTransaction();
          ????????Query?query?
          = ?session.createQuery(hql);
          ????????List?list?
          = ?query.list();
          ????????
          int ?totalrs? = ?list.size();
          ????????
          int ?totalpage? = ? 0 ;
          ????????
          if ?(totalrs? % ?pagesize? > ? 0 )? {
          ????????????totalpage?
          = ?totalrs? / ?pagesize? + ? 1 ;
          ????????}
          ? else ? {
          ????????????totalpage?
          = ?totalrs? / ?pagesize;
          ????????}

          ????????ts.commit();
          ????????session.close();
          ????????
          return ?totalpage;
          ????}


          ????
          // ?分頁list
          ???? public ?List?getObject(String?hql,? int ?page,? int ?pagesize)? {
          ????????
          if ?(page? < ? 1 )page? = ? 1 ;
          ????????SessionFactory?sf?
          = ?MySessionFactory.getSessionFactory();
          ????????Session?session?
          = ?sf.openSession();
          ????????Transaction?ts?
          = ?session.beginTransaction();
          ????????Query?query?
          = ?session.createQuery(hql);
          ????????query.setFirstResult(page?
          * ?pagesize? - ?pagesize);
          ????????query.setMaxResults(pagesize);
          ????????List?list?
          = ?query.list();
          ????????ts.commit();
          ????????
          // ?session.close();
          ???????? return ?list;
          ????}


          ????
          // ?分頁代碼完
          }

          代碼中page為請求的頁面,pagesize為一個頁面顯示的記錄數。

          3、應用實例:

          ?

          <% @?page?language = " java " ?contentType = " text/html;?charset=GBK "
          ????pageEncoding
          = " GBK "
          %>
          <% @?page?import = " dao.*,po.*,java.util.* " %>
          <% @?taglib?uri = " http://jakarta.apache.org/struts/tags-bean "
          ????prefix
          = " bean "
          %>
          <% @?taglib?uri = " http://jakarta.apache.org/struts/tags-html "
          ????prefix
          = " html "
          %>
          <%
          ????
          String ?nowpage? = ?request.getParameter( " page " );
          //如果請求業面為空或第一次訪問時,頁面設為1
          ????
          if ?(nowpage? == ? null ?||?nowpage.equals( "" ))nowpage? = ? " 1 " ;
          //將nowpage轉為整型
          ????
          int ?mypage? = ? Integer .parseInt(nowpage);
          ????
          if ?(mypage? <= ? 0 )mypage? = ? 1 ;
          //頁面記錄數設為10
          ????
          int ?pagesize? = ? 10 ;
          ????
          String ?hql? = ? " from?ExamStudent " ;
          ????pageList?pl?
          = ? new ?pageList();
          ????
          int ?totalpage? = ?pl.getTotalPage(hql,?pagesize);
          //當請求頁面大于總頁數,則將當前請求頁面設為最大頁數
          ????
          if ?(mypage? > ?totalpage)mypage? = ?totalpage;
          ????ArrayList?list?
          = ?(ArrayList)?pl.getObject(hql,?mypage,pagesize);
          ????Iterator?it?
          = ?list.iterator();
          %>
          < html >
          < head >
          < title > JSP?for?AddStudentForm?form </ title >
          </ head >
          < body >
          < table? border ="1" >
          ????
          < tr >
          ????????
          < td > 學號 </ td >
          ????????
          < td > 姓名 </ td >
          ????????
          < td > 性別 </ td >
          ????????
          < td > 電話 </ td >
          ????????
          < td? colspan ="2" > 操作 </ td >
          ????
          </ tr >
          ????
          <%
          ????????????
          while ?(it.hasNext())?{
          ????????????ExamStudent?es?
          = ?(ExamStudent)?it.next();
          ????
          %>
          ????
          < tr >
          ????????
          < td > <% = es.getStudentClassid() %> </ td >
          ????????
          < td > <% = es.getStudentName() %> </ td >
          ????????
          < td > <% = es.getStudentSex() %> </ td >
          ????????
          < td > <% = es.getStudentTel() %> </ td >
          ????????
          < td >< a? href ="updateStudent.jsp?id=<%=es.getStudentId()%>" > 修改 </ a ></ td >
          ????????
          < td >< a? href ="/exam/deleteStudent?id=<%=es.getStudentId()%>" > 刪除 </ a ></ td >
          ????
          </ tr >
          ????
          <%
          ????????}
          ????????list.clear();
          ????
          %>
          ????
          < tr >
          ????????
          < td? colspan ="6" >< a? href ="addStudent.jsp?page=1" > 首頁 </ a > || < a
          ????????????
          href ="addStudent.jsp?page=<%=mypage-1%>" > 上一頁 </ a > || < a
          ????????????
          href ="addStudent.jsp?page=<%=mypage+1%>" > 下一頁 </ a > || < a
          ????????????
          href ="addStudent.jsp?page=<%=totalpage%>" > 末頁 </ a ></ td >
          ????
          </ tr >
          </ table >
          </ body >
          </ html >

          ?

          頁面中page ,nowpage,mypage均為當前請求頁面,只是數據類型不同。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 平果县| 沧源| 江油市| 晋城| 辛集市| 聂拉木县| 元谋县| 客服| 苏尼特左旗| 沂源县| 临汾市| 大洼县| 泰顺县| 苏尼特右旗| 长葛市| 淮北市| 双城市| 保亭| 保靖县| 沂水县| 赣州市| 晋城| 仁化县| 沧州市| 嘉黎县| 同江市| 定西市| 浏阳市| 宁明县| 石柱| 抚松县| 开平市| 波密县| 彰武县| 尼玛县| 冕宁县| 咸阳市| 新和县| 鄂伦春自治旗| 西盟| 新源县|