数据库的分页查询_第1页
数据库的分页查询_第2页
数据库的分页查询_第3页
数据库的分页查询_第4页
数据库的分页查询_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库的分页查询 分页,简单说就是将一大页的数据分割成两页或更多页来显示。 好处在于适应屏幕的大小, 避免一拉到底出现数据的漏查; 坏处就是加大了服务器的附和。 现在的分页方式主要有两种: 1.根据需求分批从数据库调取固定 size 的数据, 2. 使用集合类一次性从数据库调取数据, 再进行分页处理。今天,我讲解的是第一种分页方式。首先,创建web工程并搭建好SSH!架环境。在bean包下新建分页的封装类PageBean和普通 Bean 类 User ,编写 User.hbm.xml 。详细代码如下:PageBeanjava view plaincopy importjava.util.Lis

2、t;SuppressWarnings(unchecked)public class PageBean publicintgetTotalPage() private List list; /要返回的某一页的记录列表总记录数总页数当前页每页记录数private intallRow; / private inttotalPage; / private intcurrentPage; / private intpageSize; /是否为第一页是否为最后一页是否有前一页是否有下一页private booleanisFirstPage; / private booleanisLastPage; / p

3、rivate booleanhasPreviousPage; / private booleanhasNextPage; /public List getList() return list; public void setList(List list) this.list = list; publicintgetAllRow() returnallRow; public void setAllRow(intallRow) this.allRow = allRow;计算当前页,若为0或者请求的URL中没有”?Page=,则用1代替returntotalPage; public void set

4、TotalPage(inttotalPage) this.totalPage = totalPage; publicintgetCurrentPage() returncurrentPage; public void setCurrentPage(intcurrentPage) this.currentPage = currentPage; publicintgetPageSize() returnpageSize; public void setPageSize(intpageSize) this.pageSize = pageSize;/* */*初始化分页信息*/public void

5、init() this.isFirstPage = isFirstPage(); this.isLastPage = isLastPage(); this.hasPreviousPage = isHasPreviousPage(); this.hasNextPage = isHasNextPage();/* */*以下判断页的信息 ,只需 getter 方法 (is 方法)即可* return*/如是当前页是第 1 页publicbooleanisFirstPage() return (currentPage = 1);/ 如果当前页是最后一页PublicbooleanisLastPage()

6、 return currentPage = totalPage; / PublicbooleanisHasPreviousPage() returncurrentPage != 1; / 只要当前页不是第 1 页 只要当前页不是最后 1 页PublicbooleanisHasNextPage() returncurrentPage != totalPage; / /* */* ParamPageSize* 每页记录数* ParamallRow总记录数总页数计算总页数 , 静态方法 , 供外部直接通过类名调用* return*/Public static intcountTotalPage(fi

7、nal intPageSize, final intallRow) inttotalPage = allRow % PageSize = 0 ? allRow / PageSize : allRow/ PageSize + 1;returntotalPage;/* */* ParamPageSize* 每页记录数* ParamcurrentPage当前第几页当前页开始记录号计算当前页开始记录* return*/Public static intcountOffset(final intPageSize, final intcurrentPage) finalint offset = PageS

8、ize * (currentPage - 1);return offset;/* */* param page传入的参数 (可能为空 ,即 0,则返回 1) 当前页* return*/public static intcountCurrentPage(int page) finalintcurPage = (page = 0 ? 1 : page); returncurPage;Userjava view plaincopy packagecom.sram.bean; importjava.util.ArrayList; importjava.util.LinkedList; importja

9、va.util.List;/* 用户 bean */public class User privateint id;private String username; / private String password; / private String picUrl; / private String email; / private String tel; / private String sex; / private String job; /用户名密码图片邮箱电话性别工作publicintgetId() return id; public String getPicUrl() retur

10、npicUrl; public void setPicUrl(String picUrl) this.picUrl = picUrl; public void setId(int id) this.id = id;public String getUsername() return username;public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password

11、) this.password = password;public String getEmail() return email;public void setEmail(String email) this.email = email; public String getTel() returntel;public void setTel(String tel) this.tel = tel;public String getSex() return sex;public void setSex(String sex) this.sex = sex;public String getJob(

12、) return job;public void setJob(String job) this.job = job;然后,编写 Dao 层的相关代码。User的 Dao 接口 IUserDao.java ,部分代码如下:java view plaincopyvoidaddUser(User user);/ 登录验证User testLogin(User user) ;/ 得到所有用户public ListqueryForPage(final String hql, final int offset, finalint length);/ 得到记录总数 intgetAllRowCount(St

13、ring hql);在实现类 UserDaoImpl.java 中,实现对数据的分页提取java view plaincopypublic ListqueryForPage(final String hql, final int offset, finalint length) List list = hibernateTemplate.executeFind(new HibernateCallback() public Object doInHibernate(Session session) throwsHibernateException, SQLException Query quer

14、y = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length);List list = query.list(); return list; );return list; publicintgetAllRowCount(String hql) returnthis.hibernateTemplate.find(hql).size();之后 , 完成 service 层对 Dao 层类方法的封装,便于 action 调用 User 的 service 层接口 IUserService.

15、java 关键代码如下:java view plaincopy/ 添加用户voidaddUser(User user);/ 登录验证User testLogin(User user) ;/ 得到对应页的数据信息 publicPageBeanqueryForPage(intpageSize,intcurrentPage);User的 service 层实现类 UserServiceImpl.java ,部门代码实现java view plaincopy Repository public class UserServiceImpl implements IUserService Resource

16、privateIUserDaoud;public void addUser(User user) ud.addUser(user);public ListlistUser(final int offset, finalint length) returnud.listUser(offset,length);public User testLogin(User user) returnud.testLogin(user); SuppressWarnings(unchecked) publicPageBeanqueryForPage(intpageSize, int page) final Str

17、ing hql = from User; /查询语句intallRow = this.ud.getAllRowCount(hql); / 总记录数 inttotalPage = PageBean.countTotalPage(pageSize, allRow); /final int offset = PageBean.countOffset(pageSize, page); / 录final int length = pageSize; /每页记录数finalintcurrentPage = PageBean.countCurrentPage(page);List list =this.ud

18、.queryForPage(hql, offset, length); / 记录总页数当前页开始记一页 的/ 把分页信息保存到 Bean 中 PageBeanpageBean = new PageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRow); pageBean.setTotalPage(totalPage); pageBean.setList(list); pageBean.init(); returnpageBean;接下来,主要完成 action 包下对请求的获取和采取的响应。 在这里,我只对分页信息的提取部分做简单介绍:1. 定义分页所需的属性:java view plaincopyprivate PageBeanpageBean; / 包含分布信息的 bean private int page; /第几页上面的属性中没有每页要显示的记录条数, 是因为在方法中默认显示条 数为常量。 如果你需要实现分页记录的调整时, 将此属性设为变量并编写其 get/set 方法即 可获取。2. 对页面请求调用 servi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论