本项目的目的是实现软件创新实验室官网的开发,我选择的赛道是Java后端。本次项目采用SpringBoot集成SSM开发,旨在完成实验室官网的数据存储与后端处理。实现负责人给出的相应接口,并在此基础上进行适当的拓展(主要包括公告模块与活动模块)。
本次设计,是通过负责人给出的接口,以及加上自己的理解和三范式的约束设计出来的数据库,主要包括了user_info,blog_info,activity_info,web_notice等实体,下面是各个主要实体的ER图。
设计时,将确定下来的实体对象的属性值映射为数据库表中的列,根据ER图中各个实体之间的关系向关系模型转换:
这样,我们就建立了一个初步的带有9个表的物理数据模型,系统的所有模块功能都围绕下面这9个表展开。
由于功能模块比较多,所以这里只挑一些比较复杂的模块进行描述。因为事先在数据库中保存了一些数据,所以还有每个功能模块的部分结果演示(所有的返回结果为了美观,直接展示JSON解析并格式化的结果!)
用户在注册的时候,需要填写邮箱并向后台发送发送验证码的请求。后台接收到相应的邮箱,随机生成一个四位数的验证码,向该邮箱发送一封邮件,并返回JSON对象
请求url:http://localhost:8080/access/[email protected]
用户登录网站,这里应该使用post进行传参,但是为了方便演示,使用了get的方法。登录的方式使用type来决定:1代表管理员登录,2代表实验室成员登录,3代表普通用户登录
请求url:http://localhost:8080/access/login?userName=admin&userPassword=123123&type=1
这里实现了两级评论的效果,可以通过参数来分页获取相应博文的评论
请求url:http://localhost:8080/blog/comments?blogId=1&pageNo=1&pageSize=2
这里涉及到的东西比较多,用户点赞某篇博文,首先对点赞的表进行修改,然后对博文信息的表点赞数进行加一操作,然后返回相应的JSON对象(这里可以选择进行对作者发一封邮件,但是由于时间原因就没有去做,可以进行拓展)(取消点赞步骤类似,不再赘述)
请求url:http://localhost:8080/blog/like?blogId=1&userId=2
这是通过博文信息表中的发布时间进行排序,然后按照需要进行分页的读取
请求url:http://localhost:8080/blog/list?pageNum=1&pageSize=3
用户分页获得自己的博文的点赞消息,可以看到是哪个用户对自己的博文进行了点赞,已读的点赞消息不会在这里面(由于数据库记录了点赞者以及作者的id,所以后期可以拓展一些比如获得自己最近点赞的博文等等的请求)
请求url:http://localhost:8080/message/list?userId=1&pageNum=1&pageSize=2
这里说一句,由于网站的规模比较小,所以这里采用的是逻辑删除,而不是物理删除,将消息的state修改为0即可
这里也是比较繁琐的,首先公告只有管理员可以发布,管理员发布公告之后,系统会向每个用户邮箱发送新的公告请求,然后会在数据库中,在公告用户是否已读表中添加该公告的相应的信息,用来表示用户是否已读该消息。
请求url:http://localhost:8080/notice/publish?userId=1&title=实验室公告3&content=这里是实验室公告3
这里涉及到的情况很多,比如活动的人数是否已满,活动是否在进行中还是已经结束等等。申请成功的话还要在活动信息表中的申请人数进行加一处理,然后返回JSON对象。
请求url:http://localhost:8080/activity/apply?activityId=1&userId=2
接口文档在线分享
使用开发的三层架构:在根据idea的Springboot自动生成的框架的基础上,在src/main/java包下又进行了分类管理,分出了controller,mapper,model,service,util这几个包,分别表示了控制层,数据访问层,模型层,业务逻辑层,以及一个常用的工具包。
这里首先分析了接口信息中的JSON对象的共同特征,都是由成功标志,返回处理消息,返回状态码以及返回结果构成,所以就想到了用一个包装类把JSON包装起来,这样直接调用包装类的静态方法就可以获得一个格式化的JSON对象:
这个问题是在用户注册以及用户登录的时候遇到的,因为这里有很多种情况,比如:用户名不存在,密码错误,服务器出错……每一个对应的状态码都不一样,所以就考虑在业务逻辑层返回给控制层的时候,直接返回一个状态码,然后控制层根据不同的状态码进行相应的JSON对象的返回(这里是使用了switch来实现的)。也比较容易实现日后的拓展,直接添加一条case语句即可。
这个由于以前没有遇到过,所以也是进行了百度,找到了几个比较有用的信息,可以直接使用springboot集成mail实现邮件服务。通过寻找资料也是很容易的就实现了相应的功能。
这个问题出现在博文中要返回简要的用户信息,博文信息这个类中,有一个简要用户信息的类,所以通过查找资料,找到了一个association的关键词,它可以实现关联查询,也是成功解决了结果映射的这个问题。
开发中难免会遇到有些逻辑上想不通的情况,比如各种if语句的嵌套啊,代码怎么可以实现最简化……在遇到这些问题的时候,一定不能急躁,有的时候画一个流程图,可以更好地帮助你理清楚这其中的顺序,从而解决掉各种各样的bug!
首先十分感谢软件创新实验室可以给我们这些热爱项目开发的同学一个机会,可以学习到目前市面上主流使用的一些Java开发的框架,通过一个大作业来模拟真实项目开发,让我们能够提前了解和熟悉工作中是如何进行开发系统的。通过这不到两个月的学习,我大概的了解了maven,mybatis,spring,springmvc,springboot的相关基础知识,并通过大作业巩固了许多。在此也非常希望能够进入实验室,一起和志同道合的同学去追求自己心中的编程梦想。