苍穹外卖-新增员工

一、需求分析和设计

1、账号必须是唯一的

2、手机号为合法的11位手机号码

3、身份证号为合法的18为身份证号码

4、密码默认为123456

二、代码开发

1、根据新增员工接口设计对应的DTO

注意:当前端提交的数据和实体类中对应的属性差别比较大时,建议使用DTO来封装数据

苍穹外卖-新增员工_第1张图片

 2、在Controller中编写方法实现新增员工功能

苍穹外卖-新增员工_第2张图片

请求方式为POST请求

3、在Service中编写方法实现新增员工功能

苍穹外卖-新增员工_第3张图片

 把DTO转为实体Employee,设置实体Employee的其它属性,使用对象的属性拷贝。

使用常量类来设置账号的默认状态和默认账号密码。

重点:设置当前记录创建人和修改id

4、Mapper

由于是单表的新增操作(SQL语句简单),所有可以使用注解的方式更方便。

苍穹外卖-新增员工_第4张图片

 注意:在yml文件中开启驼峰命名开关

三、代码完善

程序存在的问题:

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

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

解决一:通过全局的异常处理器,来统一捕获SQL异常。

步骤:

1、录入相同的用户名,控制台抛出异常,把类名复制

苍穹外卖-新增员工_第5张图片

 2、找到全局异常处理器 在sky-server中hander,代码如下:

苍穹外卖-新增员工_第6张图片

解决二、先了解JWT的认证方式

 苍穹外卖-新增员工_第7张图片

 员工登录成功后会生成JWT令牌并响应给前端,后续请求中,前端会携带JWT令牌,通过JWT令牌可以解析出当前登录员工id。

重点:解析出登录员工id后,如何传递给Service的save方法呢?

使用技术:ThreadLocal并不是Thread,而是Thread的局部变量。

ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程 外则不能访问。

苍穹外卖-新增员工_第8张图片

 使用ThreadLocal往往会进行封装,包装成一个工具类,如图:

苍穹外卖-新增员工_第9张图片

 在拦截器位置,存进id

苍穹外卖-新增员工_第10张图片

 然后在service中取出id

苍穹外卖-新增员工_第11张图片

你可能感兴趣的:(java)