Java Web 开发中怎么进行分页

Java Web 开发中怎么进行分页,第1张

实现原理很简单,就是建立一个Page类,里面放当前访问的页数(这个是从客户浏览器传到后台的数据,所以你的分页需要用它来定位记录的条目)和每一页显示的记录行数。然后通过分页计算就可以得出下列数据。

(假定你的页数从1开始)

1、总页数 = 总记录数/每页大小,如果0!=总记录数%每页大小,那么总页数再+1

2、当前页数(从浏览器传递的参数中获得)

3、表记录的起始位置=(当前页数-1)每页大小

4、总记录数(select count() from [表名] [where [条件]],从数据库中查询得到)

5、每页大小,可以固定,也可以从页面传过来

有了这几个参数之后,就用sql语句查出对应的记录就可以了。

mysql数据库用limit 表记录的起始位置,每页大小 语句添加到你的查询语句最后面

sqlserver数据库用top语句和not in 来做

oracle数据库用rownum来做

再给你一段分页对象代码,你自己先读一下

public class Page {

private long totalCount = 0;// 总记录数

private int pageNumber = 1;// 当前页号,默认显示第一页

private int pageSize = 20; // 每页大小,默认每页20条

private int totalPage = 0;// 总页数,默认为0

private int startRow = 0;// 起始记录行号,默认为从表头开始

/

分页计算方法,由setTotalCount调用

/

public void pagination() {

// 计算总页数

if (thistotalCount % pageSize == 0)

thistotalPage = new Long(thistotalCount / pageSize)intValue();

else

thistotalPage = new Long(thistotalCount / pageSize)intValue() + 1;

// 排除错误页号

if (thispageNumber < 1)

thispageNumber = 1;

if (thispageNumber > thistotalPage)

thispageNumber = thistotalPage;

// 计算起始行号

thisstartRow = (thispageNumber - 1) thispageSize;

}

public long getTotalCount() {

return totalCount;

}

public void setTotalCount(long totalCount) {

thistotalCount = totalCount;

thispagination();

}

public int getPageNumber() {

return pageNumber;

}

public void setPageNumber(int pageNumber) {

thispageNumber = pageNumber;

}

public int getPageSize() {

return pageSize;

}

public void setPageSize(int pageSize) {

thispageSize = pageSize;

}

public int getTotalPage() {

return totalPage;

}

public void setTotalPage(int totalPage) {

thistotalPage = totalPage;

}

public int getStartRow() {

return startRow;

}

public void setStartRow(int startRow) {

thisstartRow = startRow;

}

}

createQuery("select rownum no,ID from DTVSDTVS_USER order by ID desc")setFirstResult(3)setMaxResults(2)list();

第3,4条记录

利用SQL语句分页要看你用的什么数据库。Oracle数据库可以使用ROWNUM或row_number(),例如:Select from (select ROWNUM rn, t from table t) where rn between 11 and 20;Select from (select row_number() over (ORDER BY col1) rn, t from table t) where rn between 11 and 20;SQLServer数据库可以用Top或者row_number()函数,道理同上。利用SQL分页有局限性,就是针对不同的数据库有不同的写法,所以通常会在应用程序里面做分页通用性比较强。但是对于数据量非常庞大的应用来说,还是用SQL分页比较适合。如何使用sql语句进行分页 *** 作?

在这些控件里要达到分页的效果,一般都会传2个参数,第一个是表示当前页的索 引(一般从0开始),第二个表示当前页展示多少条业务记录,然后将相应的参数传递给List<T> getList(PagenateArgs args)方法,最终实现数据库中的分页时候可以使用limit关键词(针对mysql)进行分页,如果是oracle或者sql server他们都有自带的rownum函数可以使用。

针对上述思路,首先在 demomybatismodel下面新建一个名为PagenateArgs的分页参数实体类与一个名为SortDirectionEnum的枚举 类,里面包含当前页面索引pageIndex, 当前页展示业务记录数pageSize, pageStart属性表示从第几条开始,(pageStart=pageIndexpageSize)因为limit关键词用法是表示limit 起始条数(不包含),取几条,orderFieldStr排序字段,orderDirectionStr 排序方向,所以具体创建如下:

package davidmybatismodel;

/

分页参数实体类

/

public class PagenateArgs {

private int pageIndex;

private int pageSize;

private int pageStart;

private String orderFieldStr;

private String orderDirectionStr;

public PagenateArgs() {

// TODO Auto-generated constructor stub

}

public PagenateArgs(int pageIndex, int pageSize, String orderFieldStr, String orderDirectionStr) {

thispageIndex = pageIndex;

thispageSize = pageSize;

thisorderFieldStr = orderFieldStr;

thisorderDirectionStr = orderDirectionStr;

pageStart = pageIndex pageSize;

}

public int getPageIndex() {

return pageIndex;

}

//首先按字符个数排序,然后按相对应的字符大小排序

function mySort(list){

var len=0;

var add="";

for(var i=0;i<listlength;i++){

var str=list[i];

if(strlength>len){

len=strlength;

}

}

for(var i=0;i<len;i++){

add+="0"

}

for(var i=0;i<listlength;i++){

var strOne=add+list[i];

list[i]=strOnesubstring(strOnelength-len);

}

listsort();

}

1使用T_BASE_PROVINCE表作为测试演示使用

2查询下总共数据量selectcount()fromT_BASE_PROVINCE,在分页的时候,一般会显示总页数,需要先查询总数据量得到总页数,总页数=总量/每页显示记录数。

3前面的测试数据初始化完成之后,查询前20条大概有什么样的数据。

4含orderby排序,多一层嵌套,因为orderby在select之后执行,不在里面写的话可能会出现不是预期的排序结果。

如以上回答未能解决问题请看:

一种是利用相反的。

使用minus,即中文的意思就是减去。

一种是利用Oracle的rownum,这个是Oracle查询自动返回的序号,一般不显示,但是可以通过selectrownumfrom[表名],可以看到,是从1到当前的记录总数。  

select from (select ROWNUM r,t from student t

修改为

select from student

)student

<![CDATA[

where r > #current# and r <=#next#

order by id

修改为

<![CDATA[

order by id

LIMIT #current# , 每页多少行

注1: LIMIT 接受一个或两个数字参数。

参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)

也就是如果你是 每页 20 行的话。

就直接

LIMIT #current# , 20 吧

注2: 因为那个 第一个 初始记录行的偏移量是 0(而不是 1)

而我又不能

LIMIT #current# - 1, 20

因此你外部程序, 传参数的时候, 要自己 - 1 了, 再传进来。

以上就是关于Java Web 开发中怎么进行分页全部的内容,包括:Java Web 开发中怎么进行分页、hql rownum分页、如何使用sql语句进行分页 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9701853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存