目录
前言
此次我参加这次集训,并写了这次的后端作业,感觉收益良多。这也是我第一次发表博文,博文书写的方式我也参照了网上(协会会长)的一些书写格式,但一定有些许不好的地方,望谅解。
我个人来说,我不太喜欢写文档,所以做完这个项目的时候,我是把最后的一天的时间来写文档的。
对于刚刚接触spring项目的我来说,期间也是踩了不少的坑,查阅了相当多的资料。
一、项目需求
1.背景介绍
在以往的协会招新和实验室招新的过程中,我们发现一个问题,那就是宣传不足,尽管我们有自己的公众号和WordPress制作的官网,但是效果不尽如人意。
很多时候,我们无法将我们协会和实验室的优点宣传出去,我们开展的活动往往无人问津。在以往的接触中,很多同学对我们协会、我们实验室的了解仅仅停留在名字上,甚至有些即将毕业的学长学姐都没有听过我们协会和实验室的名字。
这使我们不得不反思宣传的不足,于是我们有了自己开发协会/实验室官网的想法,一个是为了更好的展示我们协会和实验室的风采,一个也是为了我们协会/实验室开展活动之便。
2.需求简介
1.前后台(必做)
前台主要做展示交互
后台可以对完整进行管理设置
注:以下功能并未注明哪些事前台,哪些是后台,这个需要大家根据自己的经验合理分配
2.权限管理(必做)
网站权限设计中,分为普通用户,实验室成员,系统管理员三个角色。
普通用户:可以进入网站前台进行浏览,包括浏览成员博文,成员简介,实验室发展历史等,也可以发表评论,参与留言
实验室成员:除了以上权限外,实验室成员可以参与实验室内部的讨论,查看实验室内部的资源,登录后台发布博文等等
系统管理员:除了以上权限外,系统管理员可以对网站进行管理,如发布公告,管理用户等等
3.评论设计(必做)
可以展示多级评论(至少两级)
评论需要展示评论内容,评论时间,评论用户
用户可以对评论进行回复
注:评论功能可以参考各个网站/app的设计,要求和他们差不多
4.用户注册(必做)
用户注册时填写相关个人信息即可注册(刚注册时是普通用户)
同时需要绑定登录账号,比如邮箱、手机号等作为找回密码的依据(这里推荐邮箱注册,因为比较简单)
注意要进行验证操作(发送验证码,如果是邮箱就发邮件,手机号就发短信)
5.多方式登录(选做)
登录可以账号密码(这个必须有)
如果有能力的也可以另外再去弄微信、qq第三方登录方式登录
6.成员信息管理(必做)
后台可以对用户进行管理,比如授权
7.博文模块(必做)
可以展示实验室实验室同学最近写的优秀博文
点击博文详情可以进行查看
博文可以进行点赞,收藏,评论等互动操作
用户可以编写博文并发布,如果未编写完成也可以保存在草稿箱内
用户可以对自己的博文进行管理(修改,删除,设置不可见等)
8.公告模块(必做)
网站首页应该有公告显示
管理员可以在后台发布公告
公告应该可以有公告内容,发布人,发布时间等
9.消息通知功能(必做)
需要有消息通知界面,用户博文被点赞、评论,评论被回复等情况需要收到相应的消息通知(有能力的同学可以再发一封邮件告知用户)
10.个人信息模块(必做)
个人风采展示
比如个人介绍,曾任职的职位,技术方向,写的博文等等
注:这个需要自己去设计拓展合理的功能
个人信息修改
用户可以修改自己的账号信息
11.活动模块(选做)
可以查看最近的实验室/协会活动。
点开可以看到活动详情,点击报名填写相关信息后即为报名成功。
可以在活动下方评论
12.学习小组功能(选做)
注:该功能对应到我们实验室的学习小组,比如Java后端学习,前端开发学习小组等等,所以同学们可以发挥自己的想象去设计完成学习小组的功能
实验室成员可以创建学习小组(可以设置加入权限,比如实验室成员才可以加入,或者所有人都可以加入)
学习小组需要有名称,简介等信息
学习小组功能里有话题讨论功能,所有人都可以参加讨论
自己的写的博文可以关联到学习小组,这样关联的学习小组页面就会有相应的博文展示
用户可以加入相应的学习小组
13.集训功能(选做)
集训报名
信息收集
作业发布与提交
发布作业者评分
14.拓展模块/功能(选做)
根据自己对未来可能出现的需求进行补充,需求合理可额外加分
比如用户有职位称号,比如游客,实验室成员,宣传部部长,实验室负责人等等
二、我的设计思路
1.我的技术栈
后端:Spring+SringMVC+Mybaits+Springboot+tomcat+Maven+Mysql
测试:Postman
注:我采用了SSM+Springboot的架构
2.项目架构示意图
我觉得这样子示意图比较官方,我给出个人见解
Database:顾名思义就是存放数据的地方,其实它与数据层是有个连接池,我并未画出
数据层:书写一些sql语句和执行一些sql语句的dao接口
业务层:简单理解就是执行你业务逻辑的地方,就是如何使用数据层的dao接口并返回数据或者不返回
控制层:接受页面传递过来的数据或者不传递,然后根据情况来使用业务层业务逻辑的方法,返回值或者跳转页面。
3.系统架构图
注:我这里参考我们集训会长的图,和他的一些书写方式,很不错可以看看
4.响应格式
我规定了返回格式也就是请求响应的格式,Result类规定响应格式的内容,如下:
package com.syk.labweb.returntype;
import lombok.Data;
/**
* 定义一个通用的返回类型
* @author syk
*/
@Data
public class Result {
//成功标志
private boolean success;
//返回处理消息
private String message;
//返回状态码
private int code;
//返回具体数据(如用户账户信息)
/** 这里result返回Object类型 可以将Data包里的数据传过来 */
private Object result;
public Result(){}
public Result(boolean success,String message,int code){
this.success=success;
this.message=message;
this.code=code;
}
public Result(boolean success,String message,int code,Object result){
this.success=success;
this.message=message;
this.code=code;
this.result=result;
}
}
Data类里的是我用来返回响应的数据,也可以返回给前端的数据,这里我只包装3个数据类,其余的其他响应数据我直接使用entity包里的实体类。(偷懒)
响应格式可以编写一些异常处理的返回(自定义)比如:
4.核心业务图
三.数据库设计
1. 数据库模型设计概览
2.数据库表设计
注:黄色钥匙为主键 绿色钥匙为外键
1.acform(活动报名表)
2.activity(活动表)
3.blog(博客表)
4.bloginfo(博客详情表)
5.blogmsg(博客消息表)
6.comment(评论表)
7.notice(公告表)
8.opform(博客操作表)
9.sdcomment(下级评论表)
10.suser(简单用户表)
11.userinfo(用户详细表)
四.功能展示
此处我使用了Postman进行了测试
1.用户注册、登录
发送验证码
注册:
登录:
2.修改个人信息
3.修改密码/忘记密码(找回密码)
修改密码(登录状态下的修改密码)
忘记密码(找回密码)
向邮箱发送验证码
再修改密码
4.根据博文id选择博文
5.分页获取博文
6.读取博文详细信息
7.发布博客
8.删除博客
9.修改博客
10.博客点赞/取消点赞
若无此先无点赞信息则点赞
若有点赞,则再点击是取消点赞
11.博客收藏
若无此先无收藏信息则点赞
若有收藏,则再点击是取消收藏
12.收到我的消息 /读消息
消息包含所有消息(点赞、被评论、收藏)
收到消息(未读在前)
读消息(有消息id则读一条,若消息id为0(前端返回)则读所有)
13.删除消息
14.分页获取评论
15.评论博客/评论博客的评论
16.发布公告
17.读取公告
18.展示活动
19.报名活动/取消报名
报名活动,此先无报名信息则报名
若此先有报名信息,再点击则是取消报名
20.发布活动
21.活动评论和博客评论如出一辙就不展示了
(狗头)
五.遇到的一些问题
1.mapper.xml没有扫描到
我思考是否没有添加扫描路径,然后就在pom.xml添加路径
2.postman做测试时状态码405
此处要和最近的mapping对应清楚,get和post等等
(Get要对应Getmapping)
3.状态码500和Bad request
这个是我遇到的最多的问题
多半是实体类和数据库字段没有一一对应,或者xml映射字段和dao接口接收参数@Param不一致
Cannot determine value type from string 'xxx’这个就是报错代码了
错误原因:
-
实体加无参构造参数
-
mapper.xml中查询的数据库字段属性的类型要和有参构造器的字段类型一一匹配;查询字段的个数要和有参构造器个数一样
参考了这篇博文(比较好很详细):(17条消息) mybatis异常集之Cannot determine value type from string ‘xxx‘_kingwinstar的博客-CSDN博客
六.不足与思考
1.关于这个状态码和响应返回,我是否可以额外写一个工具类来封装错误异常的响应
2.看了会长的一篇文章,他指出不要让密码裸奔,也就是我的数据库的密码是裸奔的,应该可以加一个指令牌来注册、登录
3.没有设置拦截器,并没有设置一些安全限制。(只有一个验证码)
七.我的收获和总结
感觉我集训期间学到比学校里学到的太多太多了,然后发现框架和新的技术一定要动手做,熟能生巧,一开始非常生疏我做这个系统的时候,但是只要写的多就能熟练起来了。一开始几天我写不了多少代码,基本花在了查资料上了,学到很多东西,我可以将我查阅到比较好的资料分享再下方:
(17条消息) Mybatis概述及简单应用_ifffff的博客-CSDN博客
@Controller和@RestController的区别? - Dawnzhang - 博客园 (cnblogs.com)
(17条消息) GetMapping 和 PostMapping_大鹏小站的博客-CSDN博客
(17条消息) WebMvcConfigurerAdapter过时的替换方法_tyvbpq的博客-CSDN博客_webmvcconfigureradapter 过时
(17条消息) [分页查询]SpringBoot整合PageHelper分页插件实现简单的分页查询(含前端及后端代码)_朱同学的博客-CSDN博客
(17条消息) redis源码分析 ppt_Spring Cloud + Redis 是如何实现点赞、取消点赞的?_weixin_39715460的博客-CSDN博客(还未看完/狗头)
我的代码已经开源,点击查看
感谢观看!