基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁功能實(shí)現(xiàn)
在前面的教程中,我們已經(jīng)實(shí)現(xiàn)了基于Spring Boot和Vue3的發(fā)布、編輯、刪除文章功能。本教程將繼續(xù)引導(dǎo)您實(shí)現(xiàn)博客平臺(tái)的文章列表與分頁功能。
在本教程中,我們實(shí)現(xiàn)了基于Spring Boot和Vue3的博客平臺(tái)文章列表與分頁功能。整個(gè)實(shí)現(xiàn)過程可以分為以下幾個(gè)步驟:
- 后端Spring Boot實(shí)現(xiàn) 1.1. 修改ArticleMapper接口:添加新的findPage方法以支持分頁查詢。 1.2. 修改ArticleService接口及實(shí)現(xiàn):替換findAll方法為findPage方法,并實(shí)現(xiàn)分頁查詢邏輯。 1.3. 修改ArticleController類:更新list方法,接收分頁參數(shù),并調(diào)用findPage方法獲取分頁數(shù)據(jù)。
- 前端Vue3實(shí)現(xiàn) 2.1. 修改文章列表頁面組件:在ArticleList.vue組件中,修改fetchArticles方法,接收分頁參數(shù),并將數(shù)據(jù)顯示在表格中。 2.2. 添加分頁組件:在文章列表頁面中,添加<el-pagination>組件以實(shí)現(xiàn)分頁功能。當(dāng)用戶更改分頁大小或當(dāng)前頁時(shí),分別觸發(fā)handleSizeChange和handleCurrentChange方法,重新獲取文章列表數(shù)據(jù)。
在這個(gè)過程中,我們首先修改了后端Spring Boot應(yīng)用程序,為ArticleMapper接口添加了支持分頁查詢的方法,并相應(yīng)地修改了ArticleService和ArticleController類。然后,我們修改了前端Vue3應(yīng)用程序,實(shí)現(xiàn)了根據(jù)分頁參數(shù)獲取文章列表數(shù)據(jù)的功能,并添加了一個(gè)分頁組件以方便用戶進(jìn)行翻頁操作。
通過這種方式,我們實(shí)現(xiàn)了博客平臺(tái)的文章列表與分頁功能,使得用戶可以更方便地查看大量文章。您可以根據(jù)實(shí)際需求對(duì)這些功能進(jìn)行進(jìn)一步的優(yōu)化和擴(kuò)展。
1. 后端Spring Boot實(shí)現(xiàn)
我們將使用Spring Boot作為后端框架,并使用MySQL作為數(shù)據(jù)庫(kù)。
1.1 修改ArticleMapper接口
為了支持分頁功能,我們需要修改ArticleMapper.java文件,添加一個(gè)新方法findPage,同時(shí)更新findAll方法為findPage方法。
@Mapper
public interface ArticleMapper {
List<Article> findPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
Article findById(Integer id);
void insert(Article article);
void update(Article article);
void delete(Integer id);
int count();
}1.2 修改ArticleService接口及實(shí)現(xiàn)
在ArticleService.java文件中,將findAll方法替換為findPage方法,同時(shí)添加一個(gè)新方法count。
public interface ArticleService {
List<Article> findPage(int offset, int pageSize);
Article findById(Integer id);
void create(Article article);
void update(Article article);
void delete(Integer id);
int count();
}接著,在ArticleServiceImpl.java文件中,修改對(duì)應(yīng)的實(shí)現(xiàn)。
@Service
public class ArticleServiceImpl implements ArticleService {
@Autowired
private ArticleMapper articleMapper;
@Override
public List<Article> findPage(int offset, int pageSize) {
return articleMapper.findPage(offset, pageSize);
}
// ...其他方法不變
}1.3 修改ArticleController類
在ArticleController.java文件中,修改list方法,接收page和pageSize參數(shù),并調(diào)用findPage和count方法獲取分頁數(shù)據(jù)。
@RestController
@RequestMapping("/api/article")
public class ArticleController {
@Autowired
private ArticleService articleService;
@GetMapping
public Result list(@RequestParam(required = false, defaultValue = "1") int page,
@RequestParam(required = false, defaultValue = "10") int pageSize) {
int offset = (page - 1) * pageSize;
List<Article> articles = articleService.findPage(offset, pageSize);
int totalCount = articleService.count();
return Result.success("獲取文章列表成功", new PageData<>(articles, totalCount, pageSize, page));
}
// ...其他方法不變
}2. 前端Vue3實(shí)現(xiàn)
2.1 修改文章列表頁面組件
在ArticleList.vue組件中,修改fetchArticles方法,接收page和pageSize參數(shù),并將數(shù)據(jù)顯示在表格中。同時(shí),添加<el-pagination>組件實(shí)現(xiàn)分頁。
<template>
<div>
<el-table :data="articles">
<el-table-column prop="id" label="ID" width="80"></el-table-column>
<el-table-column prop="title" label="標(biāo)題"></el-table-column>
<el-table-column label="操作" width="180">
<template v-slot="{ row }">
<el-button @click="editArticle(row.id)">編輯</el-button>
<el-button type="danger" @click="deleteArticle(row.id)">刪除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
<script>
import { ref } from "vue";
import axios from "axios";
export default {
setup() {
const articles = ref([]);
const total = ref(0);
const page = ref(1);
const pageSize = ref(10);
const fetchArticles = async (page, pageSize) => {
const response = await axios.get("/api/article", {
params: {
page: page,
pageSize: pageSize
}
});
articles.value = response.data.data.list;
total.value = response.data.data.total;
};
const handleSizeChange = (val) => {
pageSize.value = val;
fetchArticles(page.value, pageSize.value);
};
const handleCurrentChange = (val) => {
page.value = val;
fetchArticles(page.value, pageSize.value);
};
const editArticle = (id) => {
// 跳轉(zhuǎn)到編輯頁面
};
const deleteArticle = async (id) => {
await axios.delete(`/api/article/${id}`);
fetchArticles(page.value, pageSize.value);
};
fetchArticles(page.value, pageSize.value);
return { articles, total, page, pageSize, handleSizeChange, handleCurrentChange, editArticle, deleteArticle };
},
};
</script>在這個(gè)修改后的ArticleList.vue組件中,我們添加了<el-pagination>組件以實(shí)現(xiàn)分頁功能。當(dāng)用戶更改分頁大小或當(dāng)前頁時(shí),分別觸發(fā)handleSizeChange和handleCurrentChange方法。這兩個(gè)方法都會(huì)調(diào)用fetchArticles方法,根據(jù)當(dāng)前頁和分頁大小重新獲取文章列表數(shù)據(jù)。
至此,您已經(jīng)完成了基于Spring Boot和Vue3的文章列表與分頁功能實(shí)現(xiàn)。在實(shí)際項(xiàng)目中,您可能需要根據(jù)需求進(jìn)行更多的優(yōu)化和擴(kuò)展。希望本教程對(duì)您有所幫助!
到此這篇關(guān)于基于SpringBoot和Vue3的博客平臺(tái)文章列表與分頁功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot Vue3實(shí)現(xiàn)文章列表與分頁內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java書店系統(tǒng)畢業(yè)設(shè)計(jì) 用戶模塊(2)
這篇文章主要介紹了java書店系統(tǒng)畢業(yè)設(shè)計(jì),第二步系統(tǒng)總體設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Java SSH 秘鑰連接mysql數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Java SSH 秘鑰連接mysql數(shù)據(jù)庫(kù)的方法,包括引入依賴的代碼和出現(xiàn)異常報(bào)錯(cuò)問題,需要的朋友可以參考下2021-06-06
java復(fù)制文件和java移動(dòng)文件的示例分享
本文主要介紹了java將文件夾下面的所有的jar文件拷貝到指定的文件夾下面的方法,需要的朋友可以參考下2014-02-02
MyBatisPlus中@TableField注解的基本使用
這篇文章主要介紹了MyBatisPlus中@TableField注解的基本使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Spring與Dubbo搭建一個(gè)簡(jiǎn)單的分布式詳情
這篇文章主要介紹了Spring與Dubbo搭建一個(gè)簡(jiǎn)單的分布式詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08

