基于 Spring Boot 博客系统开发(九)

news2024/12/23 14:23:15

基于 Spring Boot 博客系统开发(九)

本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿
基于 Spring Boot 博客系统开发(八)👈👈

文章管理实现

这里仅实现文章列表和分页
在这里插入图片描述
视图对象如下

@Data
public class ArticleVO {
    private Long id;
    private String title;
    private LocalDate created;
    private Integer hits;
    private String categories;
}

自定义SQL,SQL视图如下
在这里插入图片描述
ArticleMapper.xml 添加自定义SQL,添加 resultMap 映射关系

    <resultMap id="ArticleVOResult" type="ArticleVO">
        <id property="id" column="id"></id>
        <result property="title" column="title"></result>
        <result property="created" column="created"></result>
        <result property="categories" column="categories"></result>
        <result property="hits" column="hits"></result>
    </resultMap>
    
   <select id="selectArticle" resultMap="ArticleVOResult">
        select a.id,a.title,a.created,a.categories,s.hits from t_article a LEFT JOIN t_statistic s ON a.id = s.article_id
    </select>

ArticleMapper 添加 selectArticle 方法,方法名跟上面select id 一致

List<ArticleVO> selectArticle();

IArticleService 添加接口

List<ArticleVO> selectArticle();

ArticleServiceImpl 添加实现方法调用 ArticleMapper selectArticle 方法

  @Override
    public List<ArticleVO> selectArticle() {
        return articleMapper.selectArticle();
    }

AdminController 添加查询文章列表逻辑代码

    @RequestMapping("/list")
    public String list(Model model,@RequestParam(defaultValue = "1") Integer pageNum){
        PageHelper.startPage(pageNum,10);
        List<ArticleVO> list = articleService.selectArticle();
        PageInfo<ArticleVO> articlePage = new PageInfo<>(list);
        model.addAttribute("articlePage",articlePage);
        return "admin/list";
    }

文章列表模板,使用 thymeleaf 表达式动态渲染数据

	   <tr th:each="article:${articlePage.list}">
        <td>
            <a href="/article/12" target="_blank" th:text="${article.title}" >Spring Boot 2 权威发布</a>
        </td>
        <td th:text="${article.created}">2018-12-12</td>
        <td th:text="${article.hits}">44</td>
        <td th:text="${article.categories}">默认分类</td>
        <td>
            <a href="/admin/article/12"
               class="btn btn-primary btn-sm waves-effect waves-light m-b-5">
                <i class="fa fa-edit"></i> <span>编辑</span></a>
            <a href="javascript:void(0)" onclick="delArticle(12);"
               class="btn btn-danger btn-sm waves-effect waves-light m-b-5">
                <i class="fa fa-trash-o"></i> <span>删除</span></a>
            <a class="btn btn-warning btn-sm waves-effect waves-light m-b-5" href="javascript:void(0)">
                <i class="fa fa-rocket"></i> <span>预览</span></a>
        </td>
    </tr>									

分页模板代码

 <!--分页-->
    <div class="clearfix">
        <ul class="pagination m-b-5 pull-right">
            <li>
                <a th:unless="${articlePage.isFirstPage}" th:href="${'?pageNum='+articlePage.prePage}" aria-label="Pre">
                    上一页&nbsp;<i class="fa fa-angle-left"></i>
                </a>
            </li>
            <li th:each="num:${articlePage.navigatepageNums}" th:class="${num == articlePage.pageNum?'active':''}">
                <a th:href="${'?pageNum='+num}" th:text="${num}">1</a>
            </li>
            <li>
                <a th:unless="${articlePage.isLastPage}"  th:href="${'?pageNum='+articlePage.nextPage}" aria-label="Next">
                    下一页&nbsp;<i class="fa fa-angle-right"></i>
                </a>
            </li>
            <li><span>共[[${articlePage.size}]]页</span></li>
        </ul>
    </div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1677320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day15 个人博客项目登录验证CookieSession验证码安全

知识点 1.后台验证-登录用户逻辑安全 2.后台验证-cookie和session 3.后台验证-验证码和万能密码 通常的后台验证登录都是&#xff0c;1.发送登录请求&#xff0c;账户密码&#xff1b;2.接受账号密码3.对账号密码进行判断 正确 -》跳转到成功登录界面 失败-》重新登录 而…

C++ | Leetcode C++题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> t;vector<vector<int>> ans;vector<vector<int>> subsetsWithDup(vector<int> &nums) {sort(nums.begin(), nums.end());int n nums.size();for (int mask …

无人机+应急通信:灾害现场应急通信车技术详解

无人机和应急通信车是灾害现场应急通信中的重要技术。无人机可以通过快速到达灾害现场&#xff0c;搭载高清摄像头、红外热成像仪、激光雷达等设备&#xff0c;对灾区进行实时监测和灾情评估&#xff0c;同时也可以通过搭载的通信设备&#xff0c;与指挥中心进行实时通信和数据…

HC-Net: 自动牙周疾病诊断的混合分类网络

文章目录 HC-Net: Hybrid Classification Network for Automatic Periodontal Disease Diagnosis摘要方法实验结果 HC-Net: Hybrid Classification Network for Automatic Periodontal Disease Diagnosis 摘要 从全景X射线图像中准确分类牙周病对于临床高效诊疗至关重要&…

胖东来5月生鲜陈列欣赏

【免责声明】&#xff1a;凡未注明来源的图文内容&#xff0c;版权归原作者所有。本平台所发稿件、图片均用于学习交流&#xff0c;不代表赞同文章观点和对其真实性负责&#xff0c;不用作商业用途。若文章涉及版权&#xff0c;请将马上联系&#xff0c;安排删除。

Andorid Input事件 注入方法及原理介绍

在Android系统中&#xff0c;除了真实的输入设备可以产生事件之外&#xff0c;我们也可以通过软件的方式&#xff0c;模拟一个输入事件&#xff0c;比如模拟一个点击事件&#xff0c;模拟一个按键事件等等。 怎么模拟一个输入事件 1&#xff0c;在adb命令行使用input命令模拟输…

Milvus的系统架构

简介 Milvus的构建在许多知名的向量搜索库比如Faiss, HNSW, DiskANN, SCANN等之上的&#xff0c;它针对稠密向量数据集的相似搜索而设计&#xff0c;能支持百万、十亿甚至万亿级别的向量搜索。 Milvus支持数据分片&#xff0c;流式数据插入&#xff0c;动态schema&#xff0c…

仿C#或Java基础类型自定义

class Int{ private:int _value 0; public:operator int() const{ // 隐式转换return _value;}// 显式转换explicit operator int*() const { return nullptr; }operator(const int page){_value page;}operator float() const{return static_cast<float>(_value);}ope…

Linux shell编程学习笔记49:strings命令

0 前言 在使用Linux的过程中&#xff0c;有时我们需要在obj文件或二进制文件中查找可打印的字符串&#xff0c;那么可以strings命令。 1. strings命令 的功能、格式和选项说明 我们可以使用命令 strings --help 来查看strings命令的帮助信息。 pupleEndurer bash ~ $ strin…

Node.js安装及环境配置(超详细!保姆级!!)

目录 一、进入官网地址下载安装包 二、安装程序 三、环境配置 四、测试 五、安装淘宝镜像 一、进入官网地址下载安装包 Node.js — Download Node.js (nodejs.org) 选择对应你系统的 node.js 版本&#xff0c;我选择的是Windows系统&#xff0c;64位 点击图中选项&#…

图文详解JUC:Wait与Sleep的区别与细节

目录 一.Wait() 二.Sleep() 三.总结Wait()与Sleep()的区别 一.Wait() 在Java中&#xff0c;wait() 方法是 Object类中的一个方法&#xff0c;用于线程间的协作。当一个线程调用wait() 方法时&#xff0c;它会释放对象的锁并进入等待状态&#xff0c;直到其他线程调用相同对…

【氮化镓】p-GaN 栅 HEMT栅极可靠性及其退化机制

文章作者团队来自中国科学院苏州纳米技术与纳米仿生研究所&#xff08;SINANO&#xff09;的关键实验室、中国科学技术大学的纳米技术与纳米仿生学院&#xff0c;以及广东省&#xff08;佛山&#xff09;苏州纳米技术与纳米仿生研究所的分支机构。研究结果发表在IEEE Journal o…

详解lighthouse通过命令行方式运行并生成html测试报告的方法

lighthouse可以通过命令行的方式运行并生成html报告&#xff0c;我们可以通过lighthouse --help 命令查看命令行的详细用法&#xff0c;在这里我仅列出最常用的命令行使用方法&#xff01; 常用lighthouse命令行参数详解 * --chrome-flags&#xff1a;传递自定义标志给Chrome…

网络安全法中关于网络信息的保护和监管,有哪些规定?

网络安全法作为我们数字时代的重要法律保障&#xff0c;对于网络信息的保护和监管有着明确且详细的规定。这些规定不仅体现了国家对于网络安全的重视&#xff0c;也为我们每个人在数字世界中提供了坚实的法律屏障。 首先&#xff0c;我们来看一个关于网络运营者主体责任的案例。…

摸鱼大数据——Linux搭建大数据环境(集群免密码登录和安装Hadoop)二

集群设置免密登录 克隆node1虚拟机的前置条件&#xff1a;node1虚拟机存在且处于关闭状态 1.克隆出node2虚拟机 1.node1虚拟机: 右键 -> "管理" -> "克隆" 2.图形化弹窗中: "下一页"->"下一页"->选择"创建完整克隆&…

Element Plus组件库使用组件自动导入后样式不生效的问题

首先按照官方文档上的介绍进行配置&#xff1a;快速开始 | Element Plus (element-plus.org) 配置完成后&#xff0c;去组件中去测试组件库中的button组件的样式是否生效 <template><el-button type"primary">Primary</el-button> </template&…

windows和linux下分别安装pwntools

inux下安装pwntools pwntools是pwn最常用的一个python包。 首先需要安装pip&#xff1a;apt install python3-pip 然后安装pwntools&#xff1a;pip install pwntools 完成 10-1windows下安装pwntools 首先可以先安装好python的环境&#xff0c;Python 2.7.9 或 Python 3.4…

期权(1):基本概念,权利金,定金,买方,卖方,零和游戏,对赌协议

期权是合约&#xff0c;权利金就是定金&#xff01; 合约到期时 买方可以选择行权&#xff0c;也可以选择不行权。代价就是定金损失。因此亏损封顶&#xff0c;但盈利无限。卖方赚的就是买方的定金&#xff0c;盈利封顶&#xff0c;但亏损无限。 从这里&#xff0c;我们看出…

5.9网络协议

由网卡发送数据通过网线进行发送&#xff0c;当网卡接收到信号以后将数据传给内核数据区&#xff0c;然后由操作系统交给相应的进程。 将数据进行发送的时候需要借助于网线实现&#xff0c;这个时候会出现当传输的数据比较远的时候就借助于中继器将信号进行再生扩大&#xff0…

python如何做一个服务器fastapi 和flask

用 fastapi 方式的话 from fastapi import FastAPIapp FastAPI()app.get("/api") def index():return "hello world"然后需要安装 uvicorn 并执行下面的命令 uvicorn server:app --port 8000 --reload最终 如果是用 flask 直接写下面的代码 # -*- cod…