欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis-Plus自动填充的实现示例

程序员文章站 2023-11-21 17:26:22
在常用业务中有些属性需要配置一些默认值,mybatis-plus提供了实现此功能的插件。在这里修改user表添加 create_time 字段和 update_time 字...

在常用业务中有些属性需要配置一些默认值,mybatis-plus提供了实现此功能的插件。在这里修改user表添加 create_time 字段和 update_time 字段,在user类中添加对应属性。

1、为需要自动填充的属性添加注解 @tablefield

提供了4种自动填充策略:default,默认不处理。insert,插入填充字段。update,更新填充字段。insert_update,插入和更新填充字段。

@data
public class user {
  private long id;
  private string name;
  private integer age;
  private string email;

  @tablefield(fill = fieldfill.insert)
  private date createtime;
  @tablefield(fill = fieldfill.insert_update)
  private date updatetime;
}

2、实现字段填充控制器,编写自定义填充规则

实现 metaobjecthandler 接口,实现 insertfill 和 updatefill 方法,此处的 create_time 和update_time字段需要插入时填充值, 只有 update_time 字段在修改时需要填充,所以策略如下。

//需要将自定义填充控制器注册为组件

@component
public class mymetaobjecthandler implements metaobjecthandler {

  private static final logger logger= loggerfactory.getlogger(mymetaobjecthandler.class);

  //insert操作时要填充的字段
  @override
  public void insertfill(metaobject metaobject) {
    logger.info("start insert fill ...");
    //根据属性名字设置要填充的值
    this.setfieldvalbyname("createtime",new date(),metaobject);
    this.setfieldvalbyname("updatetime",new date(),metaobject);
  }

  //update操作时要填充的字段
  @override
  public void updatefill(metaobject metaobject) {
    logger.info("start insert fill ...");
    this.setfieldvalbyname("updatetime",new date(),metaobject);
  }
}

3、插入数据测试

@runwith(springrunner.class)
@springboottest
public class crudtest {
  @autowired
  private usermapper usermapper;

  @test
  public void testinsert(){
    user user = new user();
    user.setname("jack11");
    user.setage(20);
    user.setemail("4849111@qq.com");

    int result= usermapper.insert(user);
    system.out.println(result);
    system.out.println(user);
  } 
}

4、修改数据测试

@test
public void testupdate(){
  user user = new user();
  user.setid(2l);
  user.setname("jackie");
  int result = usermapper.updatebyid(user);
  system.out.println(result);
}

一次插入数据后,create_time和update_time都被填充了设置的时间,做update操作后只有update_time的进行了填充修改。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。