- 开发工具选择IDEA
- 数据库选择Mysql 8.0版本
- Tomcat选择9.0版本
- nosql采用redis和mongodb
- 框架后端选择SpringBoot与Mybatis整合
- 框架前端选择Vue.js
初步确定项目的用户后,建立数据库表,
包括专业表、大学表、学生表、用户表、开设专业表、公司表等
通过SpringBoot创立了初始的项目框架,采用三层架构的设计模式,创建了以下包与类
- controller 创建UserController类
- service 具体服务信息
- dao 与数据库交互
- domain 实体类
- utils 相关工具类
- VO 视图展示
- 起步类SqlworkApplication
- 配置文件application.yml
在pom文件中添加devtools的依赖实现热部署
- 采用全注解的开发方式
- 在pom文件中加入mybatis-spring-starter
- 在dao层添加有关增删改查的操作
- 在test中对dao层的操作进行测试
因update语句中涉及到的相关字段过多,采用update书写较为复杂,为简化书写,采用动态sql技术优化
- 新建provider包,添加UserProvider类
- 在UserProvider类中书写动态sql
- 在UserDao中使用UpdateProvider注解
最开始写了mybatisConfig配置类,后来发现更简单的写法,直接在yml文件中配置即可
major与university表存在多对多关系,在之前学习mybatis框架中大多采用xml方式进行配置,因项目计划采用纯注解方式,在查阅资料之后对先前的xml配置模式进行修改
- 在UniversityDao中使用@Results,@Result,@Many注解
- 因为是多对多模式,设置fetchType为延迟加载
- 完成接口中sql语句的编写
- 在test中测试均通过
- 至此,查询学校开设的全部专业和专业开设的相关院校功能已经全部实现
考虑到项目可能会使用分页技术,添加了分页工具类,此工具类为github上开源代码,以备后续使用
查阅微信API,添加微信授权第三方登录功能,因微信公共平台需要认证,只添加了相关代码框架,尚未进行测试,后期依照情况进行取舍
修改了student表,重新设计了user表,添加了graduate表
经过进一步确定,采用前后端分离的开发模式,依靠Json格式传递数据
-
在domain类中添加JsonData类,规定前后端交互的数据格式
-
在pom文件中添加gson的依赖,用于解析json数据
为加快数据库查询速度,减少数据库压力,项目决定整合redis缓存技术
- pom文件中加入相关依赖
- yml文件中配置redis的参数
- 在UserService的findAll中使用redisTemplate
为避免缓存穿透问题,使用双重检测锁机制进行优化
类似于单例模式中的双重检测锁模型,在防止并发问题的同时大限度地保证了性能
- 在pom文件中添加jwt依赖,版本号为0.7.0
- 在utils包下添加JwtUtils类
- 在test中对JwtUtils进行测试
- 在配置文件中对JwtUtils相关参数配置
- 在pom文件中添加spring-security的相关依赖
- 在UserService层中修改登录的逻辑,修改原先查询邮箱、密码判断登录的逻辑,改为用encoder比对。
- 控制层根据登录成功与否返回JsonData
- 添加interceptor包
- 添加JwtInterceptor类与InterceptorConfig配置类
- 使用拦截器验证token
- service层中登录传递的参数由user改为email与password
- controller层完善了向前端传递数据的逻辑
- 将jsonData更名并置于VO层
- 使用枚举对状态与结果进行封装
- 之后返回码遵循Restful接口,但是自定义返回码
- 在controller中添加MyExceptionHandler,对异常进行封装,统一返回Json数据给前端
- 针对不同的需求,整合SpringCache与Redis
- 用户注册登录,验证码等信息需要设置过期时间,Redis更加方便
- 针对缓存查询到的用户信息,使用SpringCache更加简便
- 修改ServiceImp内容,分离缓存使用的场景
- 使用pageHelper插件实现分页功能并完成测试
- 引入validation依赖,使用JSR进行数据校验
- 对url格式按照Restful风格进行重构
- 重写Major、UniversityController并进行测试
- 添加mongodb相关依赖
- 新建实体类Discussion,完成基础增删改查操作
集成Springboot2与Swagger2.9.2时遇到了很多问题
- SwaggerConfig中继承WebMvcConfigurer,添加静态文件目录
- 拦截器配置中排除相关静态文件的拦截
- 新建邮箱发送code功能完成注册,也可以通过其进行密码重置
- 异常抛出示范,返回封装对象规范化
- 注册逻辑(register.md中)
- 统一异常行为MyException及异常处理MyExceptionHandler
- 优化domain包下类的setter和getter方法
- 命名规范统一、url映射统一
- 整合注册与登录功能并进行测试
- dao层sql语句编写基本完成
- 重新设计功能与需求
- 重构后单元测试
- 数据展示功能重写,graduateDao层重写或覆盖
- JWTUtils异常抛出
- 跨域配置, 可开始联调
- todo: (gra、stu)controller层改变
- 后端框架:springboot2整合Mybatis
- 前端框架:Vue.js
- 数据库: mysql、redis、mongodb
- 插件:pageHelper、JSR数据校验
- 消息队列:
- 安全:SpringSecurity结合Jwt
- 缓存:SpringCache结合Redis
- 文档:swagger2构建Restful API
- 第三方集成: