springboot3+vue3(六)文章列表条件分页(PageHelper)

1、添加PageHelper坐标依赖

<!--pagehelper坐标依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>
pagehelper坐标

2、创建自定义返回实体PageBean

//分页返回结果对象
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean <T>{
    private Long total;//总条数
    private List<T> items;//当前页数据集合
}
PageBean

3、Controller 编写接口返回 PageBean<实体>

@GetMapping
    public Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,
                                          @RequestParam(required = false) Integer categoryId,//非必填
                                          @RequestParam(required = false) String state //非必填
    )
    {
        PageBean<Article> list = articleService.list(pageNum,pageSize,categoryId,state);
        return Result.success(list);
    }
Controller

4、生成Service,生成Impl  //此处注意PageHelper版本必须为第1步的版本不然强转处会报错

@Override
    public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {
        //开启分页查询PageHelper
        PageHelper.startPage(pageNum,pageSize);

        //只能查看自己新建的文章 , 获取当前登录人id
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer userId = (Integer) map.get("id");
        List<Article> articleList = articleMapper.list(userId, categoryId,state);
        ////返回方式1 强转
        //Page中提供了方法,可以获取PageHelper分布查询后 得到的总记录条数和当前页数据
        Page<Article> p = (Page<Article>) articleList;
        //把数据填充到PageBean对象中
        PageBean<Article> pb = new PageBean<>();
        pb.setItems(p.getResult());
        pb.setTotal(p.getTotal());
        return pb;

        ////返回方式2 直接把 articleList 丢到 PageInfo 中 然后返回
        ////这种返回 定义方法返回处就要变为PageInfo 或者转为 json 串返回
        //PageInfo p = new PageInfo(articleList);
        //return p;
    }
impl

5、因为有的参数为非必填项, 使用注解写动态sql会非常的麻烦,这里使用映射配置文件写动态sql

在resources文件夹创建与mapper接口所在包结构一样的目录文件夹

 在此包下创建与mapper下相同名的ArticleMapper

<?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.example.bigevent.mapper.ArticleMapper"> <!--这里路径写mapper路径-->
    <!--动态sql-->
    <select id="list" resultType="com.example.bigevent.pojo.Article">  # id与mapper中的方法名一致   resultType为返回类型
        select * from article
        <where>
            create_user = #{userId}
            <if test="categoryId!=null">
                and category_id =#{categoryId}
            </if>
            <if test="state!=null">
                and state =#{state}
            </if>
        </where>
    </select>
</mapper>
ArticleMapper

 

 

效果展示:

 

 

 

 

 

 

 

 

直接返回Json串参考:https://www.cnblogs.com/JoeYD/p/14573022.html

posted @ 2024-03-12 00:11  一介桃白白  阅读(131)  评论(0编辑  收藏  举报