




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
public interface MemberDao /省略了其他的代码 /* * 分页查询 * param hql 查询的条件 * param offset 开始记录 * param length 一次查询几条记录 * return */ public List queryForPage(final String hql,final int offset,final int length); /* * 查询所有记录数 * param hql 查询的条件 * return 总记录数 */ public int getAllRowCount(String hql);2、DAO层实现类MemberDaoImpl对上面两个方法的实现如下:public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao /省略了其他的代码 /* * 分页查询 * param hql 查询的条件 * param offset 开始记录 * param length 一次查询几条记录 * return */ public List queryForPage(final String hql,final int offset,final int length) List list = getHibernateTemplate().executeFind(new HibernateCallback() public Object doInHibernate(Session session) throws HibernateException,SQLException Query query = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); List list = query.list(); return list; ); return list; /* * 查询所有记录数 * return 总记录数 */ public int getAllRowCount(String hql) return getHibernateTemplate().find(hql).size(); 细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对Hibernate支持的类,getHibernateTemplate().executeFind(new HibernateCallback().)方法中的参数,我们使用了接口回调,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。3、下面我们来新建一个保存分页信息的类PageBean,具体代码如下:public class PageBean private List list; /要返回的某一页的记录列表 private int allRow; /总记录数 private int totalPage; /总页数 private int currentPage; /当前页 private int pageSize; /每页记录数 private boolean isFirstPage; /是否为第一页 private boolean isLastPage; /是否为最后一页 private boolean hasPreviousPage; /是否有前一页 private boolean hasNextPage; /是否有下一页 public List getList() return list; public void setList(List list) this.list = list; public int getAllRow() return allRow; public void setAllRow(int allRow) this.allRow = allRow; public int getTotalPage() return totalPage; public void setTotalPage(int totalPage) this.totalPage = totalPage; public int getCurrentPage() return currentPage; public void setCurrentPage(int currentPage) this.currentPage = currentPage; public int getPageSize() return pageSize; public void setPageSize(int pageSize) this.pageSize = pageSize; /* * 初始化分页信息 */ public void init() this.isFirstPage = isFirstPage(); this.isLastPage = isLastPage(); this.hasPreviousPage = isHasPreviousPage(); this.hasNextPage = isHasNextPage(); /* * 以下判断页的信息,只需getter方法(is方法)即可 * return */ public boolean isFirstPage() return currentPage = 1; / 如是当前页是第1页 public boolean isLastPage() return currentPage = totalPage; /如果当前页是最后一页 public boolean isHasPreviousPage() return currentPage != 1; /只要当前页不是第1页 public boolean isHasNextPage() return currentPage != totalPage; /只要当前页不是最后1页 /* * 计算总页数,静态方法,供外部直接通过类名调用 * param pageSize 每页记录数 * param allRow 总记录数 * return 总页数 */ public static int countTotalPage(final int pageSize,final int allRow) int totalPage = allRow % pageSize = 0 ? allRow/pageSize : allRow/pageSize+1; return totalPage; /* * 计算当前页开始记录 * param pageSize 每页记录数 * param currentPage 当前第几页 * return 当前页开始记录号 */ public static int countOffset(final int pageSize,final int currentPage) final int offset = pageSize*(currentPage-1); return offset; /* * 计算当前页,若为0或者请求的URL中没有?page=,则用1代替 * param page 传入的参数(可能为空,即0,则返回1) * return 当前页 */ public static int countCurrentPage(int page) final int curPage = (page=0?1:page); return curPage; 4、Service层接口的设计:public interface MemberService /省略其他的代码 /* * 分页查询 * param currentPage 当前第几页 * param pageSize 每页大小 * return 封闭了分页信息(包括记录集list)的Bean */ public PageBean queryForPage(int pageSize,int currentPage);5、Service层实现类的部分内码如下:public class MemberServiceImpl implements MemberService /通过applicationContext.xml配置文件注入MemberDao的值 private MemberDao memberDao; public void setMemberDao(MemberDao memberDao) this.memberDao = memberDao; /* * 分页查询 * param currentPage 当前第几页 * param pageSize 每页大小 * return 封闭了分页信息(包括记录集list)的Bean */ public PageBean queryForPage(int pageSize,int page) final String hql = from Member; /查询语句 int allRow = memberDao.getAllRowCount(hql); /总记录数 int totalPage = PageBean.countTotalPage(pageSize, allRow); /总页数 final int offset = PageBean.countOffset(pageSize, page); /当前页开始记录 final int length = pageSize; /每页记录数 final int currentPage = PageBean.countCurrentPage(page); List list = memberDao.queryForPage(hql,offset, length); /一页的记录 /把分页信息保存到Bean中 PageBean pageBean = new PageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRow); pageBean.setTotalPage(totalPage); pageBean.setList(list); pageBean.init(); return pageBean; 6、在Struts2中调用queryForPageMemberService层的queryForPage()方法即可return一个包含分页信息、符合条件的结果集list, 代码如下:public class ListMember extends ActionSupport /通过applicationContext.xml配置文件注入memberService的值 private MemberService memberService; public void setMemberService(MemberService memberService) this.memberService = memberService; private int page; /第几页 private PageBean pageBean; /包含分布信息的bean public int getPage() return page; public void setPage(int page) /若URL中无此参数,会默认为第1页 this.page = page; public PageBean getPageBean() return pageBean; public void setPageBean(PageBean pageBean) this.pageBean = pageBean; Override public String execute() throws Exception /分页的pageBean,参数pageSize表示每页显示记录数,page为当前页 this.pageBean = memberService.queryForPage(2, page); return SUCCESS; 7、最后在lis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山安全检测规定
- 农业生态环境保护法规政策解读
- 人员招聘与用工合同
- 突发事件应急预案制定
- 工厂安全培训大纲课件
- 2025合作协议(以项目为期限)
- 2025全球专利许可合同会计学堂
- 2025建筑设备租赁公司塔吊租赁合同
- 工厂复工安全教育培训课件
- 2025私营企业短期用工合同范本专业版(合同样本)
- 情绪管理课2025年职场压力释放与心灵成长分析报告
- 交管12123驾驶证学法减分考试题库和答案
- 双十一货车租车协议合同
- 2025年本科院校团委笔试备考资料
- 2025至2030年中国铜管乐器行业市场全景评估及投资前景展望报告
- 2024物业管理考试试题及参考答案
- 环保废气基础知识培训课件
- 2025年成都市中考物理真题(含答案)
- 第8课《回忆鲁迅先生》课件+++2025-2026学年统编版语文八年级上册
- 库欣综合征护理查房
- 证券投资2025新改实训指导
评论
0/150
提交评论