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

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

引言

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

  

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

思路

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);
	}

效果:

总结:

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

时间: 2024-10-10 18:12:33

项目开发经验分享—分页查询的相关文章

框架 day50 BOS项目 4 批量导入(ocupload插件,pinyin4J)/POI解析Excel/Combobox下拉框/分区组合条件分页查询(ajax)/分区数据导出(Excel)

知识点: 批量导入(ocupload插件,pinyin4J /POI解析Excel(apache POI) /区域分页查询 /Combobox下拉框 /分区组合条件分页查询(ajax) /分区数据导出(Excel下载) BOS项目笔记第4天 1.    区域批量导入功能 *Ajax不支持文件上传. *上传并且不刷新上传页面原理: Target到一个0,0,0的隐藏iframe里,造成一个没有刷新的假象 <form target="myIframe" action="ab

框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)

BOS项目笔记第3天 1.    修复window控件bug 把弹出窗口拖动到浏览器窗口外之后无法再拖动     将提供的outOfBounds.js文件复制到项目中     在需要修复的jsp页面引入js文件,可以阻止控件拖出窗口 <script src="${pageContext.request.contextPath }/js/easyui/outOfBounds.js" type="text/javascript"></script&

ssm-crud项目——分页查询

分页查询(ajax异步查询): 工程目录结构: 基于maven构建工程: 一.准配配置文件 1.创建pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav

JAVAEE——BOS物流项目04:学习计划、datagrid、分页查询、批量删除、修改功能

1 学习计划 1.datagrid使用方法(重要) n 将静态HTML渲染为datagrid样式 n 发送ajax请求获取json数据创建datagrid n 使用easyUI提供的API创建datagrid(掌握) 2.实现取派员分页查询 n 调整页面基于datagrid发送ajax请求 n 创建PageBean封装分页参数 n 定义通用分页查询方法 n 将分页查询结果转为json返回 3.取派员批量删除 n 页面调整 n 服务端实现 4.取派员修改 n 页面调整 n 服务端实现 2 data

mssql数据库分页查询效率的一次体会

这几天在一个项目,合同管理系统(是对老系统的升级和改造,老系统是VS2008做的),由于数据库的表是项目组根据老系统的数据库建的,所以在查询的适合我就需要自己创建视图来完成多表的查询,起初我是读取项目组成员建好的视图,里面有7张表,其中还包含视图,由于视图中join视图是不支持索引的,所以在查询第一页的时候(每一页20条数据,总共数据量是10W条左右),耗时800毫秒,但是 当row_number达到上千的时候,基本查询要6秒以上,每点击下一页,耗时会增加十几毫秒,到40000条也就是中间的时候

mysql分库 分页查询

Mysql海量数据分表分库如何列表分页? 1.现在使用ElasticSearch了.基于Lucene的解决方案 2.必须将mysql里的数据写入到类似hbase这样的分布式数据库,查询快.但分页.查询的话,可以在hbase前加一层solr,用于建立数据索引 如何对分库后的数据进行分页查询? yeyingsheng 发布于 2015/04/21 10:18 阅读 7K+ 收藏 1 答案 7 Spring iBATIS si项目,现在连接6台mysql数据库,路由分库算法是根据id的hash值%6,

bos 第4 (区域excel批量导入、区域通用分页查询、分区的添加、分区多条件分页查询、分区导出excel)

BOS项目笔记 第4天 今天内容安排: 1.区域批量导入功能 jQuery OCUpload(一键上传插件).apache POI.pinyin4j 2.实现区域的分页查询 3.对分页代码重构 4.添加分区(combobox下拉框) 5.分区的组合条件分页查询 6.分区数据导出功能 1. 区域数据批量导入功能 1.1 一键上传插件使用 ajax不能做文件上传. 第一步:在jsp页面中引入插件的js文件 <script type="text/javascript" src=&quo

HBase多条件及分页查询的一些方法

HBase是Apache Hadoop生态系统中的重要一员,它的海量数据存储能力,超高的数据读写性能,以及优秀的可扩展性使之成为最受欢迎的NoSQL数据库之一.它超强的插入和读取性能与它的数据组织方式有着密切的关系,在逻辑上,HBase的表数据按RowKey进行字典排序, RowKey实际上是数据表的一级索引(Primary Index),由于HBase本身没有二级索引(Secondary Index)机制,基于索引检索数据只能单纯地依靠RowKey.也只有使用RowKey查询数据才能得到非常高

材料管理框架:一个共通的viewModel搞定所有的分页查询

前言 大家看标题就明白了我想写什么了,在做企业信息化系统中可能大家写的最多的一种页面就是查询页面了.其实每个查询页面,除了条件不太一样,数据不太一样,其它的其实都差不多.所以我就想提取一些共通的东西出来,再写查询时只要引入我共通的东西,再加上极少的代码就能完成.我个人比较崇尚代码简洁干净,有不合理的地方欢迎大家指出. 这篇文章主要介绍两个重点:1.前台viewModel的实现.2.后台服务端如何简洁的处理查询请求. 需求分析 查询页面要有哪些功能呢 1.有条件部输入查询条件(这个不打算做成共通的