欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > day02_员工管理

day02_员工管理

2024/11/30 8:52:19 来源:https://blog.csdn.net/m0_69266818/article/details/140280631  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com