SSH 分页

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}">第一页&nbsp;&nbsp;&nbsp;&nbsp;上一页&nbsp;&nbsp;&nbsp;&nbsp;</s:if>
			<s:else>
				<s:a href="findAll?page=1">第一页&nbsp;&nbsp;&nbsp;&nbsp;</s:a>
				<s:a href="findAll?page=%{pagebean.currentPage-1}">上一页&nbsp;&nbsp;&nbsp;&nbsp;</s:a>
			</s:else> 
		  <s:if test="%{pagebean.currentPage != pagebean.totalPage}">
				<s:a href="findAll?page=%{pagebean.currentPage+1}">下一页&nbsp;&nbsp;&nbsp;&nbsp;</s:a>
				<s:a href="findAll?page=%{pagebean.totalPage}">最后一页&nbsp;&nbsp;&nbsp;&nbsp;</s:a>
		  </s:if> 
		</td>
	</tr>

 

7.显示页面

7.

转载于:https://my.oschina.net/u/3489648/blog/1082982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值