首页 > 代码库 > 项目开发经验分享—分页查询

项目开发经验分享—分页查询

    从今天开始,我将和大家分享一下最近经手项目的开发经验。今天我们分享的内容是:分页查询!

引言

    大家在浏览网页的时候,肯定遇到过这样的效果,一个滚动条套另一个滚动条,上下拉动,看着非常不方便,或是整个检索内容都在同一个页面,导致页面加载速度太慢,等半天都没有反应(如下图),这种情况下,用户可能没有耐心等待直接关闭该页面啦!

     技术分享  技术分享

    当我们的项目检索后内容也很多,这时候我们怎么办?是把用户检索到的信息一下子都显示到页面,让用户在等待加载的漫长过程中耐心耗尽后放弃使用,还是想用户之所想,通过添加分页,去掉滚动条,动态加载的方式提高加载效率,给用户最好的体验度?当然,作为一名优秀的软件设计人员,我们选择后者!下面来看看我们具体的实现吧:

思路

1、在平台的底层封装一个分页方法;

2、继承底层的分页方法,根据自己的实体实现分页

实现

1、底层封装一个分页方法:

(1)BaseEao

	/**
	 * 分页查询,通过hql语句
	 * @param pageEntity,需赋值字段hql、pageNum、pageSize
	 * 		               hql,查询hql语句,如:"From Student where studentCode=?"
	 * 			       pageNum,页号
	 * 			       pageSize,页大小
	 * @param args不定参数,直接传入即可
	 * @return PageEntity,通过pageEntity.getPageList()取到实体集合;
	 */
	public PageEntity<T> queryPageEntityByHql(PageEntity pageEntity,Object... args);

(2)BaseEaoImpl

	public PageEntity<T> queryPageEntityByHql(PageEntity pageEntity,
			Object... args) {
		try {
			Query query = getEntityManager().createQuery(pageEntity.getHql());
			// 传入不定参数
			for (int i = 0; i < args.length; i++) {
				query.setParameter(i + 1, args[i]);
			}

			List<T> list1 = query.getResultList();
			if (list1.size() == 0) {
				return null;
			} else {
				int firstResult = (pageEntity.getPageNum() - 1)
						* pageEntity.getPageSize();
				if (pageEntity.getPageSize() != 0) {
					query.setMaxResults(pageEntity.getPageSize())
							.setFirstResult(firstResult);
				}
				List<T> list = query.getResultList();
				pageEntity.setTotal((long) list1.size());
				pageEntity.setRows(list);
				if (logger.isDebugEnabled()) {
					logger.debug("Eao根据hql语句查询单实体分页成功,"
							+ getEntityManager().getClass().getName());
				}
				return pageEntity;
			}
		} catch (Exception e) {
			logger.error("Eao根据hql语句查询单实体分页失败", e);
			return null;
		}
	}

2、继承底层的分页方法,根据自己的实体实现分页,这里我们的实体是Template

(1)TemplateEao

	/**	
	 * 分页查询模板	
	 * @param pageNum 页码
	 * @param pageSize 每页显示的数据
	 * @return 返回模板实体
	 */
	public PageEntity<Template> queryPageTemplateInfos(int pageNum,int pageSize);
(2)TemplateEao

	/**
	 * 分页查询模板
	 * @param pageNum 页码
	 * @param pageSize 每页显示的数据
	 * @return 返回模板实体
	 */
	@Override
	public PageEntity<Template> queryPageTemplateInfos(
			int pageNum,int pageSize) {
		// TODO Auto-generated method stub
		//声明一个分页查询实体
		PageEntity<Template> pageEntity=new PageEntity<Template>();
		//定义查询课程信息的hql语句
		String strHqlTemplate="From Template ";
		//定义变量 不删除状态
		//Integer isDelete=0;
		//为分页实体设置查询语句,设置页数,和每页显示信息数目
		pageEntity.setHql(strHqlTemplate);
		pageEntity.setPageNum(pageNum);
		pageEntity.setPageSize(pageSize);
		//分页查询模板信息并返回
		PageEntity<Template> PageTempalte=this.queryPageEntityByHql(pageEntity);
		return PageTempalte;
		
	}
(3)TemplateBean

	/**
	 * 分页查询模板
	 * @param pageEntity 封装好的查询实体
	 * @return 返回模板信息的实体集合
	 */
	public PageEntity<Template> queryPageTemplateInfos(int pageNum,int pageSize);

(4)TemplateBeanImpl

	/**
	 * 分页查询模板信息
	 */
	@Override
	public PageEntity<Template> queryPageTemplateInfos(
			int pageNum,int pageSize) {
		// TODO Auto-generated method stub
		if(pageNum==0){
			pageNum=1;
		}
		return templateEao.queryPageTemplateInfos(pageNum, pageSize);
	}

效果:

               技术分享

总结:

    从用户角度出发,以用户为主,越靠近用户的使用习惯,软件亲和力越高,开发的软件越受欢迎!

项目开发经验分享—分页查询