更新文章分类
总说
过程参考黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili
目录
总说
一、功能实现
1.1 Controller层
1.2 Service层
1.3 Impl层
1.4 Mapper层
1.5 pojo层
1.6 测试接口
二、优化
2.1 参数校验优化
2.2 细节优化
一、功能实现
根据id来进行查找
1.1 Controller层
来到CategoryController
添加代码如下:
//更新分类
@PutMapping
public Result update(@RequestBody @Validated Category category){
categoryService.update(category);
return Result.success();
}
1.2 Service层
来到CategoryService,添加代码如下:
//更新分类
void update(Category category);
1.3 Impl层
来到CategoryServiceImpl,添加代码如下:
@Override
public void update(Category category) {
category.setUpdateTime(LocalDateTime.now());// 更新时间
categoryMapper.update(category);
}
1.4 Mapper层
来到CategoryMapper,添加代码如下:
//更新分类
@Update("update category set category_name = #{categoryName},category_alias = #{categoryAlias},update_time = #{updateTime} where id = #{id}")
void update(Category category);
1.5 pojo层
来到pojo层的category, 在id上面添加注解如下:
进行参数检验
1.6 测试接口
创建一个新的测试接口
如下图所示:
id和name要和数据库中一条数据相对应,
二、优化
2.1 参数校验优化
由于我们添加参数校验是直接添加到pojo里的,由于实体类是共用的,在pojo的字段上面直接添加参数校验,可能会影响到其他接口的正常使用。
在刚刚的更新操作中,我们对id的参数校验不为空,但是我们之前的添加操作不需要传入id,id自增长,但是不传入id无法进行下一步了。
解决的办法就是对校验的方法进行分组。
在pojo中,定义不同分组项目
然后在注解中选择分组,可以选择多个分组
在检验时,也表明分组即可
先来定义分组。
来到pojo层的Category,定义两个接口add和update,再在上面注解中添加分组,如下:
@Data
public class Category {
//添加分组
@NotNull(groups = Update.class)
private Integer id;//主键ID
//多个分组用{}
@NotEmpty(groups = {Add.class,Update.class})
private String categoryName;//分类名称
@NotEmpty(groups = {Add.class,Update.class})
private String categoryAlias;//分类别名
private Integer createUser;//创建人ID
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;//创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;//更新时间
//分组接口add
public interface Add{
}
//分组接口update
public interface Update{
}
}
来到CategoryController,在add方法中的注解添加相应分组Add
在add方法中修改如下:
public Result add(@RequestBody @Validated({Category.Add.class}) Category category)
在update方法中修改如下:添加Update分组
//更新分类
@PutMapping
public Result update(@RequestBody @Validated({Category.Update.class}) Category category){
categoryService.update(category);
return Result.success();
}
然后我们来进行测试添加接口:
这里我们不需要传入id,如果不分组,像我们之前要是在id上面添加注解,这里就必须传入id
在测试一下更新接口,id和name要和数据库中的对应:
2.2 细节优化
来到pojo层的Category
规定
某个校验项目没有指定分组,默认为Default分组
分组之间可以继承,A extends B,那么A中拥有B中所有的校验项
那么代码如下:
@Data
public class Category {
//添加分组
@NotNull(groups = Update.class)
private Integer id;//主键ID
@NotEmpty
private String categoryName;//分类名称
@NotEmpty
private String categoryAlias;//分类别名
private Integer createUser;//创建人ID
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;//创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;//更新时间
//如果说某个校验项没有指定分组,默认属于Default分组
//分组之间可以继承, A extends B 那么A中拥有B中所有的校验项
//分组接口add
public interface Add extends Default{
}
//分组接口update
public interface Update extends Default{
}
}
categoryName和categoryAlias都属于Default分组了,而Add分组和Update分组都继承了Default分组的内容,所以都包含了categoryName和categoryAlias
而id只属于Update分组。
再次进行测试:
最后上传git保存一下