1.编写Page类
package com.bdqn.web.po;
import java.util.LinkedList;
import java.util.List;
public class Page<T> {
//每页显示记录数
private int pageSize;
//总记录数
private int totalCount;
//总页数
private int totalPage;
//当前页
private int currentPage;
private List<T> items = new LinkedList<T>();
public Page(int pageSize, int totalCount, int totalPage, List<T> items,
int currentPage) {
super();
this.pageSize = pageSize;
this.totalCount = totalCount;
this.totalPage = totalPage;
this.currentPage = currentPage;
this.items = items;
}
public Page() {
super();
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
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 List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
}
2.PageUtil类
package com.bdqn.web.po;
import java.util.List;
public class PageUtil {
@SuppressWarnings("unchecked")
public static Page<?> createPage(int pageSize, int currentPage,int totalCount,List<?> items){
pageSize = getPageSize(pageSize);
currentPage = getCurrentPage(currentPage);
int totalPage = getTotalPage(pageSize,totalCount);
return new Page(pageSize,totalCount,totalPage,items,currentPage);
}
public static int getTotalPage(int pageSize, int totalCount) {
// TODO Auto-generated method stub
int totalPage = 0;
if(totalCount % pageSize ==0){
totalPage = totalCount / pageSize;
}else if(totalCount % pageSize !=0){
totalPage = (totalCount / pageSize)+1;
}
return totalPage;
}
public static int getCurrentPage(int currentPage) {
// TODO Auto-generated method stub
return currentPage <=0 ? 1:currentPage;
}
public static int getPageSize(int pageSize) {
// TODO Auto-generated method stub
return pageSize <= 0 ? 10:pageSize;
}
}
3.编写分页实现。
(1)BaseDaoImpl增加3个方法(获取总记录数量、获取分页数据、)
//按hql条件查询记录总数
public <T> T unique(final String sql,final Object...paramList){
T countAll = (T) getHibernateTemplate().execute(new HibernateCallback<T>() {
public T doInHibernate(Session session) throws HibernateException, SQLException{
Query query = session.createQuery(sql);
if(paramList!=null){
for(int i =0;i<paramList.length;i++){
query.setParameter(i, paramList[i]);
}
}
return (T) query.uniqueResult();
}
});
return countAll;
}
//按hql条件查询语句返回分页结果
@SuppressWarnings({ "unchecked", "rawtypes"})
public List<T> listPage(final String hql, final int currentPage2, final int pageSize2, final Object... paramlist) {
return getHibernateTemplate().execute(new HibernateCallback() {
public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
Query query = (Query) session.createQuery(hql);
if (paramlist != null) {
for (int i = 0; i < paramlist.length; i++) {
query.setParameter(i, paramlist[i]);
}
}
int pageSize = PageUtil.getPageSize(pageSize2);
int currentPage = PageUtil.getCurrentPage(currentPage2);
currentPage = currentPage - 1;
if (currentPage > -1 && pageSize > -1) {
query.setMaxResults(pageSize);
query.setFirstResult(currentPage * pageSize);
}
return query.list();
}
});
}
//获取一个分页数据,包含list和totalCount
public Page<T> getPageData(final String hql, final int currentPage, final int pageSize, final Object... paramlist){
Page<T> page = null;
String hql2 = "select count(*) " + hql;
Number tempCountAll = this.unique(hql2, paramlist);
int totalCount = tempCountAll.intValue();
List<T> list = this.listPage(hql, currentPage, pageSize, paramlist);
page = (Page<T>) PageUtil.createPage(pageSize, currentPage, totalCount, list);
return page;
}
(2)在业务dao类中调用BaseDaoImpl的getPageData
//分页
//通过姓名查询,不推荐使用
public Page<User> findPageUserByName(String name, int pageSize, int currentPage){
return getPageData("from User where username = ?", currentPage, pageSize, name);
}
public Page<User> findPageALL(int pageSize, int currentPage){
return getPageData("from User", currentPage, pageSize);
}
(3)在业务service类中增加分页接口
public Page<User> findPageUserName(String name, int pageSize, int currentPage);//每页显示记录数,当前页
public Page<User> findPageAll( int pageSize, int currentPage);
(4)在业务service实现类中实现分页实现
@Override
public Page<User> findPageUserName(String name, int pageSize,
int currentPage) {
// TODO Auto-generated method stub
return userDaoImpl.findPageUserByName(name, pageSize, currentPage);
}
@Override
public Page<User> findPageAll(int pageSize, int currentPage) {
// TODO Auto-generated method stub
return userDaoImpl.findPageALL(pageSize, currentPage);
}
(5)测试
public class Test {
public static void main(String[] args) {
User user = new User();
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
IService iServiceImpl = (IService) context.getBean("iServiceImpl");
//测试分页
//Page<User> page2 = iServiceImpl.findPageUserName("李四", 10, 1);
Page<User> page2 = iServiceImpl.findPageAll(3, 1);
System.out.println(page2.getItems().get(1).getUsername());
}
}
4.Action中代码
public String findAll(){
//分页
this.pagebean = iService.findPageAll(10, page);
list = pagebean.getItems();
return "success";
}
5.struts2代码
<action name="findAll" class="UserAction" method="findAll">
<result name="success">\html\user_find.jsp</result>
</action>
6.user_find.jsp代码
<s:form action="findUserByName" method="post">
通过名字查询:<s:textarea name="user.username"></s:textarea>
<s:submit value="查询"></s:submit>
</s:form>
<s:iterator var="userList" value="list" status="status">
ID:<s:property value="#userList.id" />
Name:<s:property value="#userList.username" />
<s:a href="updateOrt?id=%{#userList.id}">修改</s:a>
<s:a href="updateOrtByName?username=%{#userList.username}">通过名字修改</s:a>
<s:a href="deleteUser?id=%{#userList.id}">删除</s:a>
<br />
</s:iterator>
<tr>
<td>共 <s:property value="%{pagebean.totalPage}" /> 页
</td>
<td>共 <s:property
value="pagebean.totalCount" /> 条记录
</td>
<td>当前第 <s:property
value="pagebean.currentPage" /> 页
</td>
<td colspan="4" width="55%" class="tocenter">
<s:if test="%{pagebean.currentPage == 1}">第一页 上一页 </s:if>
<s:else>
<s:a href="findAll?page=1">第一页 </s:a>
<s:a href="findAll?page=%{pagebean.currentPage-1}">上一页 </s:a>
</s:else>
<s:if test="%{pagebean.currentPage != pagebean.totalPage}">
<s:a href="findAll?page=%{pagebean.currentPage+1}">下一页 </s:a>
<s:a href="findAll?page=%{pagebean.totalPage}">最后一页 </s:a>
</s:if>
</td>
</tr>
7.显示页面
7.