欢迎投稿

今日深度:

大话分页(一)

大话分页(一)


本文讨论范畴只在真分页,下面谈到的分页也特指真分页)。


分页共性



三种数据的分页方式的比较


MySql数据库特色分页




Oracle数据库常用分页

select T.*,rownum rn from () T where rownum <PageNo*PageSize) where rn >=(PageNo-1)*PageSize

select A.*,rownum rn from () A where rownum <41) where rn >=20

SqlServer数据常用分页

紧跟这第一页显示的记录之后的5条记录,也就是通过对userID字段进行降序排列时,它们是除了第一页数据之后的5条记录,也就是它们的userID不在第一页的UserID之中,在SQL语句有一个not in这个正好可以排上用场。 首先我们按照对UserID进行降序排序,查询出前面第一页使用的数据的UserID,SQL语句及执行结果如下:

select 5 userID from t_User order by userID asc) order by userID asc

select top(n-1)*5 userID from t_User order by userID asc) order by userID asc

Hibernate框架的分页

public class AbstractPageManager extends HibernateDaoSupport {

	/**
	 * 根据HQL语句,获得查找总记录数的HQL语句 如: 
	 * select ... from Organization o where o.parent is null 
	 * 经过转换,可以得到: 
	 * select count(*) from Organization o where o.parent is null
	 * 
	 * @param hql
	 * @return
	 */
	private String getCountQuery(String hql) {
		// 取得from的位置
		int index = hql.indexOf("from");

		// 返回:查询记录条数 的SQL语句
		if (index != -1) {
			return "select count(*) " + hql.substring(index);
		}
		throw new SystemException("无效的HQL查询语句");
	}
	
	/**
	 * 根据HQL语句进行分页查询
	 * 
	 * @param hql HQL语句
	 * @param params HQL语句带的多个参数
	 * @param offSet 从第几个记录开始查询
	 * @param pageSize 每页显示多少行
	 * @return
	 */
	public PageModel searchPaginate(String hql, Object[] params, int offSet,
			int pageSize) {
		// 记录条数
		String strCount = getCountQuery(hql);

		// 查询条数
		Query query = getSession().createQuery(strCount);
		// 将HQL语句带的多个参数 赋值给Query
		if (params != null && params.length > 0) {
			for (int i = 0; i < params.length; i++) {
				query.setParameter(i, params[i]);
			}
		}

		// 获取查询条数
		int intCount = ((Long) query.uniqueResult()).intValue();

		// 查询Organization记录
		query = getSession().createQuery(hql);
		// 将HQL语句带的多个参数 赋值给Query
		if (params != null && params.length > 0) {
			for (int i = 0; i < params.length; i++) {
				query.setParameter(i, params[i]);
			}
		}
		/*
		 * offSet 设置从第几个记录开始查询
		 * pageSize 设置每页显示多少行
		 */
		query.setFirstResult(offSet);
		query.setMaxResults(pageSize);

		//组装PageModel
		PageModel pageModel = new PageModel();
		pageModel.setDatas(query.list());
		pageModel.setTotal(intCount);
		
		return pageModel;
	}
}


www.htsjk.Com true http://www.htsjk.com/shujukunews/83.html NewsArticle 大话分页(一) 本文讨论范畴只在真分页,下面谈到的分页也特指真分页 )。 分页共性 三种数据的分页方式的比较 MySql数据库特色分页 Oracle数据库常用分页 select T.*,rownum rn from ( )...
相关文章
    暂无相关文章
评论暂时关闭