app端文章查看,静态化freemarker,分布式文件系统minIO
1)文章列表加载
1.1)需求分析
文章布局展示
1.2)表结构分析
ap_article 文章基本信息表
ap_article_config 文章配置表
ap_article_content 文章内容表
三张表关系分析
1.3)导入文章数据库
1.3.1)导入数据库
查看当天资料文件夹,在数据库连接工具中执行leadnews_article.sql
1.3.2)导入对应的实体类
ap_article文章表对应实体
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">package</span> <span style="color:#0000ff">com</span>.<span style="color:#000000">heima</span>.<span style="color:#000000">model</span>.<span style="color:#000000">article</span>.<span style="color:#000000">pojos</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">IdType</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">TableField</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">TableId</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">TableName</span>;
<span style="color:#770088">import</span> <span style="color:#000000">lombok</span>.<span style="color:#000000">Data</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">io</span>.<span style="color:#000000">Serializable</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">util</span>.<span style="color:#000000">Date</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* <p></span>
<span style="color:#aa5500">* 文章信息表,存储已发布的文章</span>
<span style="color:#aa5500">* </p></span>
<span style="color:#aa5500">*</span>
<span style="color:#aa5500">* @author itheima</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@Data</span>
<span style="color:#555555">@TableName</span>(<span style="color:#aa1111">"ap_article"</span>)
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">ApArticle</span> <span style="color:#770088">implements</span> <span style="color:#000000">Serializable</span> {
<span style="color:#555555">@TableId</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"id"</span>,<span style="color:#000000">type</span> <span style="color:#981a1a">=</span> <span style="color:#000000">IdType</span>.<span style="color:#000000">ID_WORKER</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Long</span> <span style="color:#000000">id</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 标题</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">title</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 作者id</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"author_id"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Long</span> <span style="color:#000000">authorId</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 作者名称</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"author_name"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">authorName</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 频道id</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"channel_id"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">channelId</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 频道名称</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"channel_name"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">channelName</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 文章布局 0 无图文章 1 单图文章 2 多图文章</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Short</span> <span style="color:#000000">layout</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 文章标记 0 普通文章 1 热点文章 2 置顶文章 3 精品文章 4 大V 文章</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Byte</span> <span style="color:#000000">flag</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 文章封面图片 多张逗号分隔</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">images</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 标签</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">labels</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 点赞数量</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">likes</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 收藏数量</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">collection</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 评论数量</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">comment</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 阅读数量</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">views</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 省市</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"province_id"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">provinceId</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 市区</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"city_id"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">cityId</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 区县</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"county_id"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">countyId</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 创建时间</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"created_time"</span>)
<span style="color:#770088">private</span> <span style="color:#000000">Date</span> <span style="color:#000000">createdTime</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 发布时间</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"publish_time"</span>)
<span style="color:#770088">private</span> <span style="color:#000000">Date</span> <span style="color:#000000">publishTime</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 同步状态</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"sync_status"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Boolean</span> <span style="color:#000000">syncStatus</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 来源</span>
<span style="color:#aa5500">*/</span>
<span style="color:#770088">private</span> <span style="color:#008855">Boolean</span> <span style="color:#000000">origin</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 静态页面地址</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"static_url"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">staticUrl</span>;
}</span></span>
ap_article_config文章配置对应实体类
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">package</span> <span style="color:#0000ff">com</span>.<span style="color:#000000">heima</span>.<span style="color:#000000">model</span>.<span style="color:#000000">article</span>.<span style="color:#000000">pojos</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">IdType</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">TableField</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">TableId</span>;
<span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">baomidou</span>.<span style="color:#000000">mybatisplus</span>.<span style="color:#000000">annotation</span>.<span style="color:#000000">TableName</span>;
<span style="color:#770088">import</span> <span style="color:#000000">lombok</span>.<span style="color:#000000">Data</span>;
<span style="color:#770088">import</span> <span style="color:#000000">java</span>.<span style="color:#000000">io</span>.<span style="color:#000000">Serializable</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* <p></span>
<span style="color:#aa5500">* APP已发布文章配置表</span>
<span style="color:#aa5500">* </p></span>
<span style="color:#aa5500">*</span>
<span style="color:#aa5500">* @author itheima</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@Data</span>
<span style="color:#555555">@TableName</span>(<span style="color:#aa1111">"ap_article_config"</span>)
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">ApArticleConfig</span> <span style="color:#770088">implements</span> <span style="color:#000000">Serializable</span> {
<span style="color:#555555">@TableId</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"id"</span>,<span style="color:#000000">type</span> <span style="color:#981a1a">=</span> <span style="color:#000000">IdType</span>.<span style="color:#000000">ID_WORKER</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Long</span> <span style="color:#000000">id</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 文章id</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"article_id"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Long</span> <span style="color:#000000">articleId</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 是否可评论</span>
<span style="color:#aa5500">* true: 可以评论 1</span>
<span style="color:#aa5500">* false: 不可评论 0</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"is_comment"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Boolean</span> <span style="color:#000000">isComment</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 是否转发</span>
<span style="color:#aa5500">* true: 可以转发 1</span>
<span style="color:#aa5500">* false: 不可转发 0</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"is_forward"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Boolean</span> <span style="color:#000000">isForward</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 是否下架</span>
<span style="color:#aa5500">* true: 下架 1</span>
<span style="color:#aa5500">* false: 没有下架 0</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"is_down"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Boolean</span> <span style="color:#000000">isDown</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 是否已删除</span>
<span style="color:#aa5500">* true: 删除 1</span>
<span style="color:#aa5500">* false: 没有删除 0</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableField</span>(<span style="color:#aa1111">"is_delete"</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Boolean</span>