一、开发环境搭建
1.项目架构
2.Git版本管理
在IDEA中可以一键搭建并commit,当Git远程仓库搭建后就可以push
3.前后端联调
Builder注解:
加了注解后就可以通过这样的方式创建对象
接收传入的是dto对象,传出去的对象为vo对象
4.nginx反向代理
对于第一条:请求nginx的时候,在nginx可以作缓存,如果请求同样接口地址,就无需再请求真正后端程序,在nginx处就将缓存数据返回给前端。
对于第二条:当有大量请求的时候nginx就可以将请求分配到多台服务器上。
对于第三条:前端不直接访问到后端服务器,可以保证安全
配置:(nginx.conf)
upstream中配置的就是集群中服务器的ip
负载均衡有不同策略,不指定就是默认轮询
5.完善登录功能
只能从左到右,不能解码,想要比对需要将密码再次MD5加密后进行比对
二、导入接口文档
1.前后端分离流程
2.Swagger
使用方式:
配置是在server模块中的config包中
basePackage是扫描接口的包有哪些,不能写错了
没有设置静态资源映射,网页就会以为是动态请求某个controller
运行后,可以登录localhost:8080/doc.html,可以查看接口文档
常用注解:
加上注解信息会在swagger静态页面打开后会有相应的信息便于查看接口文档
三、新增员工
1.需求分析
登录后进行密码修改
admin是来区分管理端和用户端
2.代码开发
controller:
service:
mapper:
3.测试:
在接口文档测试:
记得新增token的全局参数,不然报错
4.代码完善
当新增员工已存在时:报下面的错误,要给前端抛出相应的信息
在异常处理器中要捕获异常处理:
第二个问题:
如何动态获得登录用户的ID
登录后会生成JWT令牌给前端,在后续请求中token会携带JWT令牌,在拦截器中会进行拦截,如何传递JWT令牌
ThreadLocal
一次请求就是一个线程,可以有一个空间,存储需要的值
定义一个含ThreadLocal成员变量的静态方法类:
四、员工分页查询
1.需求分析
2.代码开发:
controller:
service:
注意这里的:PageHelper插件可以让在写SQL语句的时候不用加limit关键字语句。
实现原理:它的startPage方法将传入的页码和每页记录数传进去,其中有个setLocalPage会将这些信息存储到一个ThreadLocal对象中去,然后在分页查询之前通过这个对象将页码记录数取出来并动态把limit关键字拼进去,将页码和每页记录数算出来拼进去。
mapper:
xml文件:
3.功能测试
操作时间格式不太对
4.代码完善-消息转换器
SpringMVC是SSM框架中整个应用程序与用户交互的前端接口,可以接受用户请求并根据配置映射到相应的controller中去;可以将请求参数绑定到Java对象中去,使用消息转换器可以将不同文件序列化成Java对象;其还有着拦截器和全局异常处理器的作用
通过继承WebMvcConfigurationSupport这个类,就可以自定义MVC中的一些配置。在这里就创建了消息转化器对象并为其添加了对象转换器,其中包含了对LocaDateTime,LocalDate,LocalTime数据的格式。然后添加到converts中的0位置后就可以统一使用这些格式返回给前端。
五、启用禁用员工账号
1.需求分析
2.代码开发
对于对数据进行操作的请求不需要返回Result的泛型,而查询类似的需要返回
controller:
service:
这里可以使用builder方法构造对象。
mapper:
xml映射文件:
注意呀:大括号以及,动态会自动删除,
parameterType是指传入的参数类型,resultType指的是传出的参数类型,这里是传入employee Java对象然后对其指进行提取所以是parameterType。貌似可以不设置,会自动判断。
这里使用动态SQL的原因在于,虽然这里只需要修改status可以通过注解,但是以后如果涉及到修改员工属性的操作可以直接使用这个方法,动态要修改的值。
六、编辑员工
1.需求分析
编辑员工需要回显员工信息,之后填写新信息后进行信息的修改所以需要两步
2.代码开发
根据id查询员工:
controller:
service:
这里设置密码为****是因为编辑员工信息不需要密码,进一步保护
mapper:
修改员工信息:
controller:
service:
mapper:
调用启用禁用员工账号中编写的update方法,因为其采用了动态SQL就可以只要涉及修改都可以使用。