zoukankan      html  css  js  c++  java
  • MP(MyBatis-Plus)的自动填充功能

    什么是自动填充

    有些表中会有更新时间、创建时间、更新人或者创建人这些字段。

    每次对数据进行新增、删除、修改时都需要对这些字段进行设置。传统的做法是在进行这些操作前,对Entity的字段进行set设置,然后再进行操作。这种做法不仅容易忘记导致出错、而且代码会显得特别冗余。

    虽然新增时间和修改时间可以使用数据库的时间,但是新增人和修改人就不能使用这样的功能。

    所以MP就提供自动填充的功能,帮助自定设置这些字段的值,提升开发效率,代码也会显得特别优雅。

    使用MP实现自动填充

    step1:在Entity上添加注解

    // 插入数据时进行自动填充
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    
    // 更新数据时进行自动填充
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;
    

    step2:编写自动填充实现类

    @Configuration
    @EnableTransactionManagement
    @MapperScan("com.csx.demo.spring.boot.dao")
    public class MyBatisPlusConfig {
    
        private static final Logger log = LoggerFactory.getLogger(MyBatisPlusConfig.class);
    
        // MetaObjectHandler 这接口有很多方法,一般情况下只需要实现这两个方法就行了
        // 其他方法感兴趣的可以自己进去看下
        @Component
        public class MyFillHandler implements MetaObjectHandler {
    
            @Override
            public void insertFill(MetaObject metaObject) {
                log.info("start insert fill ....");
                // 起始版本 3.3.0(推荐使用)
                this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
            }
    
            @Override
            public void updateFill(MetaObject metaObject) {
                log.info("start update fill ....");
                // 起始版本 3.3.0(推荐)
                this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
            }
        }
    }
    

    关于上面的实现类,需要注意下面几点:

    • 需要实现com.baomidou.mybatisplus.core.handlers.MetaObjectHandler接口,而且整个Spring容器中只能有一个实现;
    • MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充;
    • 要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法;
    • 不需要根据任何来区分可以使用父类的fillStrategy方法。
  • 相关阅读:
    未能从程序集 C:Program Files (x86)MSBuild14.0inMicrosoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClean”
    asp.net mvc 4 项目升级到 asp.net mvc5
    SQL Server查看所有表大小,所占空间
    0x80072f8a未指定的错误
    vs2012 aps.net4.0/4.5尚未在web服务器上注册
    vsphere 出现“在主机的当前连接状况下不允许执行该操作”
    sql server 发布时提示'dbo.sysmergepublications'无效的解决办法
    sql server更改机器名后更改数据库机器名
    Ajax向后台传入File类型参数
    上传下载Azure Blob里的Excel文件。
  • 原文地址:https://www.cnblogs.com/54chensongxia/p/14251297.html
Copyright © 2011-2022 走看看