Para algunos de los datos mostrados en la lista, debido a que la cantidad de datos puede ser relativamente grande, estamos acostumbrados a usar la paginación. En este momento, el asistente de página del plug-in de paginación provisto por MyBatis puede lograr esta función.
Es relativamente sencillo usar pagehelper en el proyecto springboot. Antes de que finalice la paginación, nuestra capa de servicio llama a la capa dao y, después de obtener los datos de la lista mostrada, regresa directamente a la página frontal a través de la capa del controlador. Para implementar la paginación aquí, debe cambiar las operaciones de la capa del controlador y la capa de servicio, y solo se necesitan dos clases muy importantes, PageHelper y PageInfo.
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
El primer paso: primero introducir la dependencia de pagehelper
<!--分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
Realizar alguna configuración (algunos dicen que es inútil y no necesita ser configurado)
#分页插件配置
pagehelper:
reasonable: true
helper-dialect: mysql
support-methods-arguments: true
params: count=countSql
Paso 2: Luego, en la capa del controlador.
Bajo nuestra interfaz, necesitamos pasar dos parámetros básicos, pageNo (número de páginas) y pageSize (cuántos datos se almacenan en uno). El código específico es el siguiente
@GetMapping(value = "/product_list")
public String product_list(Model model,
@RequestParam(value = "pageNo",defaultValue = "1")int pageNo,
@RequestParam(value = "pageSize",defaultValue = "6")int pageSize){
PageInfo<ProductVo> page = productService.listProcuctVo(pageNo,pageSize);
model.addAttribute("pageInfo",page);
return "product_list";
}
Se puede ver aquí que la capa de servicio devuelve un objeto de PageInfo <clase de entidad>. Encapsula cierta información de la paginación y los datos de la lista devuelta.
Paso 3: Escribir la capa de servicio
Este es el paso más importante: la capa de servicio acepta los datos de la lista de la capa dao y el número de página pageNo y pageSize por número de página dos parámetros de la capa del controlador. La referencia del código específico es la siguiente.
public PageInfo<ProductVo> listProcuctVo(int pageNo, int pageSize) {
PageHelper.startPage(pageNo,pageSize);
List<ProductVo> productVoList = productMapper.selectPorductlist();
PageInfo<ProductVo> page = new PageInfo<ProductVo>(productVoList);
return page;
}
Dos lugares importantes aquí
PageHelper.startPage(pageNo,pageSize);
Establezca el número de páginas y el tamaño de la página.
Después de recibir los datos de la lista de la capa dao, llame a PageInfo para convertir los datos de la operación de paginación.
PageInfo<ProductVo> page = new PageInfo<ProductVo>(productVoList);
Aquí debe prestar especial atención a la escritura de los parámetros de llamada.
Los datos específicos encapsulados por PageInfo son los siguientes:
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 1L;
private int pageNum;//当前页
private int pageSize;//当前页数据量
private int size;
private int startRow;
private int endRow;
private long total;//总数据量
private int pages;//总页数
private List<T> list;//封装需要返回的数据列表
private int prePage;//上一页
private int nextPage;//下一页
private boolean isFirstPage;
private boolean isLastPage;
private boolean hasPreviousPage;//首页
private boolean hasNextPage;//尾页
private int navigatePages;
private int[] navigatepageNums;//页数数组
private int navigateFirstPage;
private int navigateLastPage;
}
La página aquí realmente encapsula todos los parámetros en la paginación, las variables que aparecen en el código anterior.
Paso 4: Visualización de la página
Cuando devolvemos el objeto pageInfo en el modelo usando el nombre pagInfoe en la capa del controlador.
model.addAttribute("pageInfo",page);
La lista de parámetros de la página actual que necesitamos está en pageInfo.list, y puede sustituir directamente pageInfo.xx con otros parámetros.
Visualización parcial
Estos son los datos para obtener la lista de datos.
<tr class="success" th:each="product : ${pageInfo.list}">
<td th:text="${product.product_name}"></td>
<td><img th:src="@{
${product.product_img}}" width="60px" height="60px"/></td>
<td th:text="${product.product_price}"></td>
<td th:text="${product.miaosha_price}"></td>
<td th:text="${product.stock_count}"></td>
<td> <a th:href="'/product_detail/'+${product.id}">详情</a></td>
</tr>
Esto es para obtener los datos relevantes de la página.
<ul class="pager">
<li th:if="${pageInfo.hasPreviousPage}">
<a th:href="'?pageNo=1'">首页</a>
</li>
<li th:if="${pageInfo.hasPreviousPage}">
<a th:href="'?pageNo='+${pageInfo.prePage}">上一页</a>
</li>
<li th:each="nav : ${pageInfo.navigatepageNums}">
<a th:href="'?pageNo='+${nav}" th:text="${nav}" th:if="${nav != pageInfo.pageNum}"></a>
<span style="font-weight: bold" th:if="${nav == pageInfo.pageNum}" th:text="${nav}"></span>
</li>
<li th:if="${pageInfo.hasNextPage}">
<a th:href="'?pageNo='+${pageInfo.nextPage}">下一页</a>
</li>
<li th:if="${pageInfo.hasNextPage}">
<a th:href="'?pageNo='+${pageInfo.pages}">尾页</a>
</li>
<span>
当前页号:<span th:text="${pageInfo.pageNum}"> </span> / <span th:text="${pageInfo.pages}"></span>: 总页数</span>
总结果数:<span th:text="${pageInfo.total}"></span>
</ul>
Mostrar resultados