从今天开始,我将和大家分享一下最近经手项目的开发经验。今天我们分享的内容是:分页查询!
大家在浏览网页的时候,肯定遇到过这样的效果,一个滚动条套另一个滚动条,上下拉动,看着非常不方便,或是整个检索内容都在同一个页面,导致页面加载速度太慢,等半天都没有反应(如下图),这种情况下,用户可能没有耐心等待直接关闭该页面啦!
当我们的项目检索后内容也很多,这时候我们怎么办?是把用户检索到的信息一下子都显示到页面,让用户在等待加载的漫长过程中耐心耗尽后放弃使用,还是想用户之所想,通过添加分页,去掉滚动条,动态加载的方式提高加载效率,给用户最好的体验度?当然,作为一名优秀的软件设计人员,我们选择后者!下面来看看我们具体的实现吧:
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);
}
从用户角度出发,以用户为主,越靠近用户的使用习惯,软件亲和力越高,开发的软件越受欢迎!
原文:http://blog.csdn.net/small_baby01/article/details/43340819