day02_员工管理

文章目录

  • 新增员工
    • 需求分析和设计
    • 代码开发
    • 功能测试
    • 代码完善
      • 录入的用户名已存在,抛出异常后没有处理
      • 新增员工的时候,创建人id和修改人id设置为了固定值
      • ThreadLocal(面试题)
  • 分页查询
      • 问题
      • 解决
  • 启用禁用员工账号
    • 需求和分析
    • 代码设计
  • 编辑员工
  • 修改密码

新增员工

需求分析和设计

image.png
image.png
image.png

代码开发

在service的实现类中框中的部分需要改善
image.png

功能测试

  • 通过接口文档测试
  • 通过前后端联调测试

注意:由于开发阶段前端和后端是并行开发的,后端完成某个功能后,此时前端对应的功能可能还没有开发完成,导致无法进行前后端联调。所以在开发阶段,后端测试主要以接口文档测试为主
如果报401的错误,需要将jwt令牌添加到全局参数中
image.png

代码完善

录入的用户名已存在,抛出异常后没有处理

image.png
在数据库设计表示设置用户名为唯一约束
解决
可以通过全局异常处理器来进行处理
image.png

新增员工的时候,创建人id和修改人id设置为了固定值

image.png
解决
前端会携带JWT令牌,拦截器中通过JWT令牌可以解析出当前登录员工id
第一种办法:可以在service的实现类中注入request来获取token进而得到登录人id
image.png
第二种办法:利用ThreadLocal
image.png
可以验证一下:

  1. 在拦截器、controller、service的实现类中分别写上该代码

image.png

  1. 测试新增员工
  2. 会在控制台出现下面的代码

image.png
名称都一致,所以属于同一进程
所以只需要在拦截器的代码中将employeeId存入到ThreadLoacl中,然后在service的实现类中取出即可
image.png
image.png
image.png
别忘了在拦截器中移除employeeId
image.png

ThreadLocal(面试题)

ThreadLocal并不是一个Thread,而是Thread的局部变量
ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。ThreadLocal实现了一个线程内传递数据
底层:使用Entry存储数据,ThreadLocal对象本身作为key,数据作为value
常用方法
image.png
:客户端每次发送的请求,后端的Tomact服务器都会分配一个单独的线程来处理请求
image.png
应用场景

  1. 上述的传递登录数据
  2. 传递数据库的连接@Transactional,里面线程共享了数据库连接对象connection
  • 回顾JDBC

介绍:java操作数据库连接技术
jdbc操作数据库连接过程
获取数据库连接对象:connection
connection.setAutoCommit(false) 关闭自动提交
获取数据库执行命令对象(小火车)PrepareStatement pstmt = connection.preparedStatement(sql);
执行sql语句:pstmt.execute();
释放资源:ResultRet、pstmt、connection
最后没有发生异常提交事务:connection.commit();
如果发生异常进行回滚:connection.rollback();

  • @Transactional实现事务管理

业务层实现多个mapper的执行,mapper层执行一个方法都会调用一条sql语句,所有的sql语句执行使用1个事务,所以所有sql语句使用的是同一个connection

  • 应用原理

@Transactional执行前先从德鲁伊连接池中获取一个连接,并设置事务关闭自动提交,存放到ThreadLocal中
执行mapper的中第一个方法时。进行数据库操作时首先从ThreadLocal里面获取connection,来进行数据库操作
执行mapper的中第二个方法时。进行数据库操作时首先从ThreadLocal里面获取connection,来进行数据库操作
@Transcational继续操作,从ThreadLocal里面获取connection,判断这个业务方法是否发生异常,如果有异常设置connection.rollback()回滚,否则就connection.commit()提交

  1. 注入HttpServletRequest对象使用的是ThreadLocal(spring操作的)
  • 原理

前端每次请求的请求数据是不一样的,spring将每次请求封装到request对象中,将request存放到ThreadLocal中,开发人员使用这个对象都是从当前这个线程内ThreadLocal里面获取的request

  1. pageHelper分页插件里面的数据使用ThreadLocal存储
  • 设置页码和每页大小

将这个Page(页码和每页大小)对象存储到ThreadLocal中

  • 执行sql语句

select * from 表名 limit start,length
start = (当前页码 - 1) * 每页大小,页码和每页大小从ThreadLocal里面获取的

分页查询

image.png
image.png
image.png

问题

在分页查询的过程中遇到了一个问题就是:时间为String
image.png

解决

  1. 在属性上加入注解,对日期进行格式化

image.png
第一种方式要是多个属性的话,得在多个属性上进行添加注解@JsonFormat,太麻烦

  1. 在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式化

image.png
image.png
设置为0的原因
我们创建的converter:
image.png
原本converters中的converter有:
image.png
在原本的converters中有原来的MappingJackson2HttpMessageConverter,而我们创建的排在原来的之后,就不会执行我们创建的,所以将其放到最开始的位置上
image.png
放到0位置上的结果为:
image.png

启用禁用员工账号

需求和分析

image.png

代码设计

image.png
image.png
image.png

编辑员工

  1. 先进行数据回显(根据id查询员工信息)

image.png
image.png

  1. 编辑员工

image.png
image.png

修改密码

image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3项目打包优化

前言 本文介绍在实际项目中进行打包优化过程 目前评分 good npm install web-vitals在App.vue加入如下代码测试网页性能指标 import { onLCP, onINP, onCLS, onFCP, onTTFP } from web-vitals/attributiononCLS(console.log) onINP(console.log) onLCP(console.log) onFCP(…

cfDNA甲基化疾病早筛研究思路分享

游离DNA(Circulating free DNA,cfDNA)是人体组织释放到血液等循环体系中降解的DNA片段,是一种新型的肿瘤分子标志物。ctDNA甲基化是重要的表观学修饰之一,可以在不改变基因序列的情况下,改变遗传表现&#…

身边的故事(十五):阿文的故事:再消失

物镜人非,沧海桑田。像我们这些普通的凡人,哪有什么试错的机会,每走一步都是如履薄冰,小心谨慎,错一步可能就会万劫不复。唉,如果...唉...哪有什么如果... 阿文的房子很快装修完成,入新房那天就…

ubantu安装k8s集群服务

进行主机优化配置 参考&#xff1a; 修改主机名称 hostnamectl set-hostname k8s-node03 关闭swap分区 swapoff -a #临时关闭 sed -i /\/swap/s/^/# /etc/fstab #永久关闭 增加主机解析 cat >> /etc/hosts << EOF 10.1.60.119 k8s-master01 10.1.60.12…

zdppy+onlyoffice+vue3解决文档加载和文档强制保存时弹出警告的问题

解决过程 第一次排查 最开始排查的是官方文档说的 https://api.onlyoffice.com/editors/troubleshooting#key 解决方案。参考的是官方的 https://github.com/ONLYOFFICE/document-server-integration/releases/latest/download/Python.Example.zip 基于Django的Python代码。 …

短视频美化:成都柏煜文化传媒有限公司

短视频美化&#xff1a;创意与技术的艺术交融 在数字时代的浪潮中&#xff0c;短视频以其独特的魅力迅速崛起&#xff0c;成为人们生活中不可或缺的一部分。从记录生活点滴到分享创意灵感&#xff0c;短视频以其短小精悍、形式多样的特点&#xff0c;让每个人都能成为自己故事…

Linux安装elasticsearch单机版

一、检查内核 uname -a uname -m 二、下载版本 下载版本选择自己服务器相同的内核版本 我这边是aaech64 ES下载地址 Kibana 下载地址 二、上传服务器解压 tar -xvf elasticsearch-8.14.1-linux-aarch64.tar.gz 三、安装ES 因为ES不能用root用户启动先创建用户 #新增 es …

vue-cli 脚手架详细介绍

4 vue-cli 脚手架 1 脚手架介绍 vue-cli也叫vue脚手架,vue-cli是vue官方提供的一个全局命令工具&#xff0c;这个命令可以帮助我们快速的创建一个vue项目的基础架子。 脚手架&#xff1a;搭建好的一个架子&#xff0c;我们在架子上进行开发 开箱即用零配置基于webpack、webpac…

新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布

2024年7月8日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增组合图、热力地图、符号地图、K线图等图表类型&#xff0c;并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…

【已解决】微信小程序报错:request 合法域名校验出错 如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目,操作路径:“详情-域名信息”

场景复现 最近在写微信小程序时&#xff0c;打开开发者工具会出现一下报错&#xff0c;甚至连手机移动端使用时也会出现“网络出错了”这样的错误提示。 解决方法 查看微信官方的文档和网上的一些解决方法&#xff0c;可以按照下面的图文步骤进行设置&#x1f447;&#x1f4…

caeses软件许可优化解决方案

Caeses软件介绍 CAESES是一款十分很不错的三维建模仿真的软件。它功能很大、优化效率高、可以自动化优化、分析工具快速 CAESES拥有多种不同的试验设计及单目标、多目标优化算法&#xff0c;能够根据仿真计算评估的结果。软件可以帮助用户轻松的打造出自各种船舶、汽车、航空航…

Ai Native应用开发(一)--数字人

背景 刚参加完24年世界人工智能大会&#xff08;WAIC&#xff09;&#xff0c;聊聊自己的一些感受。这次会明显比去年多很多人&#xff0c;用人山人海来形容应该也不为过。根据我自己粗浅观察参会的人员也比去年更多样化。去年更多还是从业者或者是这块研究人员。今年每个论坛…

sql盲注

文章目录 布尔盲注时间盲注 布尔盲注 介绍&#xff1a;在网页只给你两种回显的时候是用&#xff0c;类似于布尔类型的数据&#xff0c;1表示正确&#xff0c;0表示错误。 特点&#xff1a;思路简单&#xff0c;步骤繁琐且麻烦。 核心函数&#xff1a; length()函数substr()函…

day4单向链表

主程序 #include "fun.h" int main(int argc, const char *argv[]) { node_p Lcreate_head();//创建链表 printf("########################链表的头插尾插\n"); insert_head(L,45);//头插 insert_head(L,45); insert_tail(L,45);/…

Go-Zero 框架使用 MongoDB,数据采集入库如此简单

目录 引言 环境准备 如何使用 main入口代码实现 实现采集网络接口 总结 其他资源 引言 Go-Zero 是一个高性能、可扩展的微服务框架&#xff0c;专为 Go 语言设计。它提供了丰富的功能&#xff0c;如 RPC、RESTful API 支持、服务发现、熔断器、限流器等&#xff0c;使开…

PyQt5显示QImage并将QImage转换为PIL图像保存到缓存

PyQt5显示QImage并将QImage转换为PIL图像保存到缓存 1、效果图 2、流程 1、获取摄像头资源,打开摄像头 2、截取图像 3、opencv读的通道是BGR,要转成RGB 4、往显示视频的Label里显示QImage 5、将QImage转换为PIL图像,并保存到缓存 6、获取图像中人脸信息3、代码 # -*- codin…

2024年【安全员-C证】考试及安全员-C证免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-C证考试根据新安全员-C证考试大纲要求&#xff0c;安全生产模拟考试一点通将安全员-C证模拟考试试题进行汇编&#xff0c;组成一套安全员-C证全真模拟考试试题&#xff0c;学员可通过安全员-C证免费试题全真模…

论文解析——Full Stack Optimization of Transformer Inference: a Survey

作者及发刊详情 摘要 正文 主要工作贡献 这篇文章的贡献主要有两部分&#xff1a; 分析Transformer的特征&#xff0c;调查高效transformer推理的方法通过应用方法学展现一个DNN加速器生成器Gemmini的case研究 1&#xff09;分析和解析Transformer架构的运行时特性和瓶颈…

堆叠的作用

一、为什么要堆叠 传统的园区网络采用设备和链路冗余来保证高可靠性&#xff0c;但其链路利用率低、网络维护成本高&#xff0c;堆叠技术将多台交换机虚拟成一台交换机&#xff0c;达到简化网络部署和降低网络维护工作量的目的。 二、堆叠优势 1、提高可靠性 堆叠系统多台成…

Linux--线程(概念篇)

目录 1.背景知识 再谈地址空间&#xff1a; 关于页表&#xff08;32bit机器上&#xff09; 2.线程的概念和Linux中线程的实现 概念部分&#xff1a; 代码部分&#xff1a; 问题&#xff1a; 3.关于线程的有点与缺点 4.进程VS线程 1.背景知识 再谈地址空间&#xff1a…