springboot3项目练习详细步骤(第二部分:文章分类模块)

 

新增文章分类

接口文档

业务实现

参数校验

文章分类列表

接口文档

业务实现 

获取文章分类详情

接口文档 

业务实现

更新文章分类

接口文档 

业务实现

分组校验

问题

概念 

实现步骤

总结

删除文章分类

接口文档

业务实现 


该模块大部分请求的路径相同,接口功能区分方式按请求方式不同而进行区分 

文章分类业务表结构

 新增文章分类

 接口文档

 业务实现

 创建CategoryController控制类并编写实现方法

@RestController //定义为控制类
@RequestMapping("/category") //设置请求映射路径
public class CategoryController {@Autowiredprivate CategoryService categoryService; //注入CategoryService@PostMappingpublic Result add(@RequestBody Category category){categoryService.add(category);return Result.success();}
}

 创建CategoryService接口并添加抽象方法

void add(Category category);

创建CategoryServiceimpl接口实现类

@Service
public class CategoryServiceimpl implements CategoryService {@Autowiredprivate CategoryMapper categoryMapper; //注入CategoryMapper接口@Overridepublic void add(Category category) {//补充添加id属性值Map<String,Object> map = ThreadLocalUtil.get();Integer id = (Integer) map.get("id");category.setCreateUser(id);categoryMapper.add(category);Result.success();}
}

 创建CategoryMapper接口用于操作mybatis

@Mapper
public interface CategoryMapper {//新增@Insert("insert into category(category_name,category_alias,create_user,create_time,update_time)" +"values(#{categoryName},#{categoryAlias},#{createUser},now(),now()) ")void add(Category category);
}

运行请求查看

 数据库中已成功添加该记录

参数校验

用到上一篇讲到的对实体对象变量进行参数校验必须要传入有效参数

 

文章分类列表

 接口文档

业务实现 

编写CategoryController中的请求的方法

    @GetMappingpublic Result<List<Category>> list(){List<Category> cs = categoryService.list();return Result.success(cs);}

编写CategoryService接口抽象方法

    //列表List<Category> list();

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic List<Category> list() {Map<String,Object> map = ThreadLocalUtil.get();Integer id = (Integer) map.get("id");return categoryMapper.list(id);}

编写CategoryMapper接口的方法

    //查询列表@Select("select * from category where create_user = #{id}")List<Category> list(Integer id);

 运行请求查看

 发现返回的日期格式有问题,需要转换一下

在实体类日期属性变量上使用@JsonFormat注解用于指定日期格式

重新运行项目再请求查看日期格式已指定好了

 

获取文章分类详情

接口文档 

业务实现

编写CategoryController中的请求的方法

    @GetMapping("/detail")public Result<Category> detail(){Category c = categoryService.findById();return Result.success(c);}

编写CategoryService接口抽象方法

    //根据id查询信息Category findById(Integer id);

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic Category findById(Integer id) {Category c =categoryMapper.findById(id);return c;}

编写CategoryMapper接口的方法

    //根据id查询信息@Select("select * from category where id = #{id}")Category findById(Integer id);

运行请求查看

 

更新文章分类

接口文档 

业务实现

在实体类中对id成员变量加上注解进行参数校验 

编写CategoryController中的请求的方法

    @PutMappingpublic Result update(@RequestBody @Validated Category category){categoryService.update(category);return Result.success();}

编写CategoryService接口抽象方法

    //更新分类void update(Category category);

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic void update(Category category) {categoryMapper.update(category);}

编写CategoryMapper接口的方法

    //更新分类@Select("update category set category_name=#{categoryName},category_alias=#{categoryAlias},update_time=now() where id=#{id}")void update(Category category);

运行请求查看

 

分组校验

问题

对实体成员变量进行参数校验时,不同的请求参数类型和需要的参数数量不同,如果按照其中一个接口的规范写死那么另一个接口所需的类型参数就会冲突导致不通过。所以需要对不同的接口单独定义参数校验 

概念 

  • 把校验项进行归类分组,在完成不同的功能的时候,校验指定组中的校验项
  • 定义分组
  • 定义校验项时指定归属的分组
  • 校验时指定要校验的分组

实现步骤

对添加文章和更新文章进行参数分组校验

在实体类中定义内部接口

对成员变量指定校验项分组

 在接口方法传参时对属性指定分组

这样就分组好了,然后请求参数也不会互相影响。 

 

总结

  1. 在实体类内部定义接口来定义分组
  2. 通过groups属性指定对校验项分组
  3. 给@Validated注解的value属性赋值用于指定分组
  4. 校验项默认属于Default分组
  5. 定义校验项时如果没有指定分组,则属于Default分组,分组可以继承

删除文章分类

接口文档

业务实现 

编写CategoryController中的请求的方法

    @DeleteMappingpublic Result delete(Integer id){categoryService.delete(id);return Result.success();}

编写CategoryService接口抽象方法

    //删除分类void delete(Integer id);

编写CategoryServiceimpl接口实现类的方法

    @Overridepublic void delete(Integer id) {categoryMapper.delete(id);}

编写CategoryMapper接口的方法

    //删除分类@Delete("delete from category where id = #{id}")void delete(Integer id);

运行请求查看

 数据库中已成功删除

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

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

相关文章

使用idea管理docker

写在前面 其实idea也提供了docker的管理功能&#xff0c;比如查看容器列表&#xff0c;启动容器&#xff0c;停止容器等&#xff0c;本文来看下如何管理本地的docker daemon和远程的dockers daemon。 1&#xff1a;管理本地 双击shift&#xff0c;录入service&#xff1a; …

电脑设置在哪里打开?Window与Mac双系统操作指南

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;对于许多初学者来说&#xff0c;如何找到并熟悉电脑的设置界面可能是一个挑战。特别是对于那些同时使用Windows和Mac双系统的用户来说&#xff0c;更是需要一篇详尽的指南来…

SSL证书选择免费还是付费 ?

目前在市场上既有免费的ssl证书&#xff0c;也有付费的ssl证书&#xff0c;那到底如何选择呢&#xff1f;下面我们来看看二者的区别 1验证级别不同 免费ssl证书通常只提供的是域名验证&#xff08;DV&#xff09;证书&#xff0c;仅验证域名的所有权&#xff0c;不涉及组织身…

vue2 webpack-dev-server Unknown promise rejection reason

在vue.config.js中添加如下配置&#xff0c;重启项目即可 module.exports defineConfig({devServer: {client: {overlay: false,},} })参考

Java实现手机短信验证码(互亿无线)

互亿无线 互亿无线是一家提供电信类增值服务插件以及其他相关插件的公司&#xff0c;是中国移动、中国联通、中国电信三大运营商的战略合作伙伴与工信部认定的电信增值业务服务商。公司旗下运营三大业务平台&#xff1a;数字奖励营销活动平台、应用短信平台、营销短信平台。 官…

IJCAI 2024:吉林大学、中国科学院计算技术研究所和自动化研究所等揭示数据增强在开放场景下的“两面性”

吉林大学人工智能学院研究员高一星、中国科学院计算技术研究所副研究员唐帆、中国科学院自动化研究所研究员董未名等在人工智能领域的CCF-A类顶级国际会议IJCAI上发表的工作&#xff0c;揭示并分析基于样本混合的数据增强方法在开放场景下存在的问题&#xff0c;提出了基于非对…

vue实现点击选中以下内容按钮选中按钮位置以下的所有数据项

1、预期效果 该需求的由来&#xff0c;是公司的产品为了实现如飞书这款应用中&#xff0c;IM聊天界面多选消息时一个快捷选择消息的操作功能。 2、实现思路 1. 使选择按钮悬浮在列表试图上方&#xff1b; 2. 在鼠标按下按钮时在其样式添加 pointer-events: none 使鼠标点击…

揭秘马斯克的日常:凌晨3点睡,每天苦恼开哪辆车,曾一度每周工作120小时 | 最新快讯

作为特斯拉和 SpaceX 的首席执行官&#xff0c;同时也是社交媒体平台X&#xff08;前身为推特&#xff09;的拥有者&#xff0c;埃隆马斯克以其在科技和商业领域的杰出成就而闻名。他的成功与其独特而苛刻的日常生活习惯密切相关。 上班前必须先洗澡 通勤时苦恼开哪辆特斯拉 据…

某大型文旅集团车辆维修公司薪酬绩效改革项目纪实 图片附件

---如何通过绩效薪酬改革&#xff0c;帮助公司降本增效 文旅行业“旺丁不旺财”&#xff1f;学会这样激励人才&#xff01;“五一”假期出游继续呈现火爆态势&#xff0c;但也出现了一些“旺丁不旺财”“增收不增利”的现象。文旅行业最重要的还是人力因素&#xff0c;靠人去做…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制&#xff0c;以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统&#xff0c;不仅具有全球性、全…

AF594-标记羊抗鼠免疫球蛋白(H+L),山羊抗小鼠IgG全长抗体已被交叉吸附在抗人IgG和人血清上,然后再偶联以小化交叉反应性

试剂介绍&#xff1a; AF594-标记羊抗鼠免疫球蛋白(HL)是荧光标记二抗&#xff0c;我们的山羊抗小鼠IgG全长抗体已被交叉吸附在抗人IgG和人血清上&#xff0c;然后再偶联以小化交叉反应性。 这种AF594标记的山羊抗小鼠IgG缀合物通过交叉吸附的山羊抗小鼠IgG全抗体与AF594 NHS酯…

python-scrapy框架示例

参考&#xff1a;https://blog.csdn.net/qq_44907926/article/details/119531324 创建项目步骤&#xff1a; 1.目标网站:www.itcast.cn 2.安装虚拟环境 pip install virtualenv3.创建虚拟环境 virtualenv --always-copy --system-site-packages venv4.激活虚拟环境 venv\sc…

便捷的驾驶证识别API,简化工作流程

随着社会的发展和人们生活水平的提高&#xff0c;机动车的数量也越来越多。为了确保交通安全和减少违法行为&#xff0c;每个驾驶机动车的人都需要携带驾驶证。然而&#xff0c;识别驾驶证上的信息却是一个繁琐的过程。为了简化这个工作流程&#xff0c;提高工作效率&#xff0…

信创基础软件之数据库

一、数据库概述 数据库是一种用于存储和管理拥有固定格式和结构数据的仓库型数据管理系统。其主要用于业务数据的存储和业务逻辑运算&#xff0c;具体负责保障数据的安全性、完整性、多用户对数据的并发使用以及发生故障后的系统恢复。 二、数据库的体系架构 数据库内核:对数…

这份攻防图谱,哪个搞安全的见了会不想要?(附下载)

近年来&#xff0c;随着我国信息化建设不断推进&#xff0c;信息技术广泛应用&#xff0c;信息网络快速普及。信息网络在促进经济发展、社会进步、科技创新的同时&#xff0c;也带来十分突出的信息安全问题。 现今的网络攻击手段逐步多样化、攻击方式也更加隐蔽难以发现。对于…

信息安全-古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

WebSocket 全面解析+实战演练(Nodejs实现简易聊天室)

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f31f; 引言&#x1f4da; WebSocket基础概念&#x1f4cc; 什么是WebSocket&#xff1f;&#x1f4cc; 为什么需要WebSocket&#xff1f;&#x1f4cc; 与HTTP的关系 &#x1f4bb; WebSocket API 使用指南&#x1…

《学周刊》杂志社学周刊杂志社学周刊编辑部2024年第15期目录

高等教育 人工智能时代的高校人才培养模式创新探讨 潘邦超; 1-3 高等院校视角下的“家校社”协同育人问题及对策研究——以驻盐高校为例 张雨清; 4-6 职业教育《学周刊》投稿&#xff1a;cn7kantougao163.com 基于EST理念的中职《成本会计》课程混合式教学策略研究…

JAVA中的线程、死锁、异常

线程 Thread 一、程序 1&#xff0e;一段静态代码&#xff08;静态&#xff09; 二、进程 1&#xff0e;动态的&#xff0c;有开始&#xff0c;有结束&#xff1b;2&#xff0e;程序的一次执行过程&#xff0c;3&#xff0e;操作系统调度分配资源的最小单位&#xff1b; 三、…

循环编码:时间序列中周期性特征的一种常用编码方式

在深度学习或神经网络中&#xff0c;“循环编码”&#xff08;Cyclical Encoding&#xff09;是一种编码技术&#xff0c;其特点是能够捕捉输入或特征中的周期性或循环模式。这种编码方法常用于处理具有周期性行为的任务&#xff0c;比如时间序列预测或理解展示周期性特征的序列…