关于Struts+Hibernate分页的问题,从四个方面阐述。包括在在Struts中分页有两种结构、Hibernate查询等。


在进行web运用开发的时分常常要进行分页处理,常常看到一些人在问分页处理的问题,现在我把自己的处理办法写在这儿,期望能对需求进行分页处理的朋友有所协助。

关于Struts+Hibernate分页的问题(hibernate分页怎么实现)  struts hibernate 分页 第1张

一、在Struts中分页有两种结构:

1. 在Action中经过DAO查询出一切的记载,然后加到session或request目标中,传到客户端,由JSP进行分页。这种办法关于在数据量少的时分很便利,也不影响速度。

2.在Action中每次经过DAO只查询出一页的记载,再传给JSP页面。这种结构关于数据量大的程序很好,但关于数据量小的状况,会增加对服务器的恳求,加大服务器的负载。

二、Hibernate查询

因为在Hibernate中直接供给了对数据库定点定量的查询办法,所以我选用的是第2种办法。

如:从第1万条开端取出100条记载

   Query q = session.createQuery("from Cat as c");

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();


三、详细完成

1.Pager类

  package com.jpcf.db.helper;
import java.math.*;
public class Pager {
private int totalRows; //总行数
private int pageSize = 10; //每页显现的行数
private int currentPage; //当时页号
private int totalPages; //总页数
private int startRow; //当时页在数据库中的起始行
public Pager() {
}
public Pager(int _totalRows) {
totalRows = _totalRows;
totalPages=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod>0){
totalPages++;
}
currentPage = 1;
startRow = 0;
}
public int getStartRow() {
return startRow;
}
public int getTotalPages() {
return totalPages;
}
public int getCurrentPage() {
return currentPage;
}

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();0

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();1

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();2

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();3

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();4

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();5

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();6

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();7

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();8

q.setFirstResult(10000);
q.setMaxResults(100);
List l = q.list();9
  package com.jpcf.db.helper;0
  package com.jpcf.db.helper;1


Pager类用于核算主页、前一页、下一页、尾页的在数据库中的起始行,当时的页码。

2.PagerHelp类

    package com.jpcf.db.helper;
  package com.jpcf.db.helper;3
  package com.jpcf.db.helper;4
  package com.jpcf.db.helper;5

//界说pager目标,用于传到页面
  package com.jpcf.db.helper;6


//从Request目标中获取当时页号

  package com.jpcf.db.helper;7


//假如当时页号为空,表明为***查询该页
//假如不为空,则改写pager目标,输入当时页号等信息

  package com.jpcf.db.helper;8


//获取当时履行的办法,主页,前一页,后一页,尾页。

  package com.jpcf.db.helper;9
import java.math.*;0


PageHelper这个类,我不用说应该也知道用来干嘛了

3.DAO类

import java.math.*;1
import java.math.*;2
import java.math.*;3
import java.math.*;4
import java.math.*;5
import java.math.*;6
import java.math.*;7


DAO类我就贴这些分页需求的代码了。
“from VehicleProperty vp”也能够用一个参数传进来,有爱好的自己改一下吧

4.Action

下面是在Action中用到的代码:

import java.math.*;8


Collection clInfos = null;//用于输出到页面的记载调集

int totalRows;//记载总行数

import java.math.*;9


//获得当时表中的总行数

    try {
totalRows = vehicleDAO.getRows("select count(*) from VehicleProperty");
import java.math.*;7 catch (Exception ex) {
servlet.log(ex.toString());
return actionMapping.findForward(Constants.FAILURE);
import java.math.*;7


//经过PagerHelper类来获取用于输出到页面的pager目标

public class Pager {
private int totalRows; //总行数
private int pageSize = 10; //每页显现的行数
private int currentPage; //当时页号
private int totalPages; //总页数
private int startRow; //当时页在数据库中的起始行1

//取出从startRow开端的pageSize行记载

    try {
clInfos = vehicleDAO.findWithPage(pager.getPageSize(), pager.getStartRow());
import java.math.*;7 catch (Exception ex) {
servlet.log(ex.toString());
return actionMapping.findForward(Constants.FAILURE);
import java.math.*;7


//把输出的记载集和pager目标保存到request目标中

public class Pager {
private int totalRows; //总行数
private int pageSize = 10; //每页显现的行数
private int currentPage; //当时页号
private int totalPages; //总页数
private int startRow; //当时页在数据库中的起始行3

return actionMapping.findForward(Constants.SUCCESS);
import java.math.*;7


查询句子select count(*) from VehicleProperty 也能够换成你需求的恣意的条件(select count(*) from VehicleProperty where ..)

5.JSP页面运用

下面就是在JSP中的运用了:

public class Pager {
private int totalRows; //总行数
private int pageSize = 10; //每页显现的行数
private int currentPage; //当时页号
private int totalPages; //总页数
private int startRow; //当时页在数据库中的起始行4

解释一下这一行:"/bussiness/clInfo/queryWithPage.do?method=queryWithPage&pageMethod=first
method=queryWithPage 是因为我的Action承继的是DispatchAction,需求一个method参数
pageMethod=first 是用来在PageHelper类中判别履行哪个操作

四、总结

我做的这个也仅仅一个学习,还有许多没有完成的,比方还能够加一下 go 直接到第n页的功用。

其实最要害的是把当时页号和要履行的是功用(上一页,下一页)的参数从页面传进来,在Action中就能够依据这两个参数去取下一个页面上要显现的记载集了。

【修改引荐】

  1. OpenCore: OSGi上布置Hibernate的四种办法
  2. Hibernate单元测试的办法HSQLDB胪陈
  3. 解析Hibernate的批量删去功用
  4. 层层解析Hibernate中的业务的乱用
转载请说明出处
知优网 » 关于Struts+Hibernate分页的问题(hibernate分页怎么实现)

发表评论

您需要后才能发表评论