日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Hibernate+Spring+Struts2整合開發(fā)中的一個分頁

系統(tǒng) 2214 0

Hibernate+Spring+Struts2整合開發(fā)中的一個分頁顯示方案

(2011-12-14 14:09:08)

分頁顯示一直是web開發(fā)中一大煩瑣的難題,傳統(tǒng)的網頁設計只在一個JSP或者ASP頁面中書寫所有關于數(shù)據(jù)庫操作的代碼,那樣做分頁可能簡單一點,但當把網站分層開發(fā)后,分頁就比較困難了,下面是我做Spring+Hibernate+Struts2項目時設計的分頁代碼,與大家分享交流。
1、DAO層接口的設計,在MemberDao接口中定義了如下兩個方法:

public interface MemberDao {

// 省略了其他的代碼


public List queryForPage( final String hql, final int offset, final int length);


public int getAllRowCount(String hql);

}

2、DAO層實現(xiàn)類MemberDaoImpl對上面兩個方法的實現(xiàn)如下:

public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
// 省略了其他的代碼


public List queryForPage( final String hql, final int offset, final int length) {
List list
= getHibernateTemplate().executeFind( new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,SQLException {
Query query
= session.createQuery(hql);
query.setFirstResult(offset);
query.setMaxResults(length);
List list
= query.list();
return list;
}

}
);
return list;
}




public int getAllRowCount(String hql) {
return getHibernateTemplate().find(hql).size();
}


}

細心的讀者會發(fā)現(xiàn),這個類繼承了HibernateDaoSupport類,HibernateDaoSupport是Spring提供的對Hibernate支持的類,getHibernateTemplate().executeFind(new HibernateCallback(){....})方法中的參數(shù),我們使用了接口回調,在其參數(shù)內,我們能像原生的Hibernate一樣調用query.setFirstResult(offset)和query.setMaxResults(length)來實現(xiàn)分頁查詢功能。

3、下面我們來新建一個保存分頁信息的類PageBean,具體代碼如下:

public class PageBean {

private List list; // 要返回的某一頁的記錄列表

private int allRow; // 總記錄數(shù)
private int totalPage; // 總頁數(shù)
private int currentPage; // 當前頁
private int pageSize; // 每頁記錄數(shù)

private boolean isFirstPage; // 是否為第一頁
private boolean isLastPage; // 是否為最后一頁
private boolean hasPreviousPage; // 是否有前一頁
private boolean hasNextPage; // 是否有下一頁


public List getList() {
return list;
}

public void setList(List list) {
this .list = list;
}

public int getAllRow() {
return allRow;
}

public void setAllRow( int allRow) {
this .allRow = allRow;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage( int totalPage) {
this .totalPage = totalPage;
}

public int getCurrentPage() {
return currentPage;
}

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

public int getPageSize() {
return pageSize;
}

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



public void init() {
this .isFirstPage = isFirstPage();
this .isLastPage = isLastPage();
this .hasPreviousPage = isHasPreviousPage();
this .hasNextPage = isHasNextPage();
}




public boolean isFirstPage() {
return currentPage == 1 ; // 如是當前頁是第1頁
}

public boolean isLastPage() {
return currentPage == totalPage; // 如果當前頁是最后一頁
}

public boolean isHasPreviousPage() {
return currentPage != 1 ; // 只要當前頁不是第1頁
}

public boolean isHasNextPage() {
return currentPage != totalPage; // 只要當前頁不是最后1頁
}




public static int countTotalPage( final int pageSize, final int allRow) {
int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1 ;
return totalPage;
}



public static int countOffset( final int pageSize, final int currentPage) {
final int offset = pageSize * (currentPage - 1 );
return offset;
}



public static int countCurrentPage( int page) {
final int curPage = (page == 0 ? 1 :page);
return curPage;
}

}


4、Service層接口的設計:

public interface MemberService {
// 省略其他的代碼


public PageBean queryForPage( int pageSize, int currentPage);

}


5、Service層實現(xiàn)類的部分內碼如下:

public class MemberServiceImpl implements MemberService {

// 通過applicationContext.xml配置文件注入MemberDao的值
private MemberDao memberDao;
public void setMemberDao(MemberDao memberDao) {
this .memberDao = memberDao;
}



public PageBean queryForPage( int pageSize, int page) {

final String hql = " from Member " ; // 查詢語句
int allRow = memberDao.getAllRowCount(hql); // 總記錄數(shù)
int totalPage = PageBean.countTotalPage(pageSize, allRow); // 總頁數(shù)
final int offset = PageBean.countOffset(pageSize, page); // 當前頁開始記錄
final int length = pageSize; // 每頁記錄數(shù)
final int currentPage = PageBean.countCurrentPage(page);
List
< Member > list = memberDao.queryForPage(hql,offset, length); // "一頁"的記錄

// 把分頁信息保存到Bean中
PageBean pageBean = new PageBean();
pageBean.setPageSize(pageSize);
pageBean.setCurrentPage(currentPage);
pageBean.setAllRow(allRow);
pageBean.setTotalPage(totalPage);
pageBean.setList(list);
pageBean.init();
return pageBean;
}


6、在Struts2中調用queryForPageMemberServic<wbr>e層的queryForPage()方法即可return一個包含分頁信息、符合條件的結果集list, 代碼如下:</wbr>

public class ListMember extends ActionSupport {
// 通過applicationContext.xml配置文件注入memberService的值
private MemberService memberService;
public void setMemberService(MemberService memberService) {
this .memberService = memberService;
}


private int page; // 第幾頁

private PageBean pageBean; // 包含分布信息的bean

public int getPage() {
return page;
}


public void setPage( int page) { // 若URL中無此參數(shù),會默認為第1頁
this .page = page;
}


public PageBean getPageBean() {
return pageBean;
}


public void setPageBean(PageBean pageBean) {
this .pageBean = pageBean;
}


@Override
public String execute() throws Exception {
// 分頁的pageBean,參數(shù)pageSize表示每頁顯示記錄數(shù),page為當前頁
this .pageBean = memberService.queryForPage( 2 , page);
return SUCCESS;
}

}


7、最后在listMember.jsp頁面中,用到了Struts2標簽:

< s:iterator value ="pageBean.list" >
< s:property value ="title" />
< a href ="getArticle.action?id=<s:property value=" id" /> ">modify </ a >
< a href ="deleteArticle.action?id=<s:property value=" id" /> " onclick="return askDel()"/>delete </ a >< br />
</ s:iterator >
< s:property value ="pageBean.allRow" /> 條記錄
< s:property value ="pageBean.totalPage" />
當前第
< s:property value ="pageBean.currentPage" /> < br />

< s:if test ="%{pageBean.currentPage == 1}" >
第一頁 上一頁
</ s:if >
< s:else >
< a href ="listMyArticle.action?page=1" > 第一頁 </ a >
< a href ="listMyArticle.action?page=<s:property value=" %{pageBean.currentPage-1}" /> ">上一頁 </ a >
</ s:else >
< s:if test ="%{pageBean.currentPage != pageBean.totalPage}" >
< a href ="listMyArticle.action?page=<s:property value=" %{pageBean.currentPage+1}" /> ">下一頁 </ a >
< a href ="listMyArticle.action?page=<s:property value=" pageBean.totalPage" /> ">最后一頁 </ a >
</ s:if >
< s:else >
下一頁 最后一頁
</ s:else >

到這里,Hibernate+Spring+Struts2整合開發(fā)中的分頁問題就已經解決了,在我上述過程中,省略了許多Hibernate,Spring,Struts2的配置,那不是本文的重點,大家可以參考有關的書與資料,由于篇幅有限,在此就不一一列舉。在以后的文章中,我也會詳細地跟大家講述SSH整合開發(fā)。


Hibernate+Spring+Struts2整合開發(fā)中的一個分頁顯示方案


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 布尔津县| 文登市| 平乐县| 通河县| 介休市| 泊头市| 保亭| 迁西县| 长子县| 闽侯县| 科技| 囊谦县| 韶关市| 昌平区| 勐海县| 通化县| 永济市| 孟津县| 伊金霍洛旗| 曲水县| 宁国市| 吉木萨尔县| 石门县| 右玉县| 江川县| 浦县| 鹿泉市| 哈尔滨市| 昌宁县| 博客| 教育| 凉山| 琼结县| 清徐县| 四子王旗| 友谊县| 徐州市| 和政县| 瑞金市| 镶黄旗| 万宁市|