北京微信网站设计费用,小程序开发平台哪家服务好,网站开发任务完成情况,wordpress怎么pjax文章目录 新增员工需求分析和设计代码开发功能测试代码完善录入的用户名已存在#xff0c;抛出异常后没有处理新增员工的时候#xff0c;创建人id和修改人id设置为了固定值ThreadLocal#xff08;面试题#xff09; 分页查询问题解决 启用禁用员工账号需求和分析代码设计 编… 文章目录 新增员工需求分析和设计代码开发功能测试代码完善录入的用户名已存在抛出异常后没有处理新增员工的时候创建人id和修改人id设置为了固定值ThreadLocal面试题 分页查询问题解决 启用禁用员工账号需求和分析代码设计 编辑员工修改密码 新增员工 需求分析和设计 代码开发
在service的实现类中框中的部分需要改善
功能测试
通过接口文档测试通过前后端联调测试
注意由于开发阶段前端和后端是并行开发的后端完成某个功能后此时前端对应的功能可能还没有开发完成导致无法进行前后端联调。所以在开发阶段后端测试主要以接口文档测试为主如果报401的错误需要将jwt令牌添加到全局参数中
代码完善 录入的用户名已存在抛出异常后没有处理
在数据库设计表示设置用户名为唯一约束解决可以通过全局异常处理器来进行处理
新增员工的时候创建人id和修改人id设置为了固定值
解决前端会携带JWT令牌拦截器中通过JWT令牌可以解析出当前登录员工id第一种办法可以在service的实现类中注入request来获取token进而得到登录人id第二种办法利用ThreadLocal可以验证一下
在拦截器、controller、service的实现类中分别写上该代码 测试新增员工会在控制台出现下面的代码
名称都一致所以属于同一进程所以只需要在拦截器的代码中将employeeId存入到ThreadLoacl中然后在service的实现类中取出即可别忘了在拦截器中移除employeeId
ThreadLocal面试题
ThreadLocal并不是一个Thread而是Thread的局部变量ThreadLocal为每个线程提供单独一份存储空间具有线程隔离的效果只有在线程内才能获取到对应的值线程外则不能访问。ThreadLocal实现了一个线程内传递数据底层使用Entry存储数据ThreadLocal对象本身作为key数据作为value常用方法注客户端每次发送的请求后端的Tomact服务器都会分配一个单独的线程来处理请求应用场景
上述的传递登录数据传递数据库的连接Transactional里面线程共享了数据库连接对象connection
回顾JDBC
介绍java操作数据库连接技术jdbc操作数据库连接过程获取数据库连接对象connectionconnection.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()提交
注入HttpServletRequest对象使用的是ThreadLocalspring操作的
原理
前端每次请求的请求数据是不一样的spring将每次请求封装到request对象中将request存放到ThreadLocal中开发人员使用这个对象都是从当前这个线程内ThreadLocal里面获取的request
pageHelper分页插件里面的数据使用ThreadLocal存储
设置页码和每页大小
将这个Page(页码和每页大小)对象存储到ThreadLocal中
执行sql语句
select * from 表名 limit start,lengthstart (当前页码 - 1) * 每页大小页码和每页大小从ThreadLocal里面获取的
分页查询 问题
在分页查询的过程中遇到了一个问题就是时间为String
解决
在属性上加入注解对日期进行格式化
第一种方式要是多个属性的话得在多个属性上进行添加注解JsonFormat,太麻烦
在WebMvcConfiguration中扩展SpringMVC的消息转换器统一对日期类型进行格式化
设置为0的原因我们创建的converter原本converters中的converter有在原本的converters中有原来的MappingJackson2HttpMessageConverter而我们创建的排在原来的之后就不会执行我们创建的所以将其放到最开始的位置上放到0位置上的结果为
启用禁用员工账号 需求和分析 代码设计 编辑员工
先进行数据回显(根据id查询员工信息) 编辑员工 修改密码