更新文章分类

总说

过程参考黑马程序员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保存一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值