位置: IT常识 - 正文

瑞吉外卖项目:编辑员工信息与公共字段自动填充(瑞吉外卖项目简历)

发布时间:2024-01-17
瑞吉外卖项目:编辑员工信息与公共字段自动填充

目录

一. 编辑员工信息

1.1 需求分析

1.2 代码编写

执行流程

后端代码

二. 项目公共字段填充

2.1 问题分析

2.2 代码实现

2.3 功能完善


一. 编辑员工信息1.1 需求分析

推荐整理分享瑞吉外卖项目:编辑员工信息与公共字段自动填充(瑞吉外卖项目简历),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:瑞吉外卖项目怎么包装简历,瑞吉外卖项目选题说明,瑞吉外卖项目总结,瑞吉外卖项目,瑞吉外卖项目,瑞吉外卖项目,瑞吉外卖项目会被问什么,瑞吉外卖项目会被问什么,内容如对您有帮助,希望把文章链接给更多的朋友!

在员工管理列表点击编辑按钮,跳转至编辑页面后,回显员工数据进行修改。

请求URL:

http://localhost:8080/backend/page/member/add.hml?id=1519713809428660226

编辑页面使用的是添加页面,不一样的是编辑页面需要携带传递的参数ID去修改员工对象。 

1.2 代码编写执行流程

在开发代码之前需要梳理一下操作过程和对应的程序的执行流程:

点击编辑按钮时,页面跳转到add.html,并在url中携带参数员工ID在add.html页面获取url中的参数员工ID发送ajax请求,请求服务端,同时提交员工id参数服务端接收请求,根据员工id查询员工信息,将员工信息以ison形式响应给页面页面接收服务端响应的ison数据,通过VUE的数据绑定进行员工信息回显点击保存按钮,发送aiax请求,将页面中的员工信息以ison方式提交给服务端服务端接收员工信息,并进行处理,完成后给页面响应页面接收到服务端响应信息后进行相应处理后端代码

EmployeeController

/** * 根据ID查询员工信息 * @param id * @return */@GetMapping("/{id}")public R<Employee> getById(@PathVariable Long id){ log.info("根据ID查询员工信息"); Employee employee = employeeService.getById(id); return R.success(employee);}二. 项目公共字段填充2.1 问题分析

新增员工时需要设置时间,创建人,修改时间,修改人等字段,在编辑员工的时候也要设置这些字段,这些属于公共的字段可以使用MybatisPlus提供的公共字段填充功能,避免代码重复:

2.2 代码实现瑞吉外卖项目:编辑员工信息与公共字段自动填充(瑞吉外卖项目简历)

实现步骤:

实体类的属性上加入@TableField注解,指定自动填充的策略按照框架编写元数据对象处理器,同一字段赋值,实现MetaObjectHandler接口

MyMetaObjecthandler.java

package com.itheima.reggie.common;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import lombok.extern.slf4j.Slf4j;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.time.LocalDateTime;/** * 自定义元数据对象处理器 */@Component@Slf4jpublic class MyMetaObjecthandler implements MetaObjectHandler { /** * 插入操作,自动填充 * @param metaObject */ @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 */ @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()); }}2.3 功能完善

上面的代码还是有所欠缺,无法获得创建的用户和更新的用户导致程序报错,使用ThreadLocal可以解决无法获取session中的员工ID的问题。

当客户端发送的每次的Http请求,对应的服务器都会分配一个新的线程来处理,处理过程中下面的类所属方法都属于一个线程:

LoginCheckFilter的doFilter的方法EmployeeController的update方法MyMetaObjectHandler的updateFill方法

可以在上面的三个方法中分别加入下面代码(获取当前线程ID):

long id = Thread.currentThread().getId();log.info("线程id为:{}",id);

什么是ThreadLocal?

ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。

ThreadLocal常用方法

public void set(Tvalue):设置当前线程的线程局部变量的值 public T get(): 返回当前线程所对应的线程局部变量的值 

我们可以在LoainCheckFilter的doFilter方法中获取当前登录用户id,并调用ThreadLocal的set方法来设置当前线程的线程局部变量的值用户ID,然后使用MyMetaObjectHandler的updateFill方法姥获取用户ID

具体实现步骤:

编写BaseContext工具类,基于ThreadLocal封装的工具类在LoginCheckFilter的doFilter方法中调用BaseContext来设置当前登录用户的id在MyMetaObjectHandler的方法中调用BaseContext获取登录用户的id

BaseContext.java

package com.itheima.reggie.common;/** * 基于ThreadLocal封装工具类,用户保存和获取当前登录用户id */public class BaseContext { private static ThreadLocal<Long> threadLocal = new ThreadLocal<>(); /** * 设置值 * @param id */ public static void setCurrentId(Long id){ threadLocal.set(id); } /** * 获取值 * @return */ public static Long getCurrentId(){ return threadLocal.get(); }}

LoginCheckFilter.java的doFilter方法中加入:

Long empId = (Long) request.getSession().getAttribute("employee");BaseContext.setCurrentId(empId);

改完之后,测试后功能与之前一样,说明无问题。

本文链接地址:https://www.jiuchutong.com/zhishi/298784.html 转载请保留说明!

上一篇:IntersectionObserver API详解(IntersectionObserver 翻译)

下一篇:Openlayers 快速上手教程(openlayers6教程)

  • 电脑登录微信手机上的显示怎样隐藏(电脑登录微信手机为何没有提示音)

    电脑登录微信手机上的显示怎样隐藏(电脑登录微信手机为何没有提示音)

  • 华为荣耀9x能用闪充吗(华为荣耀9x能用6A快速充电器吗)

    华为荣耀9x能用闪充吗(华为荣耀9x能用6A快速充电器吗)

  • 拼多多不可以一次购买多种产品吗(拼多多不可以一次性付款吗)

    拼多多不可以一次购买多种产品吗(拼多多不可以一次性付款吗)

  • 方舟编译器有什么作用(方舟编译器什么意思)

    方舟编译器有什么作用(方舟编译器什么意思)

  • 大4pin接口插哪里(大4pin接口插哪里风扇)

    大4pin接口插哪里(大4pin接口插哪里风扇)

  • 笔记本intel可以撕掉吗(intel笔记本怎么样)

    笔记本intel可以撕掉吗(intel笔记本怎么样)

  • 苹果6sp突然没声音了怎么回事(苹果6sp突然没声音了)

    苹果6sp突然没声音了怎么回事(苹果6sp突然没声音了)

  • 手机摔地上黑屏了怎么办(手机摔地上黑屏了多少钱修好)

    手机摔地上黑屏了怎么办(手机摔地上黑屏了多少钱修好)

  • sim卡未启用什么原因(sim卡未启用有什么好处)

    sim卡未启用什么原因(sim卡未启用有什么好处)

  • oppo静音闹钟会响吗(手机静音闹钟会响吗 oppo)

    oppo静音闹钟会响吗(手机静音闹钟会响吗 oppo)

  • iphone11优化电池充电建不建议开(iPhone11优化电池充电)

    iphone11优化电池充电建不建议开(iPhone11优化电池充电)

  • iphone7怎么换语言(苹果7手机语言怎么切换中文)

    iphone7怎么换语言(苹果7手机语言怎么切换中文)

  • 乐视手机怎么导入号码(乐视手机怎么导出照片到另一个手机)

    乐视手机怎么导入号码(乐视手机怎么导出照片到另一个手机)

  • 趣键盘怎么斗图(怎么用趣键盘输入表情包)

    趣键盘怎么斗图(怎么用趣键盘输入表情包)

  • 小米手环监测睡眠原理(小米手环监测睡眠的原理)

    小米手环监测睡眠原理(小米手环监测睡眠的原理)

  • 苹果x有128g的么(苹果x有不有128g)

    苹果x有128g的么(苹果x有不有128g)

  • 小米手环nfc和普通版区别(小米手环nfc和普通版充电器通用吗)

    小米手环nfc和普通版区别(小米手环nfc和普通版充电器通用吗)

  • 支付宝怎么充值医保卡(支付宝怎么充值和平精英)

    支付宝怎么充值医保卡(支付宝怎么充值和平精英)

  • p站网页版如何进入(p站网页版如何隐藏某作品)

    p站网页版如何进入(p站网页版如何隐藏某作品)

  • oppoa9的电池容量(oppoa9电池容量多大毫安)

    oppoa9的电池容量(oppoa9电池容量多大毫安)

  • 华为jkmal00是什么型号手机(华为jkmal00a是什么型号手机)

    华为jkmal00是什么型号手机(华为jkmal00a是什么型号手机)

  • 抖音怎么转发别人的视频(抖音怎么转发别人的作品到微信)

    抖音怎么转发别人的视频(抖音怎么转发别人的作品到微信)

  • vivox27如何快速截屏(vivo手机x27pro怎么快捷设置)

    vivox27如何快速截屏(vivo手机x27pro怎么快捷设置)

  • Linux网卡乱序eth0变成eth1该怎么办?(linux网卡lo)

    Linux网卡乱序eth0变成eth1该怎么办?(linux网卡lo)

  • 买原材料怎么记账
  • 邮局可以开发票吗 税点多少
  • 缴纳个人所得税扣除项目
  • 赊销现金折扣分录
  • 接受捐赠收入会计利润含税吗
  • 预付卡充值可以退吗
  • 应收票据背书支付
  • 长期借款按月计提
  • 年终奖第二年才发怎么计算个税在个税app
  • 推广费是广告费和业务宣传费吗
  • 为什么负债不等于亏损
  • 出租房屋收的押金合法吗
  • .车船税不在汽车保险里如何入账
  • 会计分录如何试算出来的
  • 材料验收入库会计分录怎么写计划成本法
  • 公司的固定资产是什么
  • 如何计算劳务费个人所得税
  • php如何防止表单重复提交
  • 富士通FUJITSU笔记本电脑开机进入BIOS的方法(F2)
  • 公司从其他公司买一个项目花了100万
  • 车辆违章罚款可以报销吗
  • 企业购入固定资产一次性税前扣除
  • ISBMgr.exe - ISBMgr是什么进程 有什么作用
  • driver-e
  • 房产开发企业涉及税种
  • 原始凭证可以没有名称吗
  • 会计人员报销差额是多少
  • 夫妻房子归属权问题
  • php中验证码如何实现登录验证
  • but all failed
  • thinkphp登录验证
  • 怎么把html做成app
  • 理解DALL·E 2, Stable Diffusion和 Midjourney工作原理
  • 买汽车配件属于什么服务
  • 新购买的发票如何读取
  • 公司租车公司
  • 费用化支出期末一般转入哪个账户?
  • 劳务派遣申报表附表一怎么填
  • 首涂24套
  • rust 前端开发
  • sqlserver正则表达式用法
  • 公司成立怎么说
  • mysql正则表达式匹配数字
  • 机械租赁收入算成本吗
  • 每月工资不一样怎么算误工费呢
  • 职工釆暖费有何新政策
  • 全资子公司可以转让吗
  • 佣金和其他费用
  • 加班费是计入应交税费吗
  • 购买固定资产的增值税计入成本吗
  • 加计扣除是什么时候申报
  • 计提员工工资是什么意思
  • 本年负数去年正数如何算同比
  • 编制合并报表时最关键的一步
  • 安装mysql失败原因
  • MySQL之Field‘***’doesn’t have a default value错误解决办法
  • linux系统中
  • ubuntu debain
  • telnet root
  • winxp系统控制面板
  • 局域网 打印机 共享
  • 卸载软件后整个盘都清空了
  • exgear是什么
  • win7 显示日期
  • win10系统中怎么安装安卓应用
  • windows对高分屏怎么这么差
  • 电脑系统win8怎么样
  • 深度技术的系统好不好
  • cocos2dx性能优化与包体优化
  • 游戏引擎官方平台
  • 关于模型视图变化的说法
  • pycharm怎么学
  • jquery添加id属性
  • pygame实例
  • ajax实现无刷新
  • jquery.form.js实现文件上传
  • python *.py
  • 注销税务登记需要哪些材料
  • 上海小规模纳税人企业所得税
  • 什么叫企业改制重组
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号