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.mfbz.cn/a/784404.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯发布2024大模型十大最新趋势!

近日,在2024世界人工智能大会上,腾讯正式发布了《2024大模型十大趋势——走进“机器外脑”时代》报告。目前,这一报告正在AI产业界各大社群快速传播。 报告中,腾讯研究院试图通过10个关键性的趋势,去理解全世界范围内正…

【React Hooks原理 - useCallback、useMemo】

介绍 在实际项目中,useCallback、useMemo这两个Hooks想必会很常见,可能我们会处于性能考虑避免组件重复刷新而使用类似useCallback、useMemo来进行缓存。接下来我们会从源码和使用的角度来聊聊这两个hooks。【源码地址】 为什么要有这两个Hooks 在开始…

HBuilder X 小白日记03-用css制作简单的交互动画

:hover选择器,用于选择鼠标指针浮动在上面的元素。 :hover选择器可用于所有元素,不只是链接 :link选择器 设置指向未被访问页面的链接的样式 :visited选择器 用于设置指向已被访问的页面的链接 :active选择器 用于活动链接

观察者模式(Observer Pattern)

观察者模式(Observer Pattern) 定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。别名&#xff1…

AI语言处理的双刃剑:Tokens令牌化技术解析

生成式人工智能模型,如GPT-4o,采用基于Transformer架构的复杂处理方式,这与人类处理文本的方式存在明显差异。这些模型依赖于一种称为“令牌化”的过程,将文本分解为更小的片段,称为“令牌”,以便更有效地处…

BP神经网络的实践经验

目录 一、BP神经网络基础知识 1.BP神经网络 2.隐含层选取 3.激活函数 4.正向传递 5.反向传播 6.不拟合与过拟合 二、BP神经网络设计流程 1.数据处理 2.网络搭建 3.网络运行过程 三、BP神经网络优缺点与改进方案 1.BP神经网络的优缺点 2.改进方案 一、BP神经网络基…

XDMA原理学习(1)——DMA技术详解

目录 一、什么是DMA?为什么需要DMA? 二、DMA分类 2.1 Block DMA 2.2 Scatter-Gather DMA 2.3 Ring buffer DMA 三、实际案例 3.1 STM32微处理器 3.1.1 Block DMA 3.1.2 Scatter-Gather DMA 3.1.3 使用场景举例: 3.1.4 配置与实现 …

香橙派OrangePi AIpro测评:我的高性能AI开发板实操

香橙派OrangePi AIpro测评:高性能AI开发板的实际应用与操作指南 前言 在物联网和人工智能领域飞速发展的背景下,开发板作为硬件开发的重要工具,越来越受到开发者的青睐。香橙派OrangePi AIpro因其强大的性能和丰富的接口,成为了…

嵌入式Linux系统编程 — 7.4 fork、vfork函数创建子进程

目录 1 父进程与子进程概念 2 fork创建子进程 3 系统调用 vfork()函数 4 vfork与 fork函数如何选择 1 父进程与子进程概念 进程与子进程是操作系统中的一个基本概念,用于描述进程之间的层级关系。下面是对这一概念的简要说明: 父进程:在…

jmeter-beanshell学习6-beanshell生成测试报告

前面写了各种准备工作,内容组合用起来,应该能做自动化了,最后一步,生成一个报告,报告格式还是csv 报告生成的路径和文件,在用户参数写好,防止以后改路径或者名字,要去代码里面改。以…

第二证券股市资讯:深夜!突然暴涨75%!

一则重磅收买引发医药圈轰动。 北京时间7月8日晚间,美股开盘后,美国生物制药公司Morphic股价一度暴升超75%。音讯面上,生物医药巨子礼来公司官宣,将以57美元/股的价格现金收买Morphic,较上星期五的收盘价溢价79%&…

98.验证二叉搜索树——二叉树专题复习

递归: class Solution {// 判断二叉搜索树是否有效public boolean isValidBST(TreeNode root) {// 递归地检查以 root 为根的子树是否满足 BST 的性质// 同时定义一个范围 [Long.MIN_VALUE, Long.MAX_VALUE] 来约束节点的值return isValidBST(root, Long.MIN_VALUE…

HTML(28)——空间转换

空间:是从坐标轴角度定义的XYZ三条坐标轴构成了一个立体空间 Z轴位置与视线方向相同 空间转换 平移 属性: transform: translate3d(x,y,z);transform: translateX();transform: translateY();transform: translateZ(); 取值:像素单位数值…

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们,不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统,而且,老生常谈的Linux更是每个计算机人的必修,那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛,巴拉巴拉的,但…

Django 新增数据 save()方法

1,添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

初学SpringMVC之执行原理

Spring MVC 是基于 Java 实现 MVC 的轻量级 Web 框架 导入 jar 包 pom.xml 文件导入依赖&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><dep…

如何安全隐藏IP地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时&#xff0c;您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您&#xff0c;并被用来了解您的位置。下面的文章将教您如何隐藏自己&#xff0c;不让任何试图跟踪您的活动的人发现。 什么是 IP 地址&#xff1f; 首先&am…

【运算放大器学习】

运算放大器学习 运放的选型一般主要需要观察以下几个参数&#xff0c;下面一起来理解一下几个核心参数的意义&#xff1b;今天说 输入失调电压 、失调电压温漂 、 偏置电流 、 失调电流几个参数&#xff1b; 放大器的几个主要参数 输入失调电压失调电压温漂偏置电流失调电流…

Ubuntu开源软件LibreOffice将Excel多表转PDF多目录示例

一、实现的起因&#xff1a; Windows平台下&#xff0c;常见的WPS办公自动化套件中电子表格软件&#xff0c;其中具备将Excel工作表中数据转为PDF文档表格的功能。现在进一步的需求是&#xff1a;像PDF标准的电子书那样&#xff0c;具备一本书的目录结构或章节结构&#xff0c…

ARCGIS PRO 要素标注

一、普通模式 1、标注&#xff1a;名称和面积&#xff08;无分数线&#xff09; 语言&#xff1a;Arcade $feature.QLR \nRound($feature.Shape_Area,2) 语言&#xff1a;vbscript [QLR] & " " & Round([Shape_Area],2) 2、标注&#xff1a;名称…