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(Integer id){Category c = categoryService.findById(id);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://www.hqwc.cn/news/685788.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 209 长度最小的子数组(滑动窗口and暴力)

、 法一&#xff1a;滑动窗口 //使用滑动窗口来解决问题 //滑动窗口的核心点有&#xff1a; /*1.窗口内是什么&#xff1f;2.如何移动窗口的起始位置&#xff1f;3.如何移动窗口的结束位置&#xff1f;4.两个指针&#xff0c;怎么判断哪个指针是终止指针&#xff0c;哪个指针…

智慧无人店运营再添黑马,萤石云值守服务显身手

许多创业者选择开店&#xff0c;是出于对自由生活的向往。然而&#xff0c;现实总会给人重重一击。老板们常常面临着熬夜看店、全年无休的困境&#xff0c;而选择增加雇佣员工看店又会面临着成本高昂、利润微薄的问题。“开店容易守店难”、“没有自由”成为了许多店主的共同心…

numpy1

注意&#xff1a;reshape函数的 - 1&#xff08;是让电脑 自己计算的意思 import numpy as np n np.arange(0,25).reshape(5,5) m np.array([0,5,10,15,20])nn np.repeat(n,2,axis 1) m m.reshape(-1,1)nn[:,1:8:2] np.tile(m,(1,4)) nn[:,0:-1]

以导航产品为核心,东软想为车企扫除出海障碍

得益于新能源汽车领域多年的布局&#xff0c;以及在汽车智能化方面的先发优势&#xff0c;近年来&#xff0c;中国汽车品牌在质与量上都得到了极大提升&#xff0c;并带来强大的竞争力。 据海关总署公布的数据&#xff0c;过去三年&#xff0c;中国汽车出口规模连续突破式发展…

机器学习的一些知识点分享

下面数据集中&#xff0c;第2个样本的第4个属性的值是&#xff08; &#xff09;。 A 52 B 男 C 50 D 49 本题得分&#xff1a; 2分 正确答案&#xff1a; D 2.单选题 (2分) 10-折交叉验证是把数据集分成&#xff08; &#xff09;个子集&#xff0c;将其中&#xff…

Java数据结构(链表实战二)

前言 基于链表的操作比较多&#xff0c;希望通过一系列的实战操作&#xff0c;加深对链表的理解和应用。每日更新两题&#xff0c;希望学习的小伙伴关注一波&#xff0c;评论区欢迎讨论交流。 今日份练习 leetcode合并两个有序链表 实现原理 1.先建一个dummy的链表&#x…

智能创作时代:AI引领下的内容生产革命与效率提升

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【stm32笔记】DSP库调用

参考&#xff1a;DSP库调用 , __CC_ARM,__TARGET_FPU_VFP, __FPU_PRESENT1U, ARM_MATH_CM4 ,USE_HAL_DRIVER,STM32F407xx,ARM_MATH_CM4,__FPU_USED1U,__FPU_PRESENT1U,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING把需要的库复制出来单独用&#xff0c;方便移植

OC foudation框架(上)学习

foundation框架 文章目录 foundation框架字符串&#xff08;NSString && NSMutableString&#xff09;NSString的其他功能NSMutableString 日期与时间 &#xff08;NSDate&#xff09;2.1 日期与时间&#xff08;NSDate&#xff09;2.2日期格式器日历与日期组件定时器&…

Java入门基础学习笔记8——注释

1、注释&#xff1a; 注释是写在程序中对代码进行解释说明的文件&#xff0c;方便自己和其他人查看&#xff0c;以便理解程序的。 package cn.ensource.note;/**文档注释文档注释 */ public class NoteDemo {public static void main(String[] args) {// 单行注释System.out.…

【二叉树算法题记录】二叉树的所有路径,路径总和——回溯

目录 257. 二叉树的所有路径题目描述题目分析cpp代码 112. 路径总和题目描述题目分析cpp代码 257. 二叉树的所有路径 题目描述 给你一个二叉树的根节点root &#xff0c;按任意顺序&#xff0c;返回所有从根节点到叶子节点的路径。 题目分析 其实从根节点往下走&#xff0c…

vue cmd执行报错 ‘vue‘ 不是内部或外部命令

使用vue脚手架快速搭建项目&#xff0c;在cmd中执行&#xff1a;vue init webpack vue-demo&#xff0c;报错&#xff1a; vue 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方法&#xff0c;执行如下的命令 npm config list 注意&#xff1a;找到prefix等号后…