SpringBoot整合MyBatis四种常用的分页方式(详细总结)

一、准备工作

1. 创建表结构

CREATE TABLE `order_info`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `time` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2. 导入表数据

INSERT INTO `order_info` VALUES (1, '购买了手机', '2022-08-25 05:34:17');
INSERT INTO `order_info` VALUES (2, '购买了电脑', '2022-08-25 07:30:39');
INSERT INTO `order_info` VALUES (3, '购买了护手霜', '2022-08-17 22:35:07');
INSERT INTO `order_info` VALUES (4, '购买了泡面', '2022-08-23 08:35:36');
INSERT INTO `order_info` VALUES (5, '购买了纸巾', '2022-07-21 15:26:06');
INSERT INTO `order_info` VALUES (6, '购买了自热米饭', '2021-06-20 13:21:06');
INSERT INTO `order_info` VALUES (7, '购买了移动硬盘', '2022-06-11 11:22:03');
INSERT INTO `order_info` VALUES (8, '购买了狗粮', '2022-05-10 11:21:02');
INSERT INTO `order_info` VALUES (9, '购买了猫粮', '2022-04-10 09:11:02');
INSERT INTO `order_info` VALUES (10, '购买了遥控器', '2022-08-22 22:35:07');
INSERT INTO `order_info` VALUES (11, '购买了裤子', '2022-08-15 08:35:36');
INSERT INTO `order_info` VALUES (12, '购买了鞋子', '2022-08-21 08:35:36');
INSERT INTO `order_info` VALUES (13, '购买了水杯', '2022-08-26 19:39:19');

3. 导入pom.xml依赖

创建新的工程的步骤我这里就省略了,所以废话不多说,直接进入正题!

注:请不要重复导入MyBatis的依赖,这里为了方便展示写到一起了,实际运用的时候,请不要混合在一起导入,不然可能会导致jar包的冲突,PageHelper和MyBatis-plus的jar包可能会产生冲突的。

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
 
        <!--Mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
 
        <!--PageHelper依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.3</version>
        </dependency>
 
        <!--Mybatis-Plus依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
    </dependencies>

4. 配置application.yml文件

server:
  port: 8080
 
spring:
  datasource:
    username: 你的mysql用户名
    password: 你的mysql密码
    url: jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
 
mybatis:
  mapper-locations: classpath:mapping/*.xml

5. 创建公用的实体类

package com.ithuang.demo.bean;
 
import java.util.Date;
 
 
public class OrderInfo {
 
    private int id;
    private String info;
    private Date time;
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getInfo() {
        return info;
    }
 
    public void setInfo(String info) {
        this.info = info;
    }
 
    public Date getTime() {
        return time;
    }
 
    public void setTime(Date time) {
        this.time = time;
    }
 
    @Override
    public String toString() {
        return "OrderInfo{" +
                "id=" + id +
                ", info='" + info + '\'' +
                ", time=" + time +
                '}';
    }
 
 
}

二、使用原生Limit关键字进行分页

1. 项目整体结构

​ 

2. 创建controller层

package com.ithuang.demo.controller;
 
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.service.OrderInfoService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.util.List;
 
@RestController
public class OrderInfoController {
 
    @Resource
    private OrderInfoService orderInfoService;
 
    @GetMapping("/getOrderInfoList")
    public List<OrderInfo> getOrderInfoList(@RequestParam(value = "pageNow",defaultValue = "1") int pageNow,
                                            @RequestParam(value = "pageSize",defaultValue = "3") int pageSize){
 
        return orderInfoService.getOrderInfoList(pageNow,pageSize);
    }
}

3. 创建service层 

package com.ithuang.demo.service;
 
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.mapper.OrderInfoMapper;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
 
@Service
public class OrderInfoService {
 
    @Resource
    private OrderInfoMapper orderInfoMapper;
 
    public List<OrderInfo> getOrderInfoList(int pageNow, int pageSize) {
        if(pageNow == 1){
            pageNow = 0;
        }
        return orderInfoMapper.getOrderInfoList(pageNow,pageSize);
    }
}

4. 创建mapper层 

package com.ithuang.demo.mapper;
 
import com.ithuang.demo.bean.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
 
import java.util.List;
 
@Mapper
public interface OrderInfoMapper {
 
    List<OrderInfo> getOrderInfoList(@Param("pageNow") int pageNow,@Param("pageSize") int pageSize);
}

5. 创建xml文件 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ithuang.demo.mapper.OrderInfoMapper">
    <select id="getOrderInfoList" parameterType="int" resultType="com.ithuang.demo.bean.OrderInfo">
        SELECT * FROM order_info limit #{pageNow},#{pageSize}
    </select>
</mapper>

6. 使用postman进行测试,测试结果如下

三、借助MyBatis提供的第三方PageHelper分页插件1

        在MyBatis中配置了分页拦截器(PageInterceptor),就是在执行相关的Sql之前会做一些拦截的操作,这里通过调用startPage的方法,其实就是在查询getOrderInfoList之前会自动加上limit;这里通过setLocalPage方法,将分页信息保存在当前之后线程当中,查询方法与之处于同一个线程,共享ThreadLocal当中的数据,最后将getOrderInfoList查询好的数据结果放到PageInfo当中即可。

扩展:PageHelper.startPage(int PageNum,int PageSize):用来设置页面的位置和展示的数据条目数,我们设置每页展示5条数据。PageInfo用来封装页面信息,返回给前台界面。PageInfo中的一些我们需要用到的参数如下表:

PageInfo.list结果集
PageInfo.pageNum当前页码
PageInfo.pageSize当前页面显示的数据条目
PageInfo.pages总页数
PageInfo.total数据的总条目数
PageInfo.prePage上一页
PageInfo.nextPage下一页
PageInfo.isFirstPage是否为第一页
PageInfo.isLastPage是否为最后一页
PageInfo.hasPreviousPage是否有上一页
PageHelper.hasNextPage是否有下一页

(1)引入pom.xml

<!-- 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

(2)打开application.properties,添加如下几行配置信息

#分页插件
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true

1. 项目整体结构

2. 创建controller层

Mapper文件中, SQL不用增加 limit分页指令,需要什么直接查就可以,Pagehelper 可以自动实现分页!

package com.ithuang.demo.controller;
 
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.service.OrderInfoService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.util.List;
 
@RestController
public class OrderInfoController {
 
    @Resource
    private OrderInfoService orderInfoService;
 
    @GetMapping("/getOrderInfoList")
    public List<OrderInfo> getOrderInfoList(@RequestParam(value = "pageNow",defaultValue = "1") int pageNow,
                                            @RequestParam(value = "pageSize",defaultValue = "3") int pageSize){
 
        return orderInfoService.getOrderInfoList(pageNow,pageSize);
    }
}

2. 创建Service层

package com.ithuang.demo.service;
 
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.mapper.OrderInfoMapper;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
 
@Service
public class OrderInfoService {
 
    @Resource
    private OrderInfoMapper orderInfoMapper;
 
    public List<OrderInfo> getOrderInfoList(int pageNow, int pageSize) {
        PageHelper.startPage(pageNow,pageSize);
        List<OrderInfo> orderInfoList = orderInfoMapper.getOrderInfoList();
        PageInfo<OrderInfo> userPageInfo = new PageInfo<>(orderInfoList);
        return userPageInfo.getList();
    }
}

3. 创建Mapper层

package com.ithuang.demo.mapper;
 
import com.ithuang.demo.bean.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
 
import java.util.List;
 
@Mapper
public interface OrderInfoMapper {
 
    List<OrderInfo> getOrderInfoList();
}

5. 编写xml文件 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ithuang.demo.mapper.OrderInfoMapper">
    <select id="getOrderInfoList" parameterType="int" resultType="com.ithuang.demo.bean.OrderInfo">
        SELECT * FROM order_info
    </select>
</mapper>

6. 使用postman进行测试,测试结果如下 

三、借助MyBatis提供的第三方PageHelper分页插件2 

1. 依赖pom.xml

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
</dependency>

2. 配置application.properties

#分页插件
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true

3. 实现分页功能

①首页超链接

<a th:href="@{/get/page/1}">显示分页数据</a>

②controller方法

@RequestMapping("/get/page/{pageNo}")
public String getPage(
        @PathVariable("pageNo") Integer pageNo, 
        Model model) {
 
    // PageInfo 对象封装了和分页相关的所有信息
    PageInfo<Emp> pageInfo = empService.getPageInfo(pageNo);
    
    // 将 PageInfo 对象存入模型
    model.addAttribute("pageInfo", pageInfo);
    
    return "emp-page";
}

③service 方法

@Override
public PageInfo<Emp> getPageInfo(Integer pageNo) {
 
    // 1、确定每页显示数据的条数
    int pageSize = 5;
 
    // 2、设定分页数据:开启分页功能。开启后,后面执行的 SELECT 语句会自动被附加 LIMIT 子句,
    // 而且会自动查询总记录数
    PageHelper.startPage(pageNo, pageSize);
 
    // 3、正常执行查询
    List<Emp> empList = empMapper.selectAll();
 
    // 4、封装为 PageInfo 对象返回
    return new PageInfo<>(empList);
}

④页面展示

<tr>
    <td colspan="5">
 
        <span th:each="targetNum : ${pageInfo.navigatepageNums}">
 
            <!-- 不是当前页显示为超链接 -->
            <a th:if="${targetNum != pageInfo.pageNum}"
               th:href="@{/employee/page/}+${targetNum}"
               th:text="'['+${targetNum}+']'">目标页面的页码</a>
 
            <!-- 是当前页不需要显示为超链接 -->
            <span th:if="${targetNum == pageInfo.pageNum}" th:text="'['+${targetNum}+']'">当前页页码</span>
 
        </span>
    </td>
</tr>
<tr>
    <td colspan="5">
        <span th:if="${pageInfo.hasPreviousPage}">
            <a th:href="@{/employee/page/1}">首页</a>
            <a th:href="@{/employee/page/}+${pageInfo.prePage}">上一页</a>
        </span>
 
        [[${pageInfo.pageNum}]]/[[${pageInfo.pages}]]
        [[${pageInfo.pageNum}+'/'+${pageInfo.pages}]]
 
        <span th:if="${pageInfo.hasNextPage}">
            <a th:href="@{/employee/page/}+${pageInfo.nextPage}">下一页</a>
            <a th:href="@{/employee/page/}+${pageInfo.pages}">末页</a>
        </span>
    </td>
</tr>
<tr>
    <td colspan="5">
        <!-- 绑定值改变事件响应函数 -->
        <input id="jumpToPageNumInput" type="text" name="jumpToPageNum" placeholder="请输入您想直接跳转的页码" />
    </td>
</tr>

四、借助MyBatis-Plus拦截器进行分页查询

1. 项目整体结构

2. 编写主配置类

package com.ithuang.demo.config;
 
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class MybatisPlusConfig {
 
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

3. 创建controller层

package com.ithuang.demo.controller;
 
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.service.OrderInfoService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.util.List;
 
@RestController
public class OrderInfoController {
 
    @Resource
    private OrderInfoService orderInfoService;
 
    @GetMapping("/getOrderInfoList")
    public List<OrderInfo> getOrderInfoList(@RequestParam(value = "pageNow",defaultValue = "1") int pageNow,
                                            @RequestParam(value = "pageSize",defaultValue = "3") int pageSize){
 
        return orderInfoService.getOrderInfoList(pageNow,pageSize);
    }
}

4. 创建Service层

package com.ithuang.demo.service;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.mapper.OrderInfoMapper;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
 
@Service
public class OrderInfoService {
 
    @Resource
    private OrderInfoMapper orderInfoMapper;
 
    public List<OrderInfo> getOrderInfoList(int pageNow, int pageSize) {
        Page<OrderInfo> page= new Page<>(pageNow,pageSize);
        IPage<OrderInfo> iPage = orderInfoMapper.selectPage(page,null);
        return iPage.getRecords();
    }
}

5. 创建Mapper层

package com.ithuang.demo.mapper;
 
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ithuang.demo.bean.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
 
 
@Mapper
public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
 
}

6. 使用postman进行测试,测试结果如下 

五、借助MyBabtis提供的RowBounds进行分页查询

RowBounds它是在SQL执行的结果进行截取分页的,所以不适合大量数据的截取和分页,它适合在查询较少的结果集当中使用。

1. 项目整体结构

​ 

2. 创建controller层

package com.ithuang.demo.controller;
 
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.service.OrderInfoService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import java.util.List;
 
@RestController
public class OrderInfoController {
 
    @Resource
    private OrderInfoService orderInfoService;
 
    @GetMapping("/getOrderInfoList")
    public List<OrderInfo> getOrderInfoList(@RequestParam(value = "pageNow",defaultValue = "1") int pageNow,
                                            @RequestParam(value = "pageSize",defaultValue = "3") int pageSize){
 
        return orderInfoService.getOrderInfoList(pageNow,pageSize);
    }
}

3. 创建Service层

package com.ithuang.demo.service;
 
import com.ithuang.demo.bean.OrderInfo;
import com.ithuang.demo.mapper.OrderInfoMapper;
import org.apache.ibatis.session.RowBounds;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.util.List;
 
@Service
public class OrderInfoService {
 
    @Resource
    private OrderInfoMapper orderInfoMapper;
 
    public List<OrderInfo> getOrderInfoList(int pageNow, int pageSize) {
        RowBounds rowBounds = new RowBounds(pageNow,pageSize);
        return orderInfoMapper.getOrderInfoList(rowBounds);
    }
}

4. 创建Mapper层

package com.ithuang.demo.mapper;
 
import com.ithuang.demo.bean.OrderInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.session.RowBounds;
 
import java.util.List;
 
@Mapper
public interface OrderInfoMapper {
 
    List<OrderInfo> getOrderInfoList(RowBounds rowBounds);
}

5. 创建xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ithuang.demo.mapper.OrderInfoMapper">
    <select id="getOrderInfoList" resultType="com.ithuang.demo.bean.OrderInfo">
        SELECT * FROM order_info
    </select>
</mapper>

6. 使用postman进行测试,测试结果如下 

# Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper ## 项目依赖 ```xml <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--pagehelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> ``` ## Spring DevTools 配置 在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。 同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。 DevTools 默认会对 IDE 中引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。 在 `src/main/resources` 中创建 META-INF 目录,在此目录下添加 spring-devtools.properties 配置,内容如下: ```properties restart.include.mapper=/mapper-[\\w-\\.]+jar restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar ``` 使用这个配置后,就会使用 restart 类加载加载 include 进去的 jar 包。 ## 集成 MyBatis Generator 通过 Maven 插件集成的,所以运行插件使用下面的命令: >mvn mybatis-generator:generate Mybatis Geneator 详解: >http://blog.csdn.net/isea533/article/details/42102297 ## application.properties 配置 ```properties #mybatis mybatis.type-aliases-package=tk.mybatis.springboot.model mybatis.mapper-locations=classpath:mapper/*.xml #mapper #mappers 多个接口时逗号隔开 mapper.mappers=tk.mybatis.springboot.util.MyMapper mapper.not-empty=false mapper.identity=MYSQL #pagehelper pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ``` ## application.yml 配置 完整配置可以参考 [src/main/resources/application-old.yml](https://github.com/abel533/MyBatis-Spring-Boot/blob/master/src/main/resources/application-old.yml) ,和 MyBatis 相关的部分配置如下: ```yaml mybatis: type-aliases-package: tk.mybatis.springboot.model mapper-locations: classpath:mapper/*.xml mapper: mappers: - tk.mybatis.springboot.util.MyMapper not-empty: false identity: MYSQL pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql ``` 注意 mapper 配置,因为参数名固定,所以接收参数使用的对象,按照 Spring Boot 配置规则,大写字母都变了带横线的小写字母。针对如 IDENTITY(对应i-d-e-n-t-i-t-y)提供了全小写的 identity 配置,如果 IDE 能自动提示,看自动提示即可。 ## SSM集成的基础项目 >https://github.com/abel533/Mybatis-Spring ## MyBatis工具 http://www.mybatis.tk - 推荐使用 Mybatis 通用 Mapper3 https://github.com/abel533/Mapper - 推荐使用 Mybatis 分页插件 PageHelper https://github.com/pagehelper/Mybatis-PageHelper ## 作者信息 - 作者博客:http://blog.csdn.net/isea533 - 作者邮箱:abel533@gmail.com
以下是一个使用Spring BootMyBatis-Plus进行分页查询的简单示例,包括前端HTML和JS代码。 在后端,我们需要定义一个Controller来接收前端的分页请求并返回分页结果。这里使用了MyBatis-Plus提供的Page类来实现分页查询。在前端,我们使用jQuery和Bootstrap来实现分页功能。 后端代码: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/list") public Page<User> listUsers(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { Page<User> users = userService.listUsers(page, size); return users; } } ``` UserService中的listUsers方法调用了MyBatis-Plus提供的PageHelper类进行分页查询: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public Page<User> listUsers(int page, int size) { Page<User> pager = new Page<>(page, size); QueryWrapper<User> wrapper = new QueryWrapper<>(); return userMapper.selectPage(pager, wrapper); } } ``` 前端代码: ```html <div class="container"> <h1>User List</h1> <table class="table table-striped"> <thead> <tr> <th>ID</th> <th>Name</th> <th>Email</th> </tr> </thead> <tbody id="user-list"> </tbody> </table> <ul class="pagination"> <li class="page-item" id="prev-page"> <a class="page-link" href="#">Previous</a> </li> <li class="page-item active" id="page-1"> <a class="page-link" href="#">1</a> </li> <li class="page-item" id="next-page"> <a class="page-link" href="#">Next</a> </li> </ul> </div> ``` ```javascript $(function () { var currentPage = 1; function loadUsers(page) { $.get('/users/list?page=' + page + '&size=10', function (data) { var userList = $('#user-list'); userList.empty(); for (var i = 0; i < data.records.length; i++) { var user = data.records[i]; userList.append('<tr><td>' + user.id + '</td><td>' + user.name + '</td><td>' + user.email + '</td></tr>'); } currentPage = data.current; updatePagination(data.pages); }); } function updatePagination(totalPages) { var pagination = $('.pagination'); var prevPage = $('#prev-page'); var nextPage = $('#next-page'); pagination.find('.page-item').remove(); pagination.append(prevPage); for (var i = 1; i <= totalPages; i++) { var pageItem = $('<li class="page-item" id="page-' + i + '"><a class="page-link" href="#">' + i + '</a></li>'); if (i === currentPage) { pageItem.addClass('active'); } pagination.append(pageItem); } pagination.append(nextPage); prevPage.toggleClass('disabled', currentPage === 1); nextPage.toggleClass('disabled', currentPage === totalPages); } loadUsers(currentPage); $('.pagination').on('click', 'a', function (event) { event.preventDefault(); var pageLink = $(this); if (pageLink.parent().hasClass('disabled') || pageLink.parent().hasClass('active')) { return; } var page = parseInt(pageLink.text()); if (isNaN(page)) { if (pageLink.parent().attr('id') === 'prev-page') { page = currentPage - 1; } else { page = currentPage + 1; } } loadUsers(page); }); }); ``` 在这个示例中,我们使用了Bootstrap的分页样式,将分页结果显示为表格。在页面加载时,我们调用loadUsers函数来加载第一页的用户数据,同时更新分页条。当用户点击分页条上的按钮时,我们使用jQuery的事件处理函数来加载相应页面的数据。在加载数据时,我们向后端发送一个GET请求,带有当前页码和每页大小的参数,后端返回一个Page对象,其中包含了当前页码、总页数和页码对应的数据。我们在回调函数中遍历数据并将其添加到表格中,同时更新分页条。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书启秋枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值