Java后端最简单的分页查询
前言:学了mysql后,我们知道limit的使用方法,可以按照自己规定索引处开始并且查出自己需要的记录。
1.回顾一下limit的使用
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
limit子句可以被用于指定 select语句返回的记录数。我们要关注一下 几点:
-
第一个参数指定第一个返回记录行的偏移量
-
第二个参数指定返回记录行的最大数目
-
如果只给定一个参数:它表示返回最大的记录行数目
-
第二个参数为 -1 表示检索从某一个偏移量到记录集的结束所有的记录行
初始记录行的偏移量是 0(而不是 1)
2.简单使用操作
这里我来个简单的例子,主要带着看一下我们如何使用这种最简单的分页方法,这里需要说一下,这种分页只是最简单的方法,而且只适合数据量不大的。分页查询有很多方法的,后面可以更新其他的方法。那现在我主要用MyBatis+SpringBoot+MySql来做个小demo。
-
domain中的实体类编写
public class OrderPO implements Serializable { /** * 主键id */ private Integer id; /** * 购买人 */ private String purchaser; /** * 订单时间 */ private String orderTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getPurchaser() { return purchaser; } public void setPurchaser(String purchaser) { this.purchaser = purchaser; } public String getOrderTime() { return orderTime; } public void setOrderTime(String orderTime) { this.orderTime = orderTime; } @Override public String toString() { return "OrderPO{" + "id=" + id + ", purchaser='" + purchaser + '\'' + ", orderTime='" + orderTime + '\'' + '}'; } }
-
dao中的接口编写
@Mapper public interface OrderMapper { /** * 订单分页查询 */ List<OrderPO> findOrderByPage(Map<String,Integer> map); }
-
对应的xml文件中的sql编写
<?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.wang.order.dao.OrderMapper"> <!-- 分页查询 --> <select id="findOrderByPage" parameterType="map" resultMap="allOrder"> select * from `order` limit #{startIndex},#{pageSize} </select> <resultMap id="allOrder" type="com.wang.order.domain.po.OrderPO"> <id column="id" property="id"></id> <result column="purchaser" property="purchaser"></result> <result column="order_time" property="orderTime"></result> </resultMap> </mapper>
-
service层代码编写(由于业务比较简单这里就不写接口了,直接实现类)
package com.wang.order.service; import com.wang.order.dao.OrderDetailsMapper; import com.wang.order.dao.OrderMapper; import com.wang.order.domain.dto.OrderDTO; import com.wang.order.domain.dto.OrderDetailsDTO; import com.wang.order.domain.po.OrderDetailsPO; import com.wang.order.domain.po.OrderPO; import com.wang.order.domain.vo.AddOrderVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping; import java.util.List; import java.util.Map; @Service public class OrderService { @Autowired OrderMapper orderMapper; /** * 分页查询 */ public List<OrderPO> findOrderByPage(Map<String,Integer> map){ return orderMapper.findOrderByPage(map); } }
-
controller层的接口设计
package com.wang.order.controller; import com.wang.order.domain.po.OrderPO; import com.wang.order.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; @Controller public class OrderController { @Autowired OrderService orderService; /** * * @param pageSize 每一页最多的记录数 * @param pageNum 页码 * @return */ @PostMapping("/order/findOrderByPage") @ResponseBody public List<OrderPO> findOrderByPage(Integer pageSize,Integer pageNum){ Map<String, Integer> map = new HashMap<>(); map.put("startIndex",pageSize*(pageNum - 1)); map.put("pageSize",pageSize); List<OrderPO> orderByPage = orderService.findOrderByPage(map); return orderByPage; } }
-
接口测试
这里使用的是前后端分离,不管前台,我们可以用postman或者RestServices来测试controller中的接口