技术栈 : Vue + Springboot + Mybatis-Plus + Redis + MySQL
1、项目环境的搭建
1.1、子模块和父模块的依赖问题
当父模块使用版本管理进行依赖管理的话,必须声明版本号,如果不这样子模块是无法引入到父模块的依赖的,当然还有一种方法是,直接copy一份父模块的依赖全部到子模块这样的话父模块可以不声明版本号 ;
1.2、声明父工程
必须再父模块的pom文件中声明如下:
pom
2、首页文章列表
2.1、日期关于日期的查询
由于数据库中create_date 为bigint 13位,直接year()不行,需要先转date型后year()。
select year(FROM_UNIXTIME(create_date/1000)) year,month(FROM_UNIXTIME(create_date/1000))
2.2、Mapper接口爆红、
在Mapper文件的上面添加注解即可
@Repository
public interface ArticleMapper extends BaseMapper
2.3、mybatisplus遇到多表查询怎么办
复杂的sql需要我们自己实现,但是需要注意的是:我们要在resouces下为mapper添加对应的xml时,resources下的包名要与java下mapper文件的一致
3、最热标签
最热标签就是对标签ms_article_tag中的tag_id进行排序数量最多的就是我们的最热标签
1、标签所拥有的文章数量最多就是最热标签 2、查询 根据tag_id分组计数,从大到小排列取前limit个3、然后根据id查出标签
4、统一异常处理
@ControllerAdvice //对加了Controller注解的方法进行拦截处理 AOP的实现!
public class AllExceptionHandler {
//进行异常处理,处理Exception.class
@ExceptionHandler(Exception.class)
@ResponseBody
public Result doException(Exception e){
e.printStackTrace();
return Result.fail(-999,“系统异常”) ; //发生异常返回错误的json
}
}
5、最热文章
先按照是置顶排序 ,然后按照浏览量倒叙排列 order by view_count desc
6、最新文章
先按照是置顶排序 ,然后按照创造时间倒叙排列 order by create_time desc
7、文章归档
SELECT YEAR(FROM_UNIXTIME(create_date/1000)) YEAR,MONTH(FROM_UNIXTIME(create_date/1000)) MONTH,COUNT(*)COUNT FROM ms_article GROUP BY YEAR,MONTH;
GROUP BY YEAR,MONTH;
意思是将所有具有相同month字段值和year的记录放到一个分组里。也就是按年月分组,年月都一致算一组
8、登录、用户信息、注销
仅梳理思路
-
Token是服务端端生成的一串字符串,作为客户端进行请求时辨别客户身份的的一个令牌。当用户第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
-
token前端获取到之后,会存储在 storage中 h5 ,本地存储,存储好后,拿到storage中的token去获取用户信息,如果这个接口没实现,他就会一直请求陷入死循环
-
Token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
用户登录
-
检查参数是否合法
-
根据用户名和密码去user表中查询是否存在
-
如果不存在登录失败
-
如果存在使jwt生成token返回给前端
-
将token放入redis当中 ,设置过期时间
//将token放入redis key: 令牌 value: 用户信息 过期时间:1天
redisTemplate.opsForValue().set(“TOKEN_”+token, JSON.toJSONString(sysUser),1, TimeUnit.DAYS);
- 先认证token是否合法,再去redis认证是否存在)
获取当前用户信息
-
token的合法性验证:是否为空、解析是否成功、redis是否存在
-
校验失败返回错误
-
校验成功返回结果LoginUserVo<