前言:
此章节用到的知识点:mybatisPlus ;参考网址:https://www.bilibili.com/video/BV1Xu411A7tL?p=7&vd_source=79bbd5b76bfd74c2ef1501653cee29d6
正常新建一个接口:
再新建这个接口的实现类:
修改接口:
修改实现类:
然后就可以注入并使用了:
=============================================================
此章节还需要参考:创建一个类来统一结果返回:https://blog.csdn.net/qq_42331202/article/details/115823134
统一的返回结果是json格式,类似下面的数据结构
{
"success":布尔,//代表响应是否成功
"code":数字,//响应码
"message":字符串,//返回消息
"data":HashMap //返回数据
}
首先写一个接口,定义数据返回响应码
package com.example.learn.common;
/**
* @author : wangbo
* @version : 1.0
* @date :Create in 2021/4/18
* @description :
*/
public interface ResultCode {
// 成工时返回的状态码
public static Integer SUCCESS=20000;
// 失败是返回的状态码
public static Integer ERROR=20001;
}
写统一返回结果的类
package com.example.learn.common;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
* @author : wangbo
* @version : 1.0
* @date :Create in 2021/4/18
* @description :
*/
@Data
public class Result {
private boolean success;
private Integer code;
private String message;
private Map<String,Object> data=new HashMap<>();
private Result(){
}
public static Result ok(){
Result result=new Result();
result.setSuccess(true);
result.setCode(ResultCode.SUCCESS);
result.setMessage("成功");
return result;
}
public static Result error(){
Result result=new Result();
result.setSuccess(false);
result.setCode(ResultCode.ERROR);
result.setMessage("失败");
return result;
}
public Result success(boolean success){
this.setSuccess(success);
return this;
}
public Result code(Integer code){
this.setCode(code);
return this;
}
public Result message(String message) {
this.setMessage(message);
return this;
}
public Result data(Map<String, Object> data) {
this.setData(data);
return this;
}
}
其他参考:https://blog.csdn.net/qq_51447496/article/details/131414235?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-131414235-blog-104906051.235^v38^pc_relevant_anti_vip&spm=1001.2101.3001.4242.4&utm_relevant_index=8
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> {
private int code;
private String message;
private T data;
public Result(T data) {
this.code = 200;
this.message = "success";
this.data = data;
}
public Result(T data, boolean success, String message) {
if (success) {
this.code = 200;
this.message = "success";
} else {
this.code = 500;
this.message = message;
}
this.data = data;
}
public Result(int code, String message) {
this.code = code;
this.message = message;
this.data = null;
}
public static <T> Result<T> success(T data) {
return new Result<>(data);
}
public static <T> Result<T> fail(String message) {
return new Result<>(500, message);
}
public static <T> Result<T> fail(int code, String message) {
return new Result<>(code, message);
}
}
======================================================================
拦截器:https://www.cnblogs.com/xiaobaibailongma/p/17060812.html
======================================================================
hutool工具包快速入门:https://blog.csdn.net/Peaceuai/article/details/127953211
package com.hmdp.utils;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.hmdp.dto.UserDTO;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static com.hmdp.utils.RedisConstants.LOGIN_USER_KEY;
import static com.hmdp.utils.RedisConstants.LOGIN_USER_TTL;
public class RefreshTokenInterceptor implements HandlerInterceptor {
private StringRedisTemplate stringRedisTemplate;
public RefreshTokenInterceptor(StringRedisTemplate stringRedisTemplate) {
this.stringRedisTemplate = stringRedisTemplate;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1.获取请求头中的token
String token = request.getHeader("authorization");
if (StrUtil.isBlank(token)) {
return true;
}
// 2.基于TOKEN获取redis中的用户
String key = LOGIN_USER_KEY + token;
Map<Object, Object> userMap = stringRedisTemplate.opsForHash().entries(key);
// 3.判断用户是否存在
if (userMap.isEmpty()) {
return true;
}
// 5.将查询到的hash数据转为UserDTO
UserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);
// 6.存在,保存用户信息到 ThreadLocal
UserHolder.saveUser(userDTO);
// 7.刷新token有效期
stringRedisTemplate.expire(key, LOGIN_USER_TTL, TimeUnit.MINUTES);
// 8.放行
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 移除用户
UserHolder.removeUser();
}
}
======================================================================
黑马视频地址:https://www.bilibili.com/video/BV1cr4y1671t?p=25&vd_source=79bbd5b76bfd74c2ef1501653cee29d6
参考笔记博客:https://blog.csdn.net/weixin_50523986/article/details/131815165
参考笔记博客:https://cyborg2077.github.io/2022/10/22/RedisPractice/#%E5%86%85%E5%AE%B9%E6%A6%82%E8%BF%B0
======================================================================
1
1
1