`
- 浏览:
149020 次
- 性别:
- 来自:
北京
-
- 参考网址1:http://www.blogjava.net/BlogJava522935502/
-
- 参考网址2:http://blog.csdn.net/qq522935502/
-
- 资料部分借鉴:http://www.blogjava.net/rongxh7/
-
- 上节课,我们完成了一个SSH整合的CRUD操作案例,并且完善了其国际化以及校验等内容,这节课,我们继续加以完善,我们知道,当我们查询数据库的内容过多的时候,显示在页面上的内容就比较冗长,所以分页的实现就显的十分有必要了。分页功能的实现是必不可少的,掌握一到两种分页技术在在实际开发前是有必要的,前两天浏览博客的时候看到了一个程序员的博文写的一个分页功能的实现非常好,在这里,分享给大家。
-
- 在讲解分页功能实现之前,大家必须对分页有一定的了解,知道分页的几个要素:总记录数,每页显示数,共几页,当前页等。
-
- 在上个例子的基础上我们开始完善我们的程序。
-
- 1.首先我们先新建立一个接口MemberDao.java,把所需要用到的方法列出来:
-
- [java] view plaincopyprint?
- package cn.zbvc.dao;
- import java.util.List;
- import cn.zbvc.bean.User;
- public interface MemberDao {
- /**
- * 分页查询
- * @param hql 查询条件
- * @param offset 开始记录
- * @param length 一次查询几条记录
- * @return 查询的记录集合
- */
- public List<User> queryForPage(final String hql,final int offset,final int length);
- /**
- * 查询所有的记录数
- * @param hql 查询条件
- * @return 总记录数
- */
- public int getAllRowCount(String hql);
- }
-
-
- 2.然后我们创建其实现类:MemberDaoImpl.java
-
- [java] view plaincopyprint?
- package cn.zbvc.dao.impl;
- import java.util.List;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import cn.zbvc.bean.User;
- import cn.zbvc.dao.MemberDao;
- public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
- /**
- * 查询所有的记录数
- * @param hql 查询条件
- * @return 总记录数
- */
- public int getAllRowCount(String hql) {
- return this.getHibernateTemplate().find(hql).size();
- }
- /**
- * 分页查询
- * @param hql 查询条件
- * @param offset 开始记录
- * @param length 一次查询几条记录
- * @return 查询的记录集合
- */
- @SuppressWarnings("unchecked")
- public List<User> queryForPage(final String hql, final int offset, final int length) {
- Session session = this.getSession();
- Query q = session.createQuery(hql);
- q.setFirstResult(offset);
- q.setMaxResults(length);
- List<User> list = q.list();
- System.out.println(list.size());
- session.close();
- return list;
- }
-
-
- 大家可以看到,我们一共定义了两个方法,第一个方式是获取数据库表的总记录数,第二个方法是获取我们想要获取的某一页的数据集合,传递的三个参数分别是:查询条件、开始的记录、结束的记录。
-
- 细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupport是Spring提供的对Hibernate支持的类,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)和query.setMaxResults(length)来实现分页查询功能。
-
- 3.然后我们需要建立一个获取分页信息的pageBean.java:
-
- [java] view plaincopyprint?
- package cn.zbvc.util;
- import java.util.List;
- import cn.zbvc.bean.User;
- public class PageBean {
- private List<User> 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; //是否有下一页
- Set and get方法...
- PageBean中的具体方法:
- /**
- * 初始化分页信息
- */
- public void init(){
- this.isFirstPage = isFirstPage;
- this.isLastPage = isLastPage;
- this.hasPreviousPage = hasPreviousPage;
- this.hasNextPage = hasNextPage;
- }
- /**
- * 计算总页数 静态方法
- * @param pageSize 每页的记录数
- * @param allRow 总记录数
- * @return 总页数
- */
- public static int countTatalPage(final int pageSize,final int allRow){
- int toalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize + 1;
- return toalPage;
- }
- /**
- * 计算当前页开始的记录
- * @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.业务逻辑层的实现:我们现在就只操作User,现在我们在UserService中定义一个方法:
-
- [java] view plaincopyprint?
- /**
- * 分页查询
- * @param pageSize 每页显示多少记录
- * @param currentPage 当前页
- * @return 封装了分页信息的bean
- */
- public PageBean queryForPage(int pageSize,int page);
- 5.使用UserServiceImpl实现这个具体方法:
- /**
- * 分页查询
- * @param pageSize 每页显示多少记录
- * @param currentPage 当前页
- * @return 封装了分页信息的bean
- */
- public PageBean queryForPage(int pageSize, int page) {
- final String hql = "from User user order by user.id"; //查询语句
- int allRow = memberDao.getAllRowCount(hql); //总记录数
- int totalPage = PageBean.countTatalPage(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.然后我们为了不影响上一个例子,我们新创建一个ListUserAction2.java:
-
- [java] view plaincopyprint?
- package cn.zbvc.action.user;
- import java.util.List;
- import com.opensymphony.xwork2.ActionSupport;
- import cn.zbvc.bean.User;
- import cn.zbvc.service.UserService;
- import cn.zbvc.util.PageBean;
- public class ListUserAction2 extends ActionSupport {
- private UserService service;//通过Spring创建业务层对象 使用set方法依赖注入
- private PageBean pageBean; //封装了分页信息和数据内容的pageBean
- private List<User> listUser;//用于储存pageBean当中被封装的User信息
- private int page = 1; //表示从网页中返回的当前页的值 默认为1 表示默认显示第一页内容
- public int getPage() {
- return page;
- }
- public void setPage(int page) {
- this.page = page;
- }
- public List<User> getListUser() {
- return listUser;
- }
- public void setListUser(List<User> listUser) {
- this.listUser = listUser;
- }
- public PageBean getPageBean() {
- return pageBean;
- }
- public void setPageBean(PageBean pageBean) {
- this.pageBean = pageBean;
- }
- public void setService(UserService service) {
- this.service = service;
- }
- public String execute()throws Exception{
- this.pageBean = service.queryForPage(5, page);//获取封装了分页信息和数据的pageBean
- this.listUser = this.pageBean.getList(); //获取数据
- return SUCCESS;
- }
- }
-
-
- 7.配置applicationContext.xml和struts.xml的相关信息,这里省略了。
-
- 8.在listUser2.jsp页面中添加分页内容:
-
- [html] view plaincopyprint?
- <s:iterator value="pageBean">
- <tr>
- <td colspan="6" align="center" bgcolor="#5BA8DE">
- 共<s:property value="allRow"/>条记录
- 共<s:property value="totalPage"/>页
- 当前第<s:property value="currentPage"/>页<br>
-
- <s:if test="%{currentPage == 1}">
- 第一页 上一页
- </s:if>
-
- <s:else>
- <a href="listUser2.action?page=1">第一页</a>
- <a href="listUser2.action?page=<s:property value="%{currentPage-1}"/>">上一页</a>
- </s:else>
-
- <s:if test="%{currentPage != totalPage}">
- <a href="listUser2.action?page=<s:property value="%{currentPage+1}"/>">下一页</a>
- <a href="listUser2.action?page=<s:property value="totalPage"/>">最后一页</a>
- </s:if>
-
- <s:else>
- 下一页 最后一页
- </s:else>
- </td>
- </tr>
- </s:iterator>
-
-
- 9.查看效果:
-
-
- 10.思考总结
-
- 关于分页功能实现,应该是有有很多种解决方法,我介绍的这种解决方案是为了给大家一个
-
- 范例,让大家明白分页功能实现的原理,其中,大部分的内容借鉴了之前提到的网址。接下来的时间,我会继续学习关于分页功能的其它实现方式,然后分享给大家,另外,还会继续的整理SSH的整合。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
基于SSH技术实现分页管理信息,代码几乎不用修改,直接能通,方便大家使用
只有ssh分页功能
本资源主要为基于SSH2的分页查询技术,通过自己的测试,需要修改一些信息,使用HTML的onsubmit事件,.txt文档内从前台到后台的代码都有,是一个例子。
java基于SSH框架的学生成绩管理系统源码。要求: (1) 整合Struts2、Spring和Hibernate框架 (2) 实现“登录”功能 (3) 实现“学生信息管理”功能 (4) 实现“学生成绩管理”功能 (5) 实现分页功能 目的...
基于SSH框架的增删改查示例、分括分页 基于oracle数据库 具有登录、单表增删改查、分页、关键字查询等功能 有说明文档
用SSH框架封装好的源码,关于分页的,基于MVC架构的~!大家可以借鉴一下,里面有关于分页的算法。
采用Struts2+Hibernate3.2+Spring2.5使用的分页,在做分页的时候很是方便的,可以采用的哦……
1) 整合Struts2、Spring和Hibernate框架 (2) 实现“登录”功能 (3) 实现“学生信息管理”功能 (4) 实现“学生成绩...基于SSH框架的学生成绩管理系统源码+数据库,Struts2、Spring与Hibernate整合应用,实验报告
1,该系统使用SSH三大框架实现,Struts2主要用于流程控制、Spring的控制反转能起到解耦合的作用、Hibernate是一个优秀的ORM框架主要用于数据持久化 2,登录模块分为三种角色业务员、研究员、管理员 业务员:主要负责...
分页 模糊查询 SSH 框架 都是 基于SSH 下简单的 仅供参考
基于SSH框架的在线考试系统 ,使用bootstrap作为前端框架,分页是自己分装的bean. 有以下功能 学生登录和教师登录 学生端: 学生在线考试 成绩查询 修改密码 退出系统 教师端:考生信息管理 考生成绩管理 试卷管理 ...
大学JavaEE课设设计的课设作品,学生端有:订餐、购物车、结账、查看历史订单、登录、注销、分页查询功能。管理员端:对菜品、学生帐号进行增删查改,文件上传下载、导出excel表格。中文、英文国际化。
本案例是基于SSH框架的分页整合``初学者的一个很好的案例!
Flex+Java 基于SSH框架 用户管理系统 java作为后台提供服务 Flex作为表示层实现增删改查,登陆,模糊查询,分页等基本功能 采用注解注解方式配置Java flex项目位置\Page\src\flex_app 请将服务器配置修改为自己的...
SSH框架; 发布、修改房屋,用户注册的提示信息没有实现; 错误检测方面,功能不全,主要在字节长度以及有效性方面; 分页显示仍旧没有实现,按条件查询实现方法较复杂,为hql语句,未使用Critical查询。
基于ssh框架开发的crm系统,具有分页显示功能,带数据库资源,是一个不错的入门项目案例,需要的朋友放心下载。
通过Struts2、Hibernate、spring框架整合做的一个CRM系统,整体开发比较简单,就是细节的地方处理还是要花费一定的功夫,我主要负责的是人事管理(包括部门管理、职务管理、员工基本信息管理)、教学管理(班级管理...
3、增删改查,模糊查询,分页,都有的,分页是数据库分页,修改自动加载存在信息。 4、图片上传、富文本编辑器,都是有的,富文本编辑器已经集成了图片上传, 5、还有日期选择器,都是有的 6、博客分类,内容、留言...
基于ssh框架的员工管理系统 还包含了数据库文件 亲测可执行
一个ssh框架小demo,框架的包目录结构,包含登录,增删查改,分页,jsp文件放在WEN-INF下等的简单实现,有数据库文件,源代码,结果视频。