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