java分页的工具类_用Java写一个分页的工具类-Fun言_weixin_39874196的博客-程序员秘密

技术标签: java分页的工具类  

以前做分页的时候是每个需要分页的action下面写一大串分页的代码,今天就想可不可以将分页的代码单独写一个工具类,这样就可以随用随取了,所以就做出来了,把代码分享给大家,复制到你们的项目下面就可以直接用了

问题一:为什么要用工具类?

答:在我们的开发过程中有很多重复冗余的代码,将他们写在一个类里,当需要的时候调用就好,这样就提高了效率,减少了代码的冗余,减少了代码的耦合性

问题二:分页的工具类有什么好处?

答:好处当然很多,话不多说,你们自己看

1、写工具类前String pageNum_1=null;

//获取传递的参数,因为urlrewrite所以都传给tagname了

if(tags.getTagname().indexOf("/")>0){

String[] params=tags.getTagname().split("/");

tags.setTagname(params[0]);

pageNum_1=params[1];

}

/*查找热门文章*/

//设置初始序号

int orderNum=0;

article.setOrderNum(orderNum);

//查找前十的文章

List hotArticle=articleService.findHotArticle(article);

/*分页*/

//初始页码

int pageNum=1;

//计算,当传回来的有值时

if(pageNum_1!=null){

pageNum=Integer.parseInt(pageNum_1);

}

//每页条数

int currentPage=10;

//计算后的开始条数

int startPage=(pageNum-1)*currentPage;

//计算该标签下的总条数

int totalCount=articleService.findTagsArtCount(tags);

//计算总页数

int totalPage;

if(totalCount%currentPage>0){

totalPage=(totalCount/currentPage)+1;

}else{

totalPage=totalCount/currentPage;

}

//开始页数

if(pageNum>=5){

//如果大于5则是当前页数页数减3

tags.setBegin(pageNum-2);

}else{

//如果小于5则从一开始

tags.setBegin(1);

}

//结束页数

if(pageNum>5){

if(totalPage>=pageNum){

//用switch算结束

switch(totalPage-pageNum){

case 0:tags.setEnd(pageNum);break;

case 1:tags.setEnd(pageNum+1);break;

case 2:tags.setEnd(pageNum+2);break;

case 3:tags.setEnd(pageNum+3);break;

default:tags.setEnd(pageNum+3);

}

}else{

tags.setEnd(totalPage);

}

}else{

if(totalPage>5){

//用switch算结束

switch(totalPage-5){

default:tags.setEnd(6);

}

}else{

tags.setEnd(totalPage);

}

}

tags.setStartPage(startPage);

tags.setTotalCount(totalCount);

tags.setTotalPage(totalPage);

tags.setPageNum(pageNum);

tags.setCurrentPage(currentPage);

2、写工具类后/*分页*/

//初始页码

//页面请求页码数

String pageNum_1=request.getParameter("pageNum");

//获取数据库总条数

int totalCount=articleService.findCount(article);

//设置每页条数

int currentPage=10;

Page page=new Page();

pb=page.pagetool(pageNum_1, currentPage, totalCount);

效果很明显吧,好了,下面把教程贴出来

开发过程

一、建立一个分页bean,这里有所有分页需要用到的属性/**

*

*

Title:PageBean

*

Description: 分页需要的bean

* @author 任汉东

* @date 2017年5月24日下午5:38:44

*/

public class PageBean extends User{

private int pageNum; // 页码

private int currentPage; // 每页条数

private int totalPage; // 总页数

private int totalCount; // 总条数

private int startPage;//limit开始条数

private int begin;//foreach中的begin

private int end;//foreach里的end值

public int getPageNum() {

return pageNum;

}

public void setPageNum(int pageNum) {

this.pageNum = pageNum;

}

public int getCurrentPage() {

return currentPage;

}

public void setCurrentPage(int currentPage) {

this.currentPage = currentPage;

}

public int getTotalPage() {

return totalPage;

}

public void setTotalPage(int totalPage) {

this.totalPage = totalPage;

}

public int getTotalCount() {

return totalCount;

}

public void setTotalCount(int totalCount) {

this.totalCount = totalCount;

}

public int getStartPage() {

return startPage;

}

public void setStartPage(int startPage) {

this.startPage = startPage;

}

public int getBegin() {

return begin;

}

public void setBegin(int begin) {

this.begin = begin;

}

public int getEnd() {

return end;

}

public void setEnd(int end) {

this.end = end;

}

二、建立一个分页的工具类,这里叫Page,然后在里面写一个pagetool方法供我们调用,这里我都写注释了,代码可以直接复制使用/**

*

*

Title:Page

*

Description: 分页的工具类

* @author 任汉东

* @date 2018年7月31日上午1:31:17

*/

public class Page {

//分页的方法

public PageBean pagetool(String pageNum_1,int currentPage,int totalCount){

//传入三个必要值:1、页面请求的页码,2、每页需要几条数据,3、数据库总条数

//实例化分页bean

PageBean pagebean=new PageBean();

//初始页码

int pageNum=1;

//计算,当传回来的有值时

if(pageNum_1!=null){

pageNum=Integer.parseInt(pageNum_1);

}

//每页条数

//计算后的开始条数

int startPage=(pageNum-1)*currentPage;

//总条数

//计算总页数

int totalPage;

if(totalCount%currentPage>0){

totalPage=(totalCount/currentPage)+1;

}else{

totalPage=totalCount/currentPage;

}

//开始页数具体算法

if(pageNum>=5){

//如果大于5则是当前页数页数减3

pagebean.setBegin(pageNum-2);

}else{

//如果小于5则从一开始

pagebean.setBegin(1);

}

//结束页数具体算法,这里是显示前6页,根据自己项目需求更改

if(pageNum>5){

if(totalPage>=pageNum){

//用switch算结束

switch(totalPage-pageNum){

case 0:pagebean.setEnd(pageNum);break;

case 1:pagebean.setEnd(pageNum+1);break;

case 2:pagebean.setEnd(pageNum+2);break;

case 3:pagebean.setEnd(pageNum+3);break;

default:pagebean.setEnd(pageNum+3);

}

}else{

pagebean.setEnd(totalPage);

}

}else{

if(totalPage>5){

//用switch算结束

switch(totalPage-5){

default:pagebean.setEnd(6);

}

}else{

pagebean.setEnd(totalPage);

}

}

//将前端页面需要数据set进pagebean

pagebean.setStartPage(startPage);

pagebean.setTotalCount(totalCount);

pagebean.setTotalPage(totalPage);

pagebean.setPageNum(pageNum);

pagebean.setCurrentPage(currentPage);

return pagebean;

}

三、测试,这里写了一个main方法进行测试public static void main(String[] args) {

Page page=new Page();

PageBean pagebean=new PageBean();

//这里前端请求的页码必须为string,不然无法确认是否为空

String pagenum_1="3";

pagebean=page.pagetool(pagenum_1, 10, 128);

System.out.println("开始条数:"+pagebean.getStartPage());

System.out.println("每页条数:"+pagebean.getCurrentPage());

System.out.println("总条数:"+pagebean.getTotalCount());

System.out.println("请求的页码:"+pagebean.getPageNum());

System.out.println("总页数:"+pagebean.getTotalPage());

System.out.println("foreach中begin值:"+pagebean.getBegin());

System.out.println("foreach中end值:"+pagebean.getEnd());

}

这里我们传入请求页码为第三页,每页10条数据,数据库总数据为128条,得到如下结果开始条数:20

每页条数:10

总条数:128

请求的页码:3

总页数:13

foreach中begin值:1

foreach中end值:6

四、调用分页工具类,在需要的action进行调用即可/*分页*/

//初始页码

//页面请求的页码数

String pageNum_1=request.getParameter("pageNum");

//获取数据库总条数,自行用jdbc获取

int totalCount=articleService.findCount(article);

//设置每页条数

int currentPage=10;

//实例化工具类

Page page=new Page();

//调用方法将得到的数据存到pagebean中

pb=page.pagetool(pageNum_1, currentPage, totalCount);

//。。。。。。

//。。。。

//接下来就可以用获得的数据为所欲为了。。。

五、前端调用返回数据,在这里核心是用foreach调用,都写了注释所以比较乱,具体是用就是用在后台获取的begin和end值来控制分页页码的显示,然后用if判断遍历的数值和在后台获取的当前页码是否相等,相等就高亮显示,否则不高亮显示

OK,这样就完成了对分页工具类的开发了,代码可以直接拿去用,按照我说的方法,绝对可以成功

你还没有登录,请先使用 QQ登录 或 注册!

文章评论

发表评论

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39874196/article/details/114427248

智能推荐

仿爱奇艺/腾讯视频ViewPager导航条实现_weixin_33965305的博客-程序员秘密

仿爱奇艺/腾讯视频ViewPager导航条实现,支持自定义导航条高度,宽度,颜色变化,字体大小变化。支持多种滚动模式,支持自定义每个TabView的样式。项目地址:DynamicPagerIndicator一、如何引入DynamicPagerIndicator?在module的build.gradle 添加:compile 'com.kcrason:dynamicpagerindicat...

java判断集合为空_判断一个list集合是否为空,用isEmpty 还是 null的问题???_weixin_33543395的博客-程序员秘密

展开全部isEmpty() 和e68a843231313335323631343130323136353331333431373864(list.size() == 0)都是判断List内容是否为空。null判断是判断有没有对list集合分配内存空间,而不是list里面内容是否为空。比如,new一个user对象,判断user的list内容是否为空,出现异常。这是因为,使用isEmpty()和si...

系统架构设计师_yantuguiguziPGJ的博客-程序员秘密

这是土盐的第150篇原创文章1大家好,我是土盐。周日晚上把自己看《自己动手写python虚拟机》遇到的误读点、字符错误和排版问题,整理成了word并邮箱戳给了作者海纳。海纳回复,知乎上在维...

一个蓝屏的分析-The caller is unlocking a pageable section that is not currently locked._站长杂谈的博客-程序员秘密

同事,给了一个蓝屏文件,说是不知道操作什么了引起了系统蓝屏,使用自定义分析可看到MEMORY_MANAGEMENT (1a) # Any other values for parameter 1 must be individually examined.Arguments:Arg1: 0000000000001010, The caller is unlocking a pageable section that is not currently locked. (This sectio

proguard-rules 混淆配置_yuhanghate的博客-程序员秘密

Android 工程中有时候需要混淆,减少包大小及增加反编译难度。AS中创建工程时默认创建了proguard-android.txt文件,自己如果需要增加一些第三方库需要自己在proguard-rules.txt文件中配置混淆文件。ProGuard简介      JAVA中默认使用ProGuard进行混淆。ProGuard能够对Java类中的代码进行压缩(Shrink),优

随便推点

【软考 系统架构设计师】计算机组成与体系结构④ 数据传输控制方式_计算机组成数据传输控制方式_万猫学社的博客-程序员秘密

这是一个系统架构设计师的简明教程,可以快速掌握高频考点和应试技巧,适合想要一次通关的同学!

C++ 调用libcurl POST方式发送json数据_AJ__Ethan的博客-程序员秘密

当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl。其官方网站的地址是http://curl.haxx.se/,该网站主要提供了Curl和libcurl。Curl是命令行工具,用于完成FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP的命令的请求及接收回馈。libcurl提供给开发者,用于使用C++跨平台的开发各种...

Day2鸿蒙应用开发学习总结_鸿蒙var类型_m0_49334418的博客-程序员秘密

1、let和var的异同(1)不同之处js块级作用域:使用var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。{ var x = 2; }// 这里可以使用 x 变量let 声明的变量只在 let 命令所在的代码块{}内有效,在{}之外不能访问。{ let x = 2;}// 这里不能使用 x 变量循环作用域:使用var在循环体内定义的变量可以作用于循环体内外,而使用let在循环体内定义的变量只作用于循环体内...

定位android kernel crash的方式_weixin_33859504的博客-程序员秘密

1. 将/prebuild/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gdb 拷贝到/usr/local/bin下2. 进入out/target/product/工程名xxx/obj/KERNEL_OBJ 目录,找到文件vmlinux3. 执行arm-linux-androide...

编译linux需要多核吗,[转载]【原创】Linux下安装单机多核并行lammps(附meam包)..._研究生欧阳同学呀的博客-程序员秘密

总结:Linux下安装单机并行lammps○.机器配置:1.处理器:Intel XEON × 22.主板:Intel S5500BC3.内存:金士顿4G × 64.操作系统:Redhat Enterprise 5.3 x86_64一.下载需要的源文件fftw-2.1.5.tar.gzmpich2-1.0.2p1.tar.gzlammps-1Dec10.tar.gz并以root身份(以下均在root...

Netflix混沌工程手册Part 2:混沌工程原则_weixin_34341117的博客-程序员秘密

本文翻译自Netflix工程师合著的 *Chaos Engineering*一书。这本书介绍了混沌工程的主要概念,以及如何在组织中实践这些概念和经验。也许我们开发的相关工具只适用于Netflix自身的业务和系统环境,但我们相信工具背后的原则可以更广泛地应用于其他领域。InfoQ 将就这一专题持续出稿,感兴趣的同学可以持续关注。本文略长,共计1.3万字,预计阅读时间35分钟。混沌工程原则优化复杂系统...