每次对数据进行新增、删除、修改时都需要对这些字段进行设置。传统的做法是在进行这些操作前,对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方法。