SpringBoot企业级开发之【文章列表(条件分页)】
我们的开发需求:
接口文档:
分析需求:
实操:
1.创建PageBean实体类
我们创建这个类是用于分页查询的,将每次的分页结果都放到这个实体类里面,然后封装成页对象去返回每次的结果
package org.huangyingyuan.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;//分页返回结果对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean <T>{private Long total;//总条数private List<T> items;//当前页数据集合
}
2.Controller
//分页展示文章信息@GetMappingpublic Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,@RequestParam(required = false)Integer categoryId, //根据接口文档需求,该参数不需一定要传@RequestParam(required = false)String state //根据接口文档需求,该参数不需一定要传){PageBean<Article> pageBean = articleService.list(pageNum,pageSize,categoryId,state);return Result.success(pageBean);}
3.Service接口
//分页展示文章列表PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state);
4.Service实现类
我们实现分页查询时,要先导入相关依赖
<!--pageHelper分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version></dependency>
然后编写实现类:
//分页展示文章@Overridepublic PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {//1.创建PageBean对象PageBean<Article> pageBean = new PageBean<>();//2.开启分页查询 PageHelper(依赖)PageHelper.startPage(pageNum, pageSize);//3.调用Mapper//因为每个用户的文章都不一致,所以需要根据用户ID查询Map<String, Object> map = ThreadLocalUtil.get();Integer usrId = (Integer) map.get("id");List<Article> articles = articleMapper.list(usrId, categoryId, state);//Page中提供了方法,可以获取PageHelper分页查询后,得到的总记录条数和当前页数据(所以要把我们的Page对象强转成Page<Article>)Page<Article> p =(Page<Article>)articles;//把数据填充到PageBean对象中pageBean.setTotal(p.getTotal());pageBean.setItems(p.getResult());return pageBean;}
5.Mapper
//分页查询文章List<Article> list(@Param("usrId") Integer usrId,@Param("categoryId") Integer categoryId,@Param("state") String state);
由于我们很多都是动态的查询条件,所以我们需要创建Mapper.xml映射文件才方便
Mapper.xml映射文件:
我们在resources创建于与Mapper接口路径一摸一样的文件路径,在这个文件路径下创建映射xml文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.huangyingyuan.mapper.ArticleMapper"> <!-- 命名空间:对应的是你的mapper接口的全路径名 --><!--动态sql--><select id="list" resultType="org.huangyingyuan.pojo.Article">SELECT * FROM article<where><if test="categoryId != null">category_id = #{categoryId}</if><if test="state != null">AND state = #{state}</if><if test="usrId != null">AND create_user = #{usrId}</if></where></select>
</mapper>