day02_员工管理

news2024/9/21 15:49:15

文章目录

  • 新增员工
    • 需求分析和设计
    • 代码开发
    • 功能测试
    • 代码完善
      • 录入的用户名已存在,抛出异常后没有处理
      • 新增员工的时候,创建人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.coloradmin.cn/o/1908228.html

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

相关文章

分享外贸工作中常用英文标准表达和英文语句

常用英文表达 报拉格斯最低到岸价 quote the lowest price CIF Lagos经营纺织品多年 be in the line of textiles for many years货物受欢迎 the goods are very popular with customers / have met with a warm reception /be well received/accepted/ enjoy a wide populari…

2024年7月2日~2024年7月8日周报

目录 一、前言 二、完成情况 2.1 吴恩达机器学习系列课程 2.1.1 分类问题 2.1.2 假说表示 2.1.3 判定边界 2.2 学习数学表达式 2.3 论文写作情况 2.3.1 题目选取 2.3.2 摘要 2.3.3 关键词 2.3.4 引言部分 2.3.4 文献综述部分 三、下周计划 3.1 存在的问题 3.2 …

Nacos注册中心相关错误记录

文章目录 1,com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:jar:unknown was not found1.1 定位及解决方案1.2,简要说明dependencyManagement的作用 2,nacos启动失败2.1 解决方案 1,com.alibaba.cloud:spring-c…

七大AI绘画软件大比拼!高效且免费!

在当今数字时代,人工智能技术广泛应用于各个行业,包括艺术创作。人工智能绘画软件可以帮助艺术家更快、更有效地创作。然而,市场上人工智能绘画软件的选择也令人眼花缭乱。那么,哪种人工智能绘画软件更好呢?需要明确的…

《UDS协议从入门到精通》系列——图解0x84:安全数据传输

《UDS协议从入门到精通》系列——图解0x84:安全数据传输 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 Tip📌:本文描述中但凡涉及到其他UDS服务的,均提供专栏内文章链接跳转方式以便快速…

平安消保在行动 | 守护每一个舒心笑容 不负每一场双向奔赴

“要时刻记得以消费者为中心,把他们当做自己的朋友,站在他们的角度去思考才能更好地解决问题。” 谈及如何成为一名合格的消费者权益维护工作人员,平安养老险深圳分公司负责咨诉工作的庞宏霄认为,除了要具备扎实的专业技能和沟通…

大舍传媒:如何在海外新闻媒体发稿报道摩洛哥?

引言 作为媒体行业的专家,我将分享一些关于在海外新闻媒体发稿报道摩洛哥的干货教程。本教程将带您深入了解三个重要的新闻媒体平台:Mediterranean News、Morocco News和North African News。 地中海Mediterranean News Mediterranean News是一个知名…

景芯SoC训练营DFT debug

景芯训练营VIP学员在实践课上遇到个DFT C1 violation,导致check_design_rule无法通过,具体报错如下: 遇到这个问题第一反映一定是确认时钟,于是小编让学员去排查add_clock是否指定了时钟,指定的时钟位置是否正确。 景芯…

Spring AOP源码篇四之 数据库事务

了解了Spring AOP执行过程&#xff0c;再看Spring事务源码其实非常简单。 首先从简单使用开始, 演示Spring事务使用过程 Xml配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema…

SpringBoot的热部署和日志体系

SpringBoot的热部署 每次修改完代码&#xff0c;想看效果的话&#xff0c;不用每次都重新启动代码&#xff0c;等待项目重启 这样就可以了 JDK官方提出的日志框架&#xff1a;Jul log4j的使用方式&#xff1a; &#xff08;1&#xff09;引入maven依赖 &#xff08;2&#x…

Qt QWizard新建向导实例

使用QWizard做新建向导&#xff0c;最简单的实例 class MyWizard : public QWizard { public: MyWizard(QWidget* parent nullptr); QWizardPage* createFirstPage(); QWizardPage* createSecondPage(); QWizardPage* createThirdPage(); }; MyWizard::MyWizard(QWidget* par…

19_谷歌GoogLeNet(InceptionV1)深度学习图像分类算法

1.1 简介 GoogLeNet&#xff08;有时也称为GoogleNet或Inception Net&#xff09;是一种深度学习架构&#xff0c;由Google的研究团队在2014年提出&#xff0c;主要设计者为Christian Szegedy等人。这个模型是在当年的ImageNet大规模视觉识别挑战赛&#xff08;ILSVRC&#xf…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

昇思25天学习打卡营第5天|MindSpore网络模型构建

打卡 目录 打卡 模型类 模型网络&#xff1a;定义与使用 模型层级分解 nn.Flatten 张量转换-演示查看 nn.Dense 全连接层-演示查看 nn.ReLU 非线性激活层-演示查看 nn.SequentialCell 有序网络容器 nn.Softmax 多分类概率预测 模型参数 前置感受&#xff1a;总的来说…

跟《经济学人》学英文:2024年07月06日这期:How Starbucks caffeinates local economies

How Starbucks caffeinates local economies Call it the frappuccino effect frappuccino&#xff1a;星冰乐 星巴克如何刺激当地经济&#xff1a;称之为星冰乐效应 原文&#xff1a; Starbucks offers endless opportunities for innovation. Parts of social media del…

Scrapy框架的基本使用教程

1、创建scrapy项目 首先在自己的跟目录文件下执行命令&#xff1a; PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy startproject 项目名 具体执行操作如下&#xff1a;1、创建项目目录&#xff1a;Scrapy会在当前工作目录下创建一…

OceanBase 配置项系统变量实现及应用详解(1):配置项的定义及使用方法

《OceanBase 配置项&系统变量实现及应用详解》专题导读 在使用OceanBase的过程中&#xff0c;看到大家经常会遇到“参数”、“配置项”、“系统变量”等概念&#xff0c;却不太清楚它们是不是同一个东西&#xff0c;以及应该如何使用。一些对数据库开发感兴趣的朋友&#…

JavaScript总结2

概述 JavaScript是世界上最流行的脚本语言。JavaScript是一种轻量级的编程语言&#xff0c;可以插入HTML页面的编程代码。 JavaScript插入HTML页面后&#xff0c;可由浏览器执行。 特点 语法简单&#xff0c;易学易用&#xff1b; 解释性语言&#xff1b; 跨平台&#xff…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率&#xff0c;以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样&#xff0c;常见的一种计算方式是金融监管支出与金…

K8s驱逐场景以及规避方案参考 —— 筑梦之路

Pod 驱逐分为两种情况&#xff1a; 较安全驱逐 & 提高稳定性的良性驱逐 API 发起驱逐&#xff0c;典型案例&#xff1a;kubectl drain Node Not Ready 时&#xff0c;Controller Manager 发起的驱逐 有风险的驱逐 节点压力驱逐 节点磁盘空间不足、内存不足 或 Pid 不足&…