实现原理很简单,就是建立一个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语句进行分页 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)