type
status
date
slug
summary
tags
category
icon
password
现在开始正式在前端展示各个用户的文章。

分页查询

什么是“分页查询”?

想象一下你正在看一本非常厚非常厚的书,比如一本字典。
  • 没有分页查询: 就像你一次性要把整本字典从头到尾都读完,或者一次性把整本字典都搬到桌子上。这显然非常慢,非常累,而且你的桌子(电脑内存)也可能放不下。
  • 有了分页查询: 就像你只看字典的“第 1 页到第 10 页”,或者“第 101 页到第 110 页”。你每次只看一小部分内容,看完这部分,觉得不够再翻到下一页。
在计算机和网络的世界里,这个“书”就是数据库里的大量数据(比如几万、几十万、几百万篇文章),而“看书”就是你的程序去数据库里拿这些数据。

它的核心思想就是:

  1. 按需加载: 我不需要一次性把所有数据都拿出来,我只想要当前用户在屏幕上能看到的那一小部分数据。
  1. 分批展示: 我把所有数据分成一页一页的,用户想看哪一页,我就去拿哪一页的数据。

为什么需要分页查询?

想象一下你的网站上有 100 万篇文章:
  1. 慢! 如果你一次性把这 100 万篇文章全部从数据库拿出来,再全部传到你的网页上,再全部显示出来,你的网站会慢到爆炸,用户等得花都谢了。
  1. 卡! 就算传到了网页,你的电脑内存也可能瞬间爆满,网页直接卡死或崩溃。
  1. 浪费! 用户通常只关心当前屏幕上显示的那几篇文章,后面几十万篇他可能根本没看,白白传输了那么多数据,浪费了网络流量和服务器资源。
有了分页查询,这些问题就迎刃而解了:
  • 用户访问网站,网站只去数据库拿**“第 1 页”**的 10 篇文章。
  • 用户点击“下一页”,网站再去数据库拿**“第 2 页”**的 10 篇文章。
  • 这样既快又省,用户体验也很好。

“分页查询”的实现原理

当你的网页(前端)告诉服务器(后端)说:“我想要第 3 页的文章,每页显示 10 篇”,那么后端会:
  1. 计算跳过多少条: 要拿第 3 页,每页 10 条,那前面第 1 页和第 2 页加起来就是 20 条,所以要跳过 20 条数据。
      • 公式:(页码 - 1) * 每页大小
  1. 从数据库查询: 向数据库发送一个特殊的命令,告诉它:“跳过前面 20 条数据,然后给我取接下来的 10 条数据”。
      • 这个命令在 SQL 语言中通常是 LIMIT 10 OFFSET 20 (或者 LIMIT 20, 10)。
  1. 计算总数: 同时,后端还会问数据库:“满足我条件的文章总共有多少篇?” 这样前端就知道总共有多少页可以翻。
      • 这个命令通常是 SELECT COUNT(*) FROM your_table WHERE ...
  1. 返回数据: 把当前页的 10 篇文章和总文章数一起返回给前端。

安装依赖

**MyBatis Plus3.5.9及以上版本的分页功能独立了出来,所以我们需要额外安装一个依赖mybatis-plus-jsqlparser** 如果你的版本是3.5.9以下,则无需安装。
我们来到Maven依赖网站
选择3.5.12版本,请根据自己的**mybatis-plus** 版本自行选择对应的版本安装,我用的是3.5.12版本。
将依赖写入pom.xml后记得更新一下依赖,前文说过便不再赘述。
在config包下创建一个MybatisPlusConfig,代码如下:

前端部分

一个主页通常包含顶部导航,主要内容区,页脚。 大部分网站都是这样的,你可以打开各类网站观察一下他们的布局,在此我不赘述。 一个顶部导航可能会在很多地方都能用到,所以它最好是个组件,以便我们复用。 在src下的components下创建一个TheHeader.vue
notion image
在视图下创建一个Home.vue
并导入TheHeader组件
notion image
按照惯例在router里加上Home,这样我们就能正确路由到Home了
notion image

数据库部分

我们需要一个article表,来存放文章内容 点击左上角的创建sql,写入sql代码,最后点击上方的闪电按钮执行。 这里的user_id和用户表的id关联了起来,当用户表的用户被删除时,与之关联的文章也会被一并删除。
notion image
我们再造一些模拟的假数据,你可以将上面的SQL代码复制下来,去问ai,让ai给你造一点数据
这里AI给我生成了20条假数据,文章作者分别对应user_id 1 到 5,请注意你有没有5个用户在用户表里,否则会出错

后端部分

Article 实体类

创建一个Article实体类
notion image

ArticleMapper 接口

创建ArticleMapper接口
notion image

服务层

ArticleService接口

在service包下创建一个ArticleService接口,代码如下:
目前我们只有一个需求,实现分页查询,那就先设计一个分页查询接口。

ArticleServiceImpl类

接下来实现具体方法
在Impl包下创建ArticleServiceImpl(注意Impl开头是大写i,末尾是小写l),代码如下:

ArticleController类

与之对应的前端

打开你的VSCode

Article接口

在interface文件夹下创建一个Article.ts 接口,
与后端的对应。

对接Api

来到前端,增加get方法getArticleList
别忘记export方法

文章列表卡片

notion image
记得把这个组件添加到Home.vue里,像TheHeader.vue一样
保存文件,热更新后可以看到你的主页有了一系列文章卡片展示
接下来实现点击文章卡片就能跳转到文章的详情页功能。