编码阶段二 —— 菜品管理
这是对应的视频链接【黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目-哔哩哔哩】 https://b23.tv/3nr8oMw
大家如果做了可以一起探讨一下,我在这实现了那些视频中没有完成的功能
此阶段重要掌握的是菜品管理,包括增删改查等,需要特别要关注的是数据的回显,文件上传下载功能显示图片。当然其中使用DTO来传输数据的方式得比较熟练掌握,以后到公司对于我们初级程序员就做的增删改查这些东西。另外我也在这一阶段有一个bug,就是关于动态代理的问题,因为我通过@Autowired自动注入service的实现类而不是接口的方式来产生bean,这就会导致spring底层不知道你是用哪种方式的动态代理而报错,大家在编码的时候记得养成良好的编码习惯。我会在下一篇博客中好好整理jdk动态代理和cglib代理的区别以及spring底层使用动态代理的原理,大家可以点个赞收藏关注一波,一起进步。
菜品分类实体类
@Data
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//类型 1 菜品分类 2 套餐分类
private Integer type;
//分类名称
private String name;
//顺序
private Integer sort;
//创建时间
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
//更新时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
//创建人
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//修改人
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
}
公共字段自动填充,例如修改时候的updateTime,updateUser等等,配置之后就可以使得带有注解的公共字段在插入或修改时进行自动填充,减少代码的冗余。
/**
* 自定义元数据对象处理器
* @author William
* @create 2022-04-22 13:26
*/
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 插入操作,自动填充
*@Param [metaObject]
*@Return
*/
@Override
public void insertFill(MetaObject metaObject) {
log.info("公共字段自动填充[insert]...");
log.info(metaObject.toString());
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("createUser", BaseContext.getCurrentId());
metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
/**
* 更新操作,自动填充
*@Param [metaObject]
*@Return
*/
@Override
public void updateFill(MetaObject metaObject) {
log.info("公共字段自动填充[update]...");
log.info(metaObject.toString());
long id = Thread.currentThread().getId();
log.info("线程id为:{}", id);
metaObject.setValue("updateTime", LocalDateTime.now());
metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
}
菜品分类实体类
@Data
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//类型 1 菜品分类 2 套餐分类
private Integer type;
//分类名称
private String name;
//顺序
private Integer sort;
//创建时间
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
//更新时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
//创建人
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//修改人
@TableField(fill = Fie