PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库, 例如mysql、 oracle、mariaDB、 DB2、 SQLite、Hsqldb等。
本项目在 github 的项目地址: https://github.com/pagehelper/Mybatis-PageHelper
本项目在 gitosc 的项目地址: http://git.oschina.net/free/Mybatis_PageHelper
#官网
-
地址: https://pagehelper.github.io/
-
访问
一、PageHelper
1.1、如何使用PageHelper
思路:
使用思路:
1.引入myabtis和pagehelper依赖
2.yml中配置mybatis扫描和实体类
3. 这2行代码
pageNum:当前第几页
pageNum:显示多少条数据
userList:数据库查询的数据数据列表
PageHelper.startPage(pageNum, pageSize);
sql调用方法,获得分页后的数据
PageInfo pageInfo = new PageInfo(userList), // 分页后的数据放入PageInfo,或者自己封装
最后返回一个pageInfo 对象即可,pageInfo 这个对象中只有数据一些信息,但是,没有成功失败的状态或者提示语。
真实企业中会封装一个返回对象,把pageInfo 放到对象中
第一步:添加依赖
<!--Myabtis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<!--pagehelper依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<!--数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!--提高效率lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
第二步:yml
spring:
application:
name: springboot-vue
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/vue?characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
password: root
server:
port: 8989
servlet:
context-path: /vue
#mybatis配置信息
mybatis:
configuration:
map-underscore-to-camel-case: true
#控制台日志配置 打印sql
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mappers/*.xml
type-aliases-package: com.baizhi.entity
#数据库方言
pagehelper:
helper-dialect: mysql
#控制台日志配置
logging:
pattern:
console: "[%thread] %-5level %logger{36} - %msg%n"
第三步:使用
package com.baizhi.service.impl;
import com.baizhi.dao.TUserDao;
import com.baizhi.entity.TUser;
import com.baizhi.service.TUserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* (TUser)表服务实现类
*
* @author makejava
* @since 2020-05-05 18:39:22
*/
@Service("tUserService")
public class TUserServiceImpl implements TUserService {
@Resource
private TUserDao tUserDao;
public PageInfo list(Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<TUser> userList = this.tUserDao.selectUserAll();
//如果返回前的数据 和 数据库实体 对象数据一致 采下面方式
//如果不一致,采用 PageInfo pageInfo = new PageInfo(); pageInfo.setList(shippingList);
PageInfo pageInfo = new PageInfo(userList);
return pageInfo;
}
}
可能会有循环依赖的问题
二、 mybatisplus如何使用分页
三、自定义
private void pkPageInfo(Integer pageNum, Integer pageSize, JSONArray array, JSONObject result) {
int totalPage = array.size() / pageSize + (array.size() % pageSize == 0 ? 0 : 1);
array.sort(Comparator.comparing(obj -> ((JSONObject) obj).getString("createTime")).reversed());
if (array.size() > 0) {
if (totalPage >= pageNum) {
int count = array.size();
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = (pageNum) * pageSize;
if (toIndex > count) {
toIndex = count;
}
result.put("total", array.size());
result.put("rows", array.subList(fromIndex, toIndex));
} else {
result.put("total", array.size());
array.clear();
result.put("rows", array);
}
} else {
result.put("total", 0);
array.clear();
result.put("rows", array);
}
}