Posted on 2006-11-02 20:43
HotJava 閱讀(697)
評論(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均為當前請求頁面,只是數據類型不同。