springboot3+vue3(六)文章列表條件分頁(PageHelper)

一介桃白白發表於2024-03-12

1、新增PageHelper座標依賴

springboot3+vue3(六)文章列表條件分頁(PageHelper)
<!--pagehelper座標依賴-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.6</version>
        </dependency>
pagehelper座標

2、建立自定義返回實體PageBean

springboot3+vue3(六)文章列表條件分頁(PageHelper)
//分頁返回結果物件
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean <T>{
    private Long total;//總條數
    private List<T> items;//當前頁資料集合
}
PageBean

3、Controller 編寫介面返回 PageBean<實體>

springboot3+vue3(六)文章列表條件分頁(PageHelper)
@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步的版本不然強轉處會報錯

springboot3+vue3(六)文章列表條件分頁(PageHelper)
@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

springboot3+vue3(六)文章列表條件分頁(PageHelper)
<?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

相關文章