填充公共字段:
目的:由于某些属性,例如createdTime这些需要填充的字段会在多个地方出现,所以考虑使用公共字段自动填充的办法减少重复代码。
在对应属性上加入@TableField注解。通过fill字段表明策略,是插入/更新的时候填充字段。
实现MyMetaObjectHandler处理器类,实现MetaObjectHandler接口。可以拦截到插入对象/更新对象时字段自动填充的操作。
获取createUser和updateUser时,需要根据session获取,然而这个类中无法获取到session。
可以考虑使用ThreadLocal线程类获取到员工id,因为从用户登录验证->更新员工信息->元数据处理器算一次请求,使用的是同一线程,所以可以获取到相同的员工id。
创建基于ThreadLocal的工具类,用来设置、查看同一线程中保存的变量。
根据以上工具类修改代码:
登录检查,将需要保存的当前用户ID存入线程中。
当新增、修改信息时,再次使用工具类获取当前用户ID。
新增菜品/套餐分类:
先创建实体类
创建对应的mapper,service,serviceImpl,controller。
点击新增分类,可以看到请求接口如下:
添加接口:
查看前端代码,发现封装的json对象只需要code这个属性,所以服务器封装泛型只需要封装成String类型即可。
运行的时候报错,idea Error:(13, 52) java: 找不到符号 符号: 类 Category。明明有这个类,但是找不到。解决办法:在控制台使用mvn clean清除缓存,重新启动就好了
类别分页查询:
照着之前的改改,用sort字段排个序就行。
删除分类:
由于删除分类时,需要查看分类是否关联菜品和套餐,所以需要先创建Dish和Setmeal实体类。创建对应的Mapper类和Service类和ServiceImpl类。
前端删除请求如下:
后端代码(重写categoryService的remove方法,考虑到不能删除关联菜品、套餐的类别):
查询关联菜品,若有关联抛出异常。
创建异常类。
在全局异常管理器捕捉异常,并向前端返回友好提示。
修改类别:
前端发送的请求:
后端代码: