开发者

MybatisPlus之时间处理问题

开发者 https://www.devze.com 2024-09-23 10:22 出处:网络 作者: Aholic
目录My编程客栈BATisPlus时间处理建表方式一:SQL级别(数据库设置)方式二:代码级别(mybatisplus自动填充)Java中(springboot)总结MybatisPlus时间处理
目录
  • My编程客栈BATisPlus时间处理
    • 建表
  • 方式一:SQL级别(数据库设置)
    • 方式二:代码级别(mybatisplus自动填充)
      • Java中(springboot)
    • 总结

      MybatisPlus时间处理

      建表

      阿里巴巴编码规约中建议命名为gmt_create,gmt_modifie,并且类型datetime,我们这里用create_time create_time。

      -- auto-generated definition
      create table user
      (
          id          bigint auto_increment comment '主键ID'
              primary key,
          name        varchar(30)                        null comment '姓名',
          age         int                                null comment '年龄',
          email       varchar(50)                        null comment '邮箱',
          create_time datetime  null comment '创建时间',
          create_time datetime  null comment '更新时间'
      );

      方式一:SQL级别(数据库设置)

      • create_time:

      MybatisPlus之时间处理问题

      • update_time:

      MybatisPlus之时间处理问题

      官方解释:

      • 此函数返回当前数据库系统时间戳,返回值的类型为 datetime,并且不含数据库时区偏移量。
      • CURRENT_TIMESTAMP 从运行 SQL Server 实例的计算机的操作系统中获得此值

      将Default Expression设置为CURRENT_TIMESTAMP的作用:

      • 在你进行插入、创建一条数据时给定一个默认值。
      • 将On Update设置为CURRENT_TIMESTAMP的作用:
      • 在你进行更新数据时会按照CURRENT_TIMESTAMP的规定更新你的值。(相当于实现了操作后时间的自动更新)

      方式二:代码级别(mybatisplus自动填充)

      Java中(springboot)

      建一个pojo实体类:

      package com.hyq.pojo;
      
      import com.baomidou.mybatisplus.annotation.*;
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.NoArgsConstructor;
      import org.springframework.format.annotation.DateTimeFormat;
      
      import java.util.Date;
      
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      @TableName("user")
      public class User {
          @TableId(type = IdType.AUTO)
          private Long id;
          private String name;
          private Integer age;
          private String email;
          @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          @TableField(fill = FieldFill.INSERT)  //插入时更新
          private Date createTime;
          @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          @TableField(fill = FieldFill.INSERT_UPDATE)   //添加时更新  之后写策略
          private Date updateTime;
      
      
      }
      

      重点看时间的处理:

      @DateTimeFjavascriptormat(pattern = "yyyy-MM-dd HH:mm:ss")
          @TableField(fill = FieldFill.INSERT)  //插入时更新
          private Date createTime;
          @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
          @TableField(fill = FieldFill.INSERT_UPDATE)   //添加时更新  之后写策略
          private Date updateTime;

      官方描述:

      • 描述:表名注解,标识实体类对应的表
      • 使用位置:实体类

      MybatisPlus之时间处理问题

      写完@TableField后可以去配置一个handler我们这里取名为MyMetaObjectHandler;

      实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler

      package com.hyq.handler;
      
      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;
      
      @Slf4j
      @Component  //一定不要www.devze.com忘记把处理器加到io容器c中
      public class MyMetaObjectHandler implements MetaObjectHandler {
      
          //插入时的填充策略
          @Override
          public void insertFill(MetaObject metaObject) {
              log.info("start insert fill......");
              this.setFieldValByName("createTime", new Date(), metaObject);
              this.setFieldValByName("updateTime", new Date(), metaObject);
          }
          //更新时的填充策略
          @Override
          public void updateFill(MetaObject metaObject) {
              log.info("start insert fill......");
              this.setFieldValByName("updateTime", new Date(), metaObject);
      
          }
      }
      

      这里的setFieldValByName源码如下:

          /**
           * 通用填充
           *
           * @param fieldName  java bean property name  字段名称
           * @param fieldVal   java bean property value 属性值
           * @param 编程客栈metaObject meta object parameter 元对象参数
           */
          default MetaObjectHandler setFieldValByName(String fieldName, Ophpbject fieldVal, MetaObject metaObject) {
              if (Objects.nonNull(fieldVal) && metaObject.hasSetter(fieldName)) {
                  metaObject.setValue(fieldName, fieldVal);
              }
              return this;
          }

      根据自己理解判断该怎么用;

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号