博客
关于我
java分页工具集合
阅读量:755 次
发布时间:2019-03-22

本文共 6021 字,大约阅读时间需要 20 分钟。

Java分页工具集合

一、PageHelper

1. pom引入

在Spring Boot项目中新建,添加PageHelper的依赖:

com.github.pagehelper
pagehelper-spring-boot-starter
1.2.10

2.配置

修改application.yml

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/test1?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT+8    password: 123    username: root    type: com.alibaba.druid.pool.DruidDataSource    initialSize: 5    minIdle: 5    maxActive: 20    maxWait: 60000    timeBetweenEvictionRunsMillis: 60000    minEvictableIdleTimeMillis: 300000    validationQuery: SELECT 1 FROM DUAL    testWhileIdle: true    testOnBorrow: false    testOnReturn: false    poolPreparedStatements: true    filters: stat, wall, log4j    maxPoolPreparedStatementPerConnectionSize: 20    useGlobalDataSourceStat: true    connectionProperties: druid.stat.mergeSql=true; druid.stat.slowSqlMillis=500mybatis:  mapper-locations: classpath*:mapper/**/*.xmlpagehelper:  helperDialect: mysql  reasonable: true  supportMethodsArguments: true  pageSizeZero: false  params: count=countSql

3.使用

正确使用代码示例:

@Overridepublic PageInfo
pageQuery() { PageHelper.startPage(1, 5); List
list = userMapper.queryAll(); PageInfo
userPageInfo = new PageInfo<>(list); return userPageInfo;}

注意事项:

  • SQL语句不能以分号结尾。
  • PageHelper只适用于MyBatis框架。

错误示例:

@Overridepublic PageInfo
pageQuery() { List
list = userMapper.queryAll(); PageHelper.startPage(1, 5); PageInfo
userPageInfo = new PageInfo<>(list);}

分页失败,需确保分页参数在Mapper查询之前设置。

二、MyBatis-Plus的分页插件

1. pom引入

在Spring Boot项目中添加所需依赖:

com.baomidou
mybatis-plus-boot-starter
3.4.0

2.配置

创建MybatisPlusConfig

import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@MapperScan("com.zsc.mapper")@Configurationpublic class MybatisPlusConfig {    @Bean    public PaginationInterceptor paginationInterceptor() {        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));        return paginationInterceptor;    }}

修改application.yml

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/test1?userSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT+8    password: 123    username: root    type: com.alibaba.druid.pool.DruidDataSource    initialSize: 5    minIdle: 5    maxActive: 20    maxWait: 60000    timeBetweenEvictionRunsMillis: 60000    minEvictableIdleTimeMillis: 300000    validationQuery: SELECT 1 FROM DUAL    testWhileIdle: true    testOnBorrow: false    testOnReturn: false    poolPreparedStatements: true    filters: stat, wall, log4j    maxPoolPreparedStatementPerConnectionSize: 20    useGlobalDataSourceStat: true    connectionProperties: druid.stat.mergeSql=true; druid.stat.slowSqlMillis=500mybatis-plus:  mapper-locations: classpath*:mapper/**/*.xml

3.使用

代码示例:

@Overridepublic Page
pageQuery() { Page
userPage = new Page<>(1, 5); QueryWrapper
userQueryWrapper = new QueryWrapper<>(); userQueryWrapper.like("name", "zs"); Page
page = userMapper.selectPage(userPage, userQueryWrapper); return page;}

注意事项:

  • 使用MyBatis-Plus的分页插件,默认支持自动COUNT查询。
  • 开启分页插件时,可结合PageInfoPage对象获取分页数据。

三、自定义工具类

创建PageUtil类,适用于快速开发或独立项目:

package com.zsc.utils;import java.util.ArrayList;import java.util.List;public class PageUtil {    private List myList;    private int pageNum = 1;    private int pageSize = 10;    private List data;    private int pageCount;    private int recordCount;    public boolean isHasPrePage() { return isHasPrePage; }    public void setHasPrePage(boolean hasPrePage) { isHasPrePage = hasPrePage; }    public boolean isHasNextPage() { return isHasNextPage; }    public void setHasNextPage(boolean hasNextPage) { isHasNextPage = hasNextPage; }    private int prePageIndex;    private int nextPageIndex;    private boolean firstPage;    private boolean lastPage;    private boolean isHasPrePage;    public PageUtil(List myList) {        this.myList = myList;        recordCount = myList.size();        pageCount = recordCount % pageSize == 0 ? recordCount / pageSize : (recordCount / pageSize) + 1;        isHasPrePage = pageNum == 1 ? false : true;        isHasNextPage = pageNum == pageCount ? false : true;        prePageIndex = pageNum - 1;        nextPageIndex = pageNum + 1;        firstPage = (pageNum == 1);        lastPage = (pageNum == pageCount);        data = new ArrayList<>();        for (int i = 0; i < recordCount; i++) {            if (i < (pageNum - 1) * pageSize || i >= (pageNum * pageSize)) {                data.add(myList.get(i));            }        }    }    public void setPageNum(int pageNum) {        this.pageNum = pageNum;        prePageIndex = pageNum - 1;        nextPageIndex = pageNum + 1;        firstPage = (pageNum == 1);        lastPage = (pageNum == pageCount);    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;        pageCount = (recordCount % pageSize == 0) ? (recordCount / pageSize) : (recordCount / pageSize + 1);    }    public List getData() { return data; }    public static void main(String[] args) {        List
listString = new ArrayList<>(); for (int i = 0; i < 36; i++) { listString.add("hello" + i); } PageUtil pageUtil = new PageUtil(listString); pageUtil.setPageSize(4); List
list = pageUtil.setMyList(listString); System.out.println(list); }}

使用示例:

List
list = PageService.listString();PageUtil pageUtil = new PageUtil(list);pageUtil.setPageNum(1);pageUtil.setPageSize(4);List
result = pageUtil.setMyList(list);System.out.println("分页结果:" + result);

转载地址:http://momwk.baihongyu.com/

你可能感兴趣的文章
python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
查看>>
python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>
Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
查看>>
python 图片转ico
查看>>
python 图片转文字、语音转文字、文字转语音保存音频并朗读
查看>>
python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
查看>>
Python 在并行进程之间共享字典
查看>>
Python 垃圾收集器文档
查看>>
python 基于 wordcloud + jieba + matplotlib 生成词云
查看>>
python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
查看>>
Python编程:Tkinter图形界面设计(2)
查看>>
Python 基础 - Day 5 Learning Note - 模块 之 标准库:time (1)
查看>>
Python 基础一
查看>>
python 基础操作知识整理总结
查看>>
Python 基础知识点整理与分享,期盼你的交流!
查看>>
python 基础第七篇
查看>>
Python编程:Tkinter图形界面设计(1)
查看>>
Python 基础语法:None
查看>>
Python 基础语法:基本数据类型(一)
查看>>