Spring Boot + vue-element 开发个人博客项目开发(十、通知公告功能实现)

2023-10-26

 

前面设计的通知公告中有两个字段不规范,现在我们重新调整一下,调整如下:

//原先的 
`noticeContent`    text                  NULL                                COMMENT '公告内容',
 `createBy`   		VARCHAR(128)      NOT NULL                                COMMENT '创建者',
//修改成
 `notice_content`   text                  NULL                                COMMENT '公告内容',
 `create_by`   		VARCHAR(128)      NOT NULL                                COMMENT '创建者',

一、通知公告功能的实现

和前面两个功能模块差不多,都是增删改查,

1.1 添加实体类

 

entity包下新建一个Notice.java

Notice.java完整代码

package com.blog.personblog.entity;

import lombok.Data;


import java.time.LocalDateTime;

@Data
public class Notice {

    /**
     * 主键ID
     */
    private int noticeId;

    /**
     * 标题
     */
    private  String noticeTitle;

    /**
     *公告类型,默认0, 0-公告, 1-通知, 2-提醒'
     */
    private int noticeType;

    /**
     * 状态,默认0, 0-正常, 1-关闭
     */
    private int status;

    /**
     * 公告内容
     */
    private String noticeContent;

    /**
     * 创建者
     */
    private String createBy;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    

}

1.2 添加业务接口

 

 在service层添加业务接口,使得业务暴露出来

添加接口,创建一个NoticeService.java

 NoticeService.java完整代码

package com.blog.personblog.service;

import com.blog.personblog.config.page.PageRequest;
import com.blog.personblog.entity.Notice;

import java.util.List;

public interface NoticeService {

    /**
     * 获取所有的分类(分页)
     */
    List<Notice> getNoticePage(PageRequest pageRequest);

    /**
     * 新建分类
     *
     * @param notice
     * @return
     */
    int saveNotice(Notice notice);

    /**
     * 修改分类
     *
     * @param notice
     * @return
     */
    int updateNotice(Notice notice);


    /**
     * 删除分类
     * @param noticeId
     */
    void deleteNotice(Integer noticeId);

}

1.3 接口实现类

在写完了接口之后,需要在Impl包下新建一个NoticeServiceImpl.java实现Service

package com.blog.personblog.service;

import com.blog.personblog.config.page.PageRequest;
import com.blog.personblog.entity.Notice;

import java.util.List;

@Service
public interface NoticeService {

    /**
     * 获取所有的分类(分页)
     */
    List<Notice> getNoticePage(PageRequest pageRequest);

    /**
     * 新建分类
     *
     * @param notice
     * @return
     */
    int saveNotice(Notice notice);

    /**
     * 修改分类
     *
     * @param notice
     * @return
     */
    int updateNotice(Notice notice);


    /**
     * 删除分类
     * @param noticeId
     */
    void deleteNotice(Integer noticeId);

}

1.4 数据库查询接口实现

mapper层下创建一个NoticeMapper.java

 NoticeMapper.java完整代码

package com.blog.personblog.mapper;

import com.blog.personblog.entity.Notice;
import org.springframework.stereotype.Repository;

import javax.validation.Valid;
import java.util.List;

@Repository
public interface NoticeMapper {

    /**
     * 创建
     * @param notice
     * @return
     */
    int createNotice(Notice notice);

    /**
     * 修改
     * @param notice
     * @return
     */
    int updateNotice(Notice notice);


    /**
     * 删除
     * @param noticeId
     */
    void deleteNotice(Integer noticeId);

    /**
     * 分类列表
     * @return
     */
    List<Notice> getNoticePage();
}

1.5 编写数据库xml

resources文件夹下的mapper文件新建一个NoticeMapper.xml文件

NoticeMapper.xml完整代码(update标签中记得不要漏掉逗号

<?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.blog.personblog.mapper.NoticeMapper">
    <resultMap id="BaseResultMap" type="com.blog.personblog.entity.Notice">
        <result column="notice_id" jdbcType="INTEGER" property="noticeId"/>
        <result column="notice_title" jdbcType="VARCHAR" property="noticeTitle"/>
        <result column="notice_TYPE" jdbcType="INTEGER" property="noticeType"/>
        <result column="status" jdbcType="INTEGER" property="status"/>
        <result column="notice_content" jdbcType="VARCHAR" property="noticeContent"/>
        <result column="create_by" jdbcType="VARCHAR" property="createBy"/>
        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
    </resultMap>

    <select id="getNoticePage" resultMap="BaseResultMap">
        select * from person_notice
    </select>

    <insert id="createNotice" parameterType="com.blog.personblog.entity.Notice" useGeneratedKeys="true" keyProperty="noticeId">
        INSERT INTO person_notice (notice_title, notice_type, status, notice_content, create_by)
        VALUES (#{noticeTitle},#{noticeType},#{status},#{noticeContent},#{createBy})
    </insert>

    <update id="updateNotice" parameterType="com.blog.personblog.entity.Notice">
        update person_notice
        <set>
            notice_title = #{noticeTitle},
            notice_type = #{noticeType},
            status = #{status},
            notice_content = #{noticeContent},
            create_by = #{createBy}
        </set>
        WHERE notice_id = #{noticeId}
    </update>

    <delete id="deleteNotice" parameterType="java.lang.Integer">
        delete from person_notice where notice_id = #{noticeId,jdbcType=INTEGER}
    </delete>

    
</mapper>

数据库的接口已经写好了,

接下来回到NoticeService的实现类NoticeServiceimpl中,

使用@Autowired引入Mapper

  @Autowired
  NoticeMapper noticeMapper;

使用@Autowired引入NoticeMapper,然后用noticeMapper去调用NoticeMapper中的接口

package com.blog.personblog.service.Impl;

import com.blog.personblog.config.page.PageRequest;
import com.blog.personblog.entity.Notice;
import com.blog.personblog.mapper.NoticeMapper;
import com.blog.personblog.service.NoticeService;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class NoticeServiceImpl implements NoticeService {

   @Autowired
   NoticeMapper noticeMapper;


    @Override
    public List<Notice> getNoticePage(PageRequest pageRequest) {
        int pageSize = pageRequest.getPageSize();
        int pageNum  = pageRequest.getPageNum();
        PageHelper.startPage(pageNum,pageSize);
        List<Notice> noticeList = noticeMapper.getNoticePage();
        return noticeList;
    }

    @Override
    public int saveNotice(Notice notice) {
        return noticeMapper.createNotice(notice);
    }

    @Override
    public int updateNotice(Notice notice) {
        return noticeMapper.updateNotice(notice);
    }

    @Override
    public void deleteNotice(Integer noticeId) {
        noticeMapper.deleteNotice(noticeId);

    }
}

1.6 编写控制层

编写Controller层,NoticeController.java

package com.blog.personblog.controller;


import com.blog.personblog.config.page.PageRequest;
import com.blog.personblog.config.page.PageResult;
import com.blog.personblog.entity.Notice;
import com.blog.personblog.service.NoticeService;
import com.blog.personblog.util.JsonResult;
import com.blog.personblog.util.PageUtil;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@Api(tags = "公告管理")
@RestController
@RequestMapping("/notice")
public class NoticeController {

    @Autowired
    NoticeService noticeService;


    /**
     * 分页查询列表
     * @param pageRequest
     * @return
     */
    @ApiOperation(value = "公告列表")
    @PostMapping("/list")
    public JsonResult<Object> listPage(@RequestBody @Valid PageRequest pageRequest) {
        List<Notice> noticePage = noticeService.getNoticePage(pageRequest);
        PageInfo pageInfo = new PageInfo(noticePage);
        PageResult pageResult = PageUtil.getPageResult(pageRequest, pageInfo);
        return JsonResult.success(pageResult);
    }

    /**
     * 添加
     * @param notice
     * @return
     */
    @ApiOperation(value = "添加公告")
    @PostMapping("/create")
    public JsonResult<Object> createNotice(@RequestBody @Valid Notice notice) {
        int saveNotice = noticeService.saveNotice(notice);
        if ( saveNotice == 0) {
            return JsonResult.error("添加公告失败");
        }
        return JsonResult.success();
    }

    /**
     * 修改公告
     * @param notice
     * @return
     */
    @ApiOperation(value = "修改公告")
    @PostMapping("/update")
    public JsonResult<Object> updateNotice(@RequestBody @Valid Notice notice) {
        int updateNotice = noticeService.updateNotice(notice);
        if ( updateNotice == 0) {
            return JsonResult.error("修改公告失败");
        }
        return JsonResult.success();
    }

    /**
     * 删除
     * @param id
     * @return
     */
    @ApiOperation(value = "删除公告")
    @PostMapping("/delete/{id}")
    public JsonResult<Object> deleteNotice(@PathVariable(value = "id") int id) {
        noticeService.deleteNotice(id);
        return JsonResult.success();
    }


}

完成之后打开Swagger接口文档地址:http://localhost:8081/blog/swagger-ui/index.html#

 

说明成功 

三、测试

打开Postman,进行测试

先测试“添加功能”

新建一个“公告管理”公共接口,在其下新建“添加功能”接口,填入相应的JSON数据,点击Send发送

 200表示添加成功

打开数据库,打开person_notice表格,刷新,可以看到新增的数据

测试”查询功能“

 在“公告管理”其下新建“公告列表”接口,填入相应的JSON数据,点击Send发送

 返回200,表示成功

测试”修改功能“

在“公告管理”其下新建“修改公告”接口,填入相应的JSON数据,点击Send发送

200表示修改成功

打开数据库,刷新person_notice表格 

修改前

修改后:

 

 测试”删除功能“

打开数据库,刷新person_notice表格 ,数据删除成功

到此,四个接口全部测试完毕

记得提交代码到gitee! 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot + vue-element 开发个人博客项目开发(十、通知公告功能实现) 的相关文章

  • Java中的整数除法[重复]

    这个问题在这里已经有答案了 这感觉像是一个愚蠢的问题 但我在 Java 文档中找不到答案 如果我声明两个 int 然后将它们相除 到底发生了什么 他们是否转换为floats doubles首先 划分 然后投射回integer 或者除法是作为
  • 如何替换引号之间出现的任何单词

    我需要能够替换所有出现的单词 and 仅当它出现在单引号之间时 例如 将字符串中的 and 替换为 XXX This and that with you and me and others and not her and him 结果是 T
  • 生成固定长度的随机数组[重复]

    这个问题在这里已经有答案了 我只是想更改我的代码 以便每次运行代码时都会生成固定长度 100 个整数的随机数组 而不仅仅是在代码中包含一个预先设置的数组 我对此很陌生 所以只需要正确方向的指导 谢谢 public class Selecti
  • 将命令行参数传递给可运行的 JAR [重复]

    这个问题在这里已经有答案了 我从 Eclipse 项目构建了一个可运行的 JAR 用于处理给定的 XML 文件并提取纯文本 但是 此版本要求将该文件硬编码在代码中 有没有办法做这样的事情 java jar wiki2txt enwiki 2
  • java中数字字符串间隔排序

    我正在与一些人一起上一个人课 其中有姓名 年龄范围等详细信息 年龄区间为 0 5 6 10 11 30 31 45 46 50 50 100 100 110 我正在上 Person 课name ageBand字符串间隔及其参数化构造函数 g
  • 创建 CXF Web 服务客户端时出现 ServiceConstructionException (scala+java+wsdl2java)

    这些其他问题暗示了解决方案 但我无法让它发挥作用 无法解析 http schemas xmlsoap org wsdl soap 的绑定 https stackoverflow com questions 26159206 could no
  • 如何在同一个项目中连接两个数据库MySQL和MongoDB?是否可以?

    目前我正在使用 Hibernate MySQL 和 Spring 配置对我来说运行良好 但是一旦我配置了另一个配置 mongo config xml 文件并尝试使用 mongodb 运行测试用例 它就显示创建名为 的 bean 时出错从第一
  • 如何从属性中获取枚举值

    我有一个带有值的枚举VALID and INVALID 它们有一个与之关联的布尔属性 我想根据我提供的布尔值获取枚举值 如果是true我应该得到VALID 如果是false我应该得到INVALID 我想根据成员变量的值 在如下所示的 get
  • 将一组 Java 对象转换为另一组对象的最佳方式是什么?

    这是一个真正的新手提出的基本 Java 问题 我有一组实现某个接口 接口 MyIfc 的Java对象 属于 MyClass 类 我有一组这些对象存储在我的类中的私有变量中 声明如下 protected Set
  • 0x0A 和 0x0D 之间的区别

    我正在研究蓝牙 我试图编写代码以在连接时继续监听输入流 我遇到了以下代码片段 int data mmInStream read if data 0x0A else if data 0x0D buffer new byte arr byte
  • 什么时候使用弱引用? [复制]

    这个问题在这里已经有答案了 我了解什么是 Java WeakReference 我想知道的是它通常用于解决哪种具体问题 有没有包含它们的模式 WeakReference and SoftReference当您想保留某些东西以备再次需要时使用
  • JPA Criteria API 任意数量的联接/子查询

    我需要使用以下实体构建相交类型查询 为了清楚起见 减少了实体 Entity and other stuff public class Member Id private Long id private String name Entity
  • 从 MySql 迁移:MariaDB 服务器意外关闭客户端连接

    由于许可 商业使用原因 我们正在从 MySql 迁移到 MariaDB 我们已经成功用 MariaDB 客户端 jar 替换了 MySql 连接器 jar 第一次更改 现在正在尝试用 MariaDB 服务器替换 MySql 服务器而不更改数
  • 使用 JSeperator - Java 时出现异常间隙

    我一直在开发 Swing GUI 并在添加后出现一些不寻常和不需要的间隙JSeperator 知道如何删除它们吗 或者任何其他选择来很好地实现这一目标 视觉描述 之前差距就很明显了JLabel 速度 及之后JSlider 相关代码 cont
  • 强制预先加载原本延迟加载的属性

    我有一个 Hibernate 对象 它的属性都是惰性加载的 大多数这些属性是其他 Hibernate 对象或 PersistentSet 现在我想强制 Hibernate 一次性加载这些属性 当然 我可以 触摸 这些属性中的每一个objec
  • FileNotFoundException(系统找不到指定的路径)

    我得到这个例外 java io FileNotFoundException C filename xml The system cannot find the path specified 使用此代码 FileWriter fileWrit
  • 三角形未在 OSX 上的 OpenGL 2.1 中绘制

    我正在学习有关使用 OpenGL 在 Java 中创建游戏引擎的教程 我正在尝试在屏幕上渲染一个三角形 一切运行良好 我可以更改背景颜色 但三角形不会显示 我还尝试运行作为教程系列的一部分提供的代码 但它仍然不起作用 教程链接 http b
  • 缓冲区溢出(与)缓冲区溢出(与)堆栈溢出[重复]

    这个问题在这里已经有答案了 可能的重复 堆栈溢出和缓冲区溢出有什么区别 https stackoverflow com questions 1120575 what is the difference between a stack ove
  • 使用 Java 8 时间将时间从一个时区转换为另一时区

    我正在尝试将日期转换为GMT 5 30 to EST与java 8ZonedDateTime String inputDate 2015 04 30 13 00 DateTimeFormatter sourceFormatter DateT
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些

随机推荐

  • nginx输出php错误日志,【问题解决】Nginx下开启php-fpm 输出php错误日志的设置

    最近在本地搭建的LNMP的开发环境 为了开发的时候不影响前端的正常开发就屏蔽的PHP里面php ini中的一些错误提示 但是这样一来 就影响到了后端开发的一些问题比如不能及时调试开发中的一些问题 nginx与apache不一样 在apach
  • 十八、搜索引擎

    搜索引擎ElasticSearch Lucene
  • 【bug】ImportError: cannot import name ‘_DataLoaderIter‘ from ‘torch.utils.data.dataloader‘

    pytorch版本的问题 架构本身的版本与实际的cuda环境以及想要跑通的代码不兼容 我遇到的问题是将pytorch版本降低 降到torch 1 0版本 对应的cuda环境也比较低 需要去网上对应着查一下cuda版本以及对应的pytorch
  • 基于JavaWeb三层架构的OA管理系统

    本系统是一个类似于培训学校的一个管理系统 系统角色有员工 学生 首页 它的左侧是后台管理系统的功能界面 右侧是前面的通过数据库查询的一个月或者是一年的统计信息 下面柱状图个折线图采用的是echarts架包通过数据库的信息实现的 都可以动态的
  • 全国计算机等级考试题库二级C操作题100套(第84套)

    第84套 函数fun的功能是 从三个形参a b c中找出中间的那个数 作为函数值返 回 例如 当a 3 b 5 c 4时 中数为4 请在程序的下划线处填入正确的内容并把下划线删除 使程序得出正确的结果 注意 源程序存放在考生文件夹下的BLA
  • 软件工程使用软件和软件所能画的图

    迅捷 业务流程图 软件结构图 功能框图 数据字典 序列图 用例图 Visio 业务流程图 软件结构图 功能框图 数据流图 数据字典 序列图 uml 用例图 类图 序列图 活动图 数据流图 Rose 用例图 包图 活动图 序列图 协作图 带有
  • 【测试开发】自动化测试 selenium 篇

    目录 一 什么是自动化测试 二 selenium 1 selenium的工作原理 2 selenium Java的环境搭建 Chrome浏览器 三 selenium中常用的API 1 定位元素 findElement 1 1 css选择语法
  • redis之mq实现发布订阅模式

    示例代码 github 概述 Redis不仅可作为缓存服务器 还可用作消息队列 本示例演示如何使用redis实现发布 订阅消息队列 在Redis中 发布者没有将消息发送给特定订阅者的程序 相反 发布的消息被描述为通道 而不知道 如果有的话
  • 分享Figma一些非常快速、省时、省力的功能和小技巧

    众所周知 越来越多的大工厂正在使用它figma了 那你的figma它是如何使用的 您是否遇到过一些问题或操作不方便的事情 今天 我想和大家分享Figma一些非常快速 省时 省力的功能和小技巧 因为文章属于直译 所以良心哥在编辑时帮你整理知识
  • [系统安全] 五十一.恶意家族分类 (2)基于API序列和深度学习的恶意家族分类实例详解

    您可能之前看到过我写的类似文章 为什么还要重复撰写呢 只是想更好地帮助初学者了解病毒逆向分析和系统安全 更加成体系且不破坏之前的系列 因此 我重新开设了这个专栏 准备系统整理和深入学习系统安全 逆向分析和恶意代码检测 系统安全 系列文章会更
  • 反馈及运放基础了解

    在电子电路中 将输出量 输出电压或输出电流 的一部分或全部通过一定的电路形式作用于输入回路 用来影响其输入量 放电电路的输入电压或输入电流 的措施称为反馈 基本放大电路的输入信号称为净输入量 它不但决定于输入信号 输入量 还与反馈信号 反馈
  • 将linux上的项目传到github上

    在网友的帮助下 终于学会了这一招 1 首先要确定你的linux上有安装了git 2 到你的网页github上新建一个仓库 将其clone到linux上 3 将你的项目放进这个空的仓库 文件夹 3 1 执行命令 git add 4 执行命令
  • 日语动作变形

    动1动词 动2动词 动3动词 基本型 可以作为连体形 行 買 帰 飲 呼 書 食 起 寝 変 準 変 変 来 连用形 行 買 帰 飲 呼 書 食 起 寝 変 準 変 変 来 体 也就是连用形 词尾由 段变为 段加 行
  • 这一年,谢谢自己

    兜兜转转间 这个开局有些艰难的2020就已经过半了 这些日子 你过得还好吗 不管是努力抵抗病痛 还是奋力工作生活 其实一直以来 我们都在路上 摸爬滚打 艰难前行 我们总是在追寻 在求索 为了所爱的人 而默默付出努力 却仍时时觉得对不起他们
  • 基于R语言tidyverse包的数据分析实践

    目录 1 tidyverse包基础 1 0 下载使用tidyverse 1 1 数据清洗 1 1 1 提取数据 1 1 2 数据整理与采样 1 1 3 缺省值处理 1 1 4 重复值处理 1 1 5 异常值处理 1 2 数据预处理 1 2
  • 【bug】ClassCastException 同一个类为什么还会类转换异常?

    错误日志 2021 11 11 20 51 18 304 maomao 3896 nio 8081 exec 2 ERROR c maomao common GlobalExceptionHandler 79 java lang Class
  • Kafka的认证

    Kafka支持基于SSL和基于SASL的安全认证机制 基于SSL的认证主要是指Broker和客户端的双路认证 即客户端认证broker的证书 broker也认证客户端的证书 Kafka还支持通过SASL做客户端认证 SASL是提供认证和数据
  • 数据结构与算法--图的深度优先搜索 (DFS)

    深度优先搜索即是 从起点出发 从规定的方向中选择一个不断往前走 走到头为止 然后尝试另一种方向直到最后的终点 DFS解决的是连通性问题 即从A是否能到达B 采用DFS进行遍历的话 必须依赖栈 后进先出 假设有一个图 里面有A B C D E
  • chromeOS中配置Java环境,部署Tomcat,Eclipse开发环境

    本文基于ChromeOS 版本107 0 5304 110 正式版本 基于java 1 8 0 202 基于apache tomcat 9 0 63 基于eclipse jee 2022 09 R 设置 开发者 Linux开发环境 启用 c
  • Spring Boot + vue-element 开发个人博客项目开发(十、通知公告功能实现)

    前面设计的通知公告中有两个字段不规范 现在我们重新调整一下 调整如下 原先的 noticeContent text NULL COMMENT 公告内容 createBy VARCHAR 128 NOT NULL COMMENT 创建者 修改