mybatis-plus实现苍穹外卖项目-分类操作,不定期更新-day3

发布于:2025-09-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

一、自动填充功能的实现

1、在每一个存在这四个属性的类中添加注解

2、创建AutoFillAspect类


        事前说明:原视频教程中使用的是mybaits,我想试试能不能通过mybatis-plus做一下这个项目。由于日常工作外加上我的私人生活,视频一天的课,我可能得一周甚至更多时间才能敲完。文章中插入的代码是实现上一个功能的基础上加上新的功能,所以想看这个模块的完整代码,直接看最后一个标题的内容或者通过我的gitee地址看就行。
苍穹外卖mybatis-plus版https://gitee.com/xxyzc/sky-take-out

一、自动填充功能的实现

        创建人、创建时间、修改人、修改时间在很多实体类中都存在,如果每做一个增加和修改的功能,就都需要重新做这四个操作:

setCreateTime(LocalDateTime.now()); setUpdateTime(LocalDateTime.now()); setCreateUser(BaseContext.getCurrentId()); setUpdateUser(BaseContext.getCurrentId());,后期维护也不方便。所以为了解决这个问题,设置自动填充功能。

1、在每一个存在这四个属性的类中添加注解

        这里以Employee类为例,其他的实体类都需要做如下修改:注解为:@TableField(value = "***", fill = FieldFill.INSERT)和@TableField(value = "***", fill = FieldFill.INSERT_UPDATE)。

其中,value中设置的是数据库中的列名,fill=...是需要进行的操作,有新增,和修改

package com.sky.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    private String username;

    private String name;

    private String password;

    private String phone;

    private String sex;

    private String idNumber;

    private Integer status;

    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //创建时间,新增时需要自动填充
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    //更新时间,新增和修改时都需要自动填充
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    //创建人,新增时需要自动填充
    @TableField(value = "create_user", fill = FieldFill.INSERT)
    private Long createUser;

    //修改人,新增和修改时都需要自动填充
    @TableField(value = "update_user", fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;

}

2、创建AutoFillAspect类

真正实现自动填充功能的类

package com.sky.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.sky.context.BaseContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 实现了创建时间、创建人、修改时间、修改人自动填充的功能
 */
@Component
@Slf4j
public class AutoFillAspect implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("新增时的自动填充");
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "createUser", Long.class, BaseContext.getCurrentId());
        this.strictInsertFill(metaObject, "updateUser", Long.class, BaseContext.getCurrentId());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("修改时的自动填充");
//        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
//        this.strictUpdateFill(metaObject, "updateUser", Long.class, BaseContext.getCurrentId());
        metaObject.setValue("updateTime", LocalDateTime.now());
        metaObject.setValue("updateUser", BaseContext.getCurrentId());
    }
}

完成1、2即可完成这四个属性自动填充功能。


网站公告

今日签到

点亮在社区的每一天
去签到