mybatis-plus自动填充时间

mybatis-plus实现时间自动填充

1、引入mybatis相关的依赖

<!--        mybatis-plus包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
<!--        代码生成器的模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
<!--        代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.4.1</version>
        </dependency>

2、数据库表

/*
 Navicat Premium Data Transfer

 Source Server         : Mysql
 Source Server Type    : MySQL
 Source Server Version : 80023
 Source Host           : localhost:3306

 Target Server Type    : MySQL
 Target Server Version : 80023
 File Encoding         : 65001

 Date: 13/01/2022 17:49:11
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `create_time` datetime(6) NULL DEFAULT NULL,
  `update_time` datetime(6) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

注意:如果数据库字段采用下划线的命名方式,要在springboot中开启驼峰命名映射,否则会出现字段找不到的错误。

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true   #开启驼峰命名映射

3、生成相应的后端代码
代码结构
4、自动填充 官网文档

实体类
   /**
     * 主键
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;

    /**
     * 姓名
     */
    private String name;

    @TableField(value ="create_time", fill = FieldFill.INSERT)          // 新增的时候填充数据
    private LocalDateTime createTime;

    @TableField( value = "update_time" ,fill= FieldFill.INSERT_UPDATE) // 新增或修改的时候填充数据
    private LocalDateTime updateTime;

注意:此处的value值是数据库的字段名,实体的数据类型应和数据库保持一致。

填充属性

public enum FieldFill {
/**
* 默认不处理
/
DEFAULT,
/
*
* 插入填充字段
/
INSERT,
/
*
* 更新填充字段
/
UPDATE,
/
*
* 插入和更新填充字段
*/
INSERT_UPDATE
}

5、自定义实现类 MyMetaObjectHandler

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

   
    @Override
    public void insertFill(MetaObject metaObject) {
//        会对字段进行判空处理,如果createTime为null时才会插入
//        this.setFieldValByName("createTime",new Date(),metaObject);
//        强制插入,不会判空
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class,LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)

    }
}

注意:此处的第二个属性值应和实体类的属性名保持一致。

另外附上官网的注意事项

  • 填充原理是直接给entity的属性设置值!!! 注解则是指定该属性在对应情况下必有值,如果无值则入库会是null
  • MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充
  • 字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段
  • 填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
  • 要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法
  • 不需要根据任何来区分可以使用父类的fillStrategy方法

如果有什么不对的地方欢迎各位大神指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值