Resumen de las mejores prácticas de Mybatis plus llenado automático de campo general

Al realizar el mantenimiento de datos de la capa de persistencia (adición o modificación), generalmente necesitamos registrar algunos campos no comerciales, como: create_time, update_time, update_by, create_by, etc. para mantener la hora de creación, la hora de modificación, la persona de modificación y la creación. del registro de datos Personas y otra información. En circunstancias normales, debemos asignar valores manualmente a estos campos. El proceso de asignación también es relativamente redundante, todas las cuales son operaciones repetidas.

  • Por lo general, a create_time se le asigna la hora actual del sistema, y ​​a update_time se le asigna la hora actual cuando se ejecuta la operación de modificación del sistema.
  • create_by (creador), update_by (modificador) se asignan al nombre de usuario del usuario que ha iniciado sesión actualmente
xxxYyyZzz.setUpdateBy("zimug");    //数据记录更新操作人
xxxYyyZzz.setUpdateTime(new Date());   //数据记录更新操作的时间

Mybatis plus nos proporciona un método de asignación automático de una vez por todas.

Uno, ajustar la estructura de la tabla de la base de datos

Tome la tabla xxx_yyy_zzz en el entorno de la base de datos mysql como ejemplo, sobre la base de los campos de la tabla original, agregue los siguientes cuatro campos generales de mantenimiento de datos.

ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `create_by` VARCHAR(64) NOT NULL COMMENT '本条记录创建人';
ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '本条记录创建时间';
ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `update_by` VARCHAR(64) NOT NULL COMMENT '本条记录修改人';
ALTER TABLE `xxx_yyy_zzz` ADD COLUMN `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '本条记录的修改时间';

En segundo lugar, los campos asignados automáticamente a la clase principal de información de mantenimiento general

Ahora que mantenemos la nueva información de creación y modificación de una determinada tabla de datos, nuestras clases de entidad también deben ajustarse según sea necesario. Para evitar agregar estas cuatro variables miembro a cada clase de entidad, definimos una clase padre BaseColumns.

@Data
public class BaseColumns {

  /**
   * 本条记录创建人,insert操作的时候自动为该字段赋值
   */
  @TableField(fill = FieldFill.INSERT 
  private String createBy;

  /**
   * 本条记录创建时间,insert操作的时候自动为该字段赋值
   */
  @TableField(fill = FieldFill.INSERT)
  private LocalDateTime  createTime;

  /**
   * 本条记录更新人,insert或update操作的时候自动为该字段赋值,select = false
   */
  @TableField(fill = FieldFill.INSERT_UPDATE,select = false)  
  private String updateBy;

  /**
   * 本条记录更新时间,insert或update操作的时候自动为该字段赋值,select = false
   */
  @TableField(fill = FieldFill.INSERT_UPDATE,select = false)
  private LocalDateTime updateTime;


}
  • fill = FieldFill.INSERT significa que al campo se le asigna automáticamente un valor durante la operación de inserción
  • fill = FieldFill.INSERT_UPDATE significa que al campo se le asigna automáticamente un valor durante la operación de inserción o actualización
  • select = false significa que el campo de la base de datos correspondiente a este atributo no se consultará cuando se utilice el generador de condiciones Mybatis Wrapper para realizar consultas. El operador de tiempo de modificación de datos suele ser más significativo para la operación y el mantenimiento, por lo que generalmente no es necesario que se muestre en la página web, por lo que generalmente no se incluye en la consulta de selección. (Este contenido no está directamente relacionado con el autocompletado de campo de nuestra máquina, pero es significativo en aplicaciones prácticas)

Tres, la realización de la clase de entidad.

La clase de entidad XxxYyyZzz a continuación corresponde a la tabla xxx_yyy_zzz en la base de datos. Además de los cuatro campos generales anteriores, la tabla xxx_yyy_zzz también contiene otros campos comerciales.

@Data
@EqualsAndHashCode(callSuper = true)
public class XxxYyyZzz extends BaseColumns {

    //其他的属性字段
}

Cuarto, las reglas de la asignación automática.

@Component
public class MybastisColumnsHandler implements MetaObjectHandler {

    @Resource
    private JwtTokenUtil jwtTokenUtil;  //我的工具类,用于从Token令牌中获取登陆人信息

    //设置数据新增时候的,字段自动赋值规则
    @Override
    public void insertFill(MetaObject metaObject) {
      this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
      this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());

      this.strictInsertFill(metaObject, "createBy", String.class, jwtTokenUtil.getUsernameFromToken());
      this.strictUpdateFill(metaObject, "updateBy", String.class, jwtTokenUtil.getUsernameFromToken());
    }

    //设置数据修改update时候的,字段自动赋值规则
    @Override
    public void updateFill(MetaObject metaObject) {
      this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
      this.strictUpdateFill(metaObject, "updateBy", String.class, jwtTokenUtil.getUsernameFromToken());
    }
}
  • Cuando se agregan datos, createTime, updateTime, createBy y updateBy se asignan automáticamente, es decir, se inicializan los datos.
  • Cuando se modifican los datos, updateTime y updateBy se asignan automáticamente.
  • JwtTokenUtil es una clase de herramienta que escribí para obtener el nombre de usuario del usuario actualmente conectado del usuario JWT Token actualmente conectado. (El método para obtener el nombre de usuario de inicio de sesión actual en su sistema es diferente al mío, pero se puede obtener de todos modos)

Cinco, logra el efecto

Por ejemplo, cuando se actualizan los datos, no es necesario escribir las siguientes dos líneas de código y se updateFill(MetaObject metaObject)completan automáticamente

//xxxYyyZzz.setUpdateBy("zimug");    //数据记录更新操作人
//xxxYyyZzz.setUpdateTime(new Date());   //数据记录更新操作的时间

xxxYyyZzzMapper.updateById(xxxYyyZzz);

Del mismo modo, cuando la operación de inserción de datos, se insertFill(MetaObject metaObject)ejecutará automáticamente.

Bienvenido a seguir mi blog, hay muchas colecciones boutique.

  • Este artículo se reproduce con una indicación de la fuente (se debe adjuntar la conexión y el texto no se puede reproducir únicamente): Blog de Letter Brother .

Si crees que es útil para ti, ¡dale me gusta y compártelo! ¡Tu apoyo es mi inagotable motivación creativa! . Además, el autor ha publicado el siguiente contenido de alta calidad recientemente y espero su atención.

Supongo que te gusta

Origin blog.csdn.net/hanxiaotongtong/article/details/113247807
Recomendado
Clasificación