IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Mybatisplus实现MetaObjectHandler接口填充创建更新时间 -> 正文阅读

[Java知识库]Mybatisplus实现MetaObjectHandler接口填充创建更新时间

/**

  • 创建时间
    /
    @TableField(value = “CREATE_TIME”, fill = FieldFill.INSERT)
    @DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”)
    private Date createTime;
    /
    *
  • 创建账号
    /
    @TableField(value = “CREATE_USER”, fill = FieldFill.INSERT)
    private String createUser;
    /
    *
  • 更新时间
    /
    @TableField(value = “UPDATE_TIME”, fill = FieldFill.UPDATE)
    @DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”)
    private Date updateTime;
    /
    *
  • 更新账号
    */
    @TableField(value = “UPDATE_USER”, fill = FieldFill.UPDATE)
    private String updateUser;

//第一种方式填充插入更新时间
//创建RabbitMetaObjectHandler类实现MetaObjectHandler接口
@Component
public class RabbitMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName(“createTime”, new Date(), metaObject);
//获取当前登录用户1
String username = “system”;
if (SecurityContextHolder.getContext().getAuthentication() != null) {
username = SecurityContextHolder.getContext().getAuthentication().getName();
}
Object lastUpdateNameId = metaObject.getValue(“lastUpdateNameId”);
Object lastUpdateTime = metaObject.getValue(“lastUpdateTime”);
//获取当前登录用户2
SysUser user = (SysUser)SecurityUtils.getSubject().getPrincipal();
if (null == lastUpdateNameId) {
metaObject.setValue(“lastUpdateNameId”, user.getId());
}
if (null == lastUpdateTime) {
metaObject.setValue(“lastUpdateTime”, new Date());
}
//获取当前登录用户3
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
String user = request.getHeader(“authercode”);
this.setFieldValByName(“createUser”, username, metaObject);
}

@Override
public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("updateTime", new Date(), metaObject);
    String username = "system";
    if (SecurityContextHolder.getContext().getAuthentication() != null) {
        username = SecurityContextHolder.getContext().getAuthentication().getName();
    }
    this.setFieldValByName("updateUser", username, metaObject);
}

}

//第二种方式填充插入更新时间

/**

  • 新增,更新时,自动更新字段
    */
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {

    private static String CREATE_TIME = “createTime”;
    private static String UPDATE_TIME = “updateTime”;

    /**

    • 插入使用
      */
      @Override
      public void insertFill(MetaObject metaObject) {
      fillValue(metaObject, CREATE_TIME, () -> getDateValue(metaObject.getSetterType(CREATE_TIME)));
      fillValue(metaObject, UPDATE_TIME, () -> getDateValue(metaObject.getSetterType(UPDATE_TIME)));
      }

    @Override
    public void updateFill(MetaObject metaObject) {
    fillValue(metaObject, “et.”+UPDATE_TIME, () -> getDateValue(metaObject.getSetterType(“et.”+UPDATE_TIME)));
    }
    private void fillValue(MetaObject metaObject, String fieldName, Supplier valueSupplier) {
    if (!metaObject.hasGetter(fieldName)) {
    return;
    }
    Object sidObj = metaObject.getValue(fieldName);
    if (sidObj == null && metaObject.hasSetter(fieldName) && valueSupplier != null) {
    setFieldValByName(fieldName, valueSupplier.get(), metaObject);
    }
    }

    private Object getDateValue(Class<?> setterType) {
    if (Date.class.equals(setterType)) {
    return new Date();
    } else if (LocalDateTime.class.equals(setterType)) {
    return LocalDateTime.now();
    } else if (Long.class.equals(setterType)){
    return System.currentTimeMillis();
    }
    return null;
    }
    }

//第三种方式填充插入更新时间
/**

  • 线程本地持有者:存储当前请求线程的登录用户
    */
    public class ThreadLocalHolder{

    private final static ThreadLocal ThreadLocalHolder = new ThreadLocal<>();
    /**

    • 重写ThreadLocal的三个方法:set、get、remove
      */
      public static void set(OnlineUser user) {
      ThreadLocalHolder.set(user);
      }

    public static OnlineUser get() {
    return ThreadLocalHolder.get();
    }

    public static void remove() {
    ThreadLocalHolder.remove();
    }

    /**

    • 获取登录用户的常用信息:id、姓名
      */
      public static Long getId() {
      return ThreadLocalHolder.get().getId();
      }

    public static String getName() {
    return ThreadLocalHolder.get().getName();
    }
    }

/**

  • 登录验证
    */
    @Controller
    public class SysLoginController extends BaseController {

    @RequestMapping(value = “/login”, method = RequestMethod.POST)
    @ResponseBody
    public Result login(HttpServletRequest request, UserVO userVO) {
    User userSession = (User) request.getSession().getAttribute(“user”);
    //用户未登录
    if(userSession == null){
    //校验:名字是否空、用户是否存在、密码是否空、密码是否正确
    if (密码正确){
    //执行登陆后台的逻辑
    request.getSession().setAttribute(“user”,user);
    return Result.ok(“登录成功”);
    }else{
    return Result.fail(“密码不正确,请重新输入”);
    }
    }else{
    return Result.ok(“登录成功”);
    }
    }

    @ApiOperation(“退出登录”)
    @RequestMapping(value = “logout”, method = RequestMethod.POST)
    @ResponseBody
    public Result logoutApi(HttpServletRequest request) {
    //销毁session
    request.getSession().invalidate();
    return Result.ok(“退出登录成功”);
    }
    }
    /**

  • session拦截器
    */
    @Component
    public class SessionInterceptorConfig implements HandlerInterceptor {

    private static Logger log = LoggerFactory.getLogger(SessionInterceptorConfig.class);
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    User user = (User) request.getSession().getAttribute(“user”);
    //如果用户不为空,则通过
    if (user != null) {
    //将在线用户存入线程本地ThreadLocal中
    OnlineUser onlineUser = new OnlineUser(user.getId(), user.getUserName());
    ThreadLocalHolder.set(onlineUser);
    return true;
    } else {
    log.info(">>>session过期, 跳至登录页");
    request.getRequestDispatcher("/login").forward(request, response);
    return false;
    }
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    //将线程本地ThreadLocal中的在线用户移除(需要手动移除,否则会产生内存泄露)
    ThreadLocalHolder.remove();
    }
    }

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:22:50  更:2022-03-22 20:25:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:41:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码