实体类有字段名重复
公共字段处理
mybatisplus中@TableField用法
fill属性:自动填充
取值:
DEFAULT:默认值 不自动填充
INSERT:新增的时候填充 CreateTime CreateUser
UPDATE: 修改的时候填充
INSERT_UPDATE:新增和修改的时候填充 UpdateTime UpdateUser
package com.itheima.reggie.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class Category implements Serializable {
private Long id;//主键
private Integer type;//类型 1 菜品分类 2 套餐分类
private String name;//分类名称
private Integer sort; //顺序
@TableField (fill = FieldFill.INSERT)
private Date createTime;//创建时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;//更新时间
@TableField(fill = FieldFill.INSERT)
private Long createUser;//创建用户
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;//更新用户
}
mapper里重建一个config
package com.itheima.reggie.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
//自定义数据对象处理器
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入操作,自动填充
@Override
public void insertFill(MetaObject metaObject) {
metaObject.setValue(“createTime”, new Date());
metaObject.setValue(“updateTime”, new Date());
metaObject.setValue(“createUser”, 1L);
metaObject.setValue(“updateUser”, 1L);
}
//更新操作,自动填充
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateTime", new Date());
metaObject.setValue("updateUser", 1L);
}
}
用户信息共享:创建工具类
utils
package com.itheima.reggie.common;
import com.itheima.reggie.domain.Employee;
public class ThreadLocalUtils {
//定义一个线程容器
private static ThreadLocal threadLocal=new ThreadLocal<>();
//存
public static void set(Employee employee){
threadLocal.set(employee);
}
//取
public static Employee get(){
return threadLocal.get();
}
//删
public static void remove(){
threadLocal.remove();
}
}
package com.itheima.reggie.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.reggie.common.Constant;
import com.itheima.reggie.common.ResultInfo;
import com.itheima.reggie.common.ThreadLocalUtils;
import com.itheima.reggie.domain.Employee;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
//登录拦截
//在controller方法执行前拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取登录用户
HttpSession session = request.getSession();
Employee employee = (Employee) session.getAttribute(Constant.SESSION_EMPLOYEE);
//没有
if (employee == null) {
//手动封装提示信息
ResultInfo resultInfo = ResultInfo.error("NOTLOGIN");
//手动转json
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(resultInfo);
//通过response
response.setContentType("applicat/json;charset=utf-8");
response.getWriter().write(json);
return false;
}
//有
//1.将当前对象放入线程容器中
ThreadLocalUtils.set(employee);
//2.放行
return true;
}
//方法执行后拦截
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
//整个结束之后拦截
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
package com.itheima.reggie.mapper.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.itheima.reggie.common.ThreadLocalUtils;
import com.itheima.reggie.domain.Employee;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
//自定义数据对象处理器
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入操作,自动填充
@Override
public void insertFill(MetaObject metaObject) {
Employee employee = ThreadLocalUtils.get();
metaObject.setValue(“createTime”, new Date());
metaObject.setValue(“updateTime”, new Date());
metaObject.setValue(“createUser”, employee.getId());
metaObject.setValue(“updateUser”,employee.getId());
}
//更新操作,自动填充
@Override
public void updateFill(MetaObject metaObject) {
Employee employee = ThreadLocalUtils.get();
metaObject.setValue("updateTime", new Date());
metaObject.setValue("updateUser", employee.getId());
}
}
package com.itheima.reggie.interceptor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.reggie.common.Constant;
import com.itheima.reggie.common.ResultInfo;
import com.itheima.reggie.common.ThreadLocalUtils;
import com.itheima.reggie.domain.Employee;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Component
public class LoginCheckInterceptor implements HandlerInterceptor {
//登录拦截
//在controller方法执行前拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取登录用户
HttpSession session = request.getSession();
Employee employee = (Employee) session.getAttribute(Constant.SESSION_EMPLOYEE);
//没有
if (employee == null) {
//手动封装提示信息
ResultInfo resultInfo = ResultInfo.error("NOTLOGIN");
//手动转json
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(resultInfo);
//通过response
response.setContentType("applicat/json;charset=utf-8");
response.getWriter().write(json);
return false;
}
//有
//1.将当前对象放入线程容器中
ThreadLocalUtils.set(employee);
//2.放行
return true;
}
//方法执行后拦截
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
//整个结束之后拦截 删除
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
*ThreadLocalUtils.remove();
}
}