瑞吉外卖day3
1 公共字段自动填充
问题分析:
数据库表的设计都包含create_time、update_time、create_user、update_user,当我们需要进行修改操作的时候,很多表中都有这样的字段,这些字段可以归列为公共字段:能不能让这些字段在某个地方统一处理,来简化开发?
答案就是使用mybatisplus提供的公共字段自动填充
mybatisplus公共字段自动填充:就是在插入或者更新的时候指定字段赋予指定的值,避免代码重复
实现步骤:
1、在实体类的属性上加入@TableField,指定自动填充策略
2、按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjecHandler接口
2 改造员工信息修改方法
删除原有赋值语句,创建公共类
1 | public class MyMetaObjectHandler implements MetaObjectHandler { |
但是这样有一个问题:创建者和修改者信息是写死的,正常应该是谁去修改就填充谁的信息,有一种解决思路是:获取http请求中的session来赋值,但是metaObjectHandler中是不能获得httpsession对象的,所以只能使用以下方法来获取登陆用户id。
可以使用ThreadLocal来解决,这是JDK中的一个类
看完3之后,可以这样解决:
在LoginCheckFilter中的doFilter方法中获取当前用户登录的id,然后调用ThreadLocal的set方法将用户id赋值,然后在MyMetaObjectHandler中的updateFill方法中调用ThreadLocal的get方法取值。
实现步骤:
1、编写BaseContext工具类,基于ThreadLocal封装的工具类
2、在LoginCheckFilter的doFilter中调用赋值
3、在MyMetaObjectHandler中调用取值
1 | /** |
3 ThreadLocal学习
客户端每次发送http请求,服务端会分配一个新的线程来处理,在修改员工信息的功能中,经过以下类的是同一线程:
1、LoginCheckFilter的doFilter方法
2、EmployeeController的update方法
3、MyMetaObjectHandler的updateFill方法
我们如何证明这一点?
可以在以上方法中使用thread.currentThread().getid();来获取当前线程id
1、什么是ThreadLocal
ThreadLocal并不是一个线程,而是线程的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都可以独立的更改自己的副本,并不会影响其他线程副本。
ThreadLocal为每个线程提供单独的存储空间,具有线程隔离的效果,只能在线程内取值
2、常用方法
1 | public void set(T value) 设置当前线程的线程局部变量值 |
4 新增分类功能
需求分析:
后台分类,包括两种类型,分别是菜品分类和套餐分类。当我们在后台系统中添加菜品时需要选择一个菜品分类,当我们在后台徐彤中添加一个套餐时需要选择一个套餐分类,在移动端也会按照菜品分类和套餐分类来展示对应的菜品和套餐
代码开发:
需要先将需要用到的类和接口基本结构创建好:
- 实体类:Category
- Mapper接口CategoryMapper
- 业务层接口CategoryService
- 业务层实现类CategoryServiceImpl
- 控制层CategoryController
分析执行过程:
1.在页面上发送ajax请求,将新增的数据以json的数据返回给服务端
2.在服务端的Controller当中接受提交的数据,并调用Service进行保存
3.Service调用Mapper操作数据库,保存数据
5 分类信息的分页查询
代码开发:
1.页面发送ajax请求,将Page,PageSize以json的形式传入服务端
2.Controller层接受数据,并调用service层进行处理
3.service层操作mapper,保存到数据库当中
4.controller将数据会返回给页面
5.页面通过ElementUI的table组件显示分页效果
6 删除分类
需求分析:在分类管理列表页面,可以对某个分类进行删除操作,主要问题是当分类关联了菜品或者套餐时,此分类不能删除
代码开发:
1.页面发送ajax请求,将参数{id}提交到服务端
2.controller接受页面数据并调用service删除数据
4.servic调用mapper操作数据库
功能完善:
上面已经完成了删除功能,但是没有检查数据的分类是否关联了菜品或者套餐,所以需要以下操作:
菜品和套餐基本代码写好
7 修改分类
需求分析:在分类管理页面有修改按钮,点击之后会回显原来的数据,修改成功之后,还会要自动更新修改人、修改时间。