Привет всем, я из сообщества разработчиков Tencent Cloud. Front_Yue,Эта статья познакомит вас с весной Как автоматически заполнять публичные поля, такие как создатель и время создания, при работе с данными в загрузочном проекте.
В MyBatis-Plus MetaObjectHandler — это интерфейс для обработки метаобъектов объектов сущностей. Это позволяет нам выполнять пользовательскую обработку объектов сущностей до или после таких операций, как вставка, обновление и удаление. Через MetaObjectHandler мы можем реализовать такие функции, как автоматическое заполнение времени создания, времени обновления, отметки удаления и т. д.
В этой статье подробно описаны принцип и использование MetaObjectHandler.
Принципы MetaObjectHandler в основном включают в себя следующие аспекты:
В глобальной конфигурации MyBatis-Plus мы можем зарегистрировать один или несколько классов реализации MetaObjectHandler. Эти классы реализации будут вызываться при выполнении операций CRUD.
MetaObjectHandler будет перехватывать до или после операций CRUD, таких как вставка, обновление, удаление и т. д. В этих методах мы можем выполнять пользовательскую обработку объектов сущностей.
В методах MetaObjectHandler мы можем изменять или присваивать значения свойствам объекта сущности по мере необходимости. Например, автоматически заполнять время создания, время обновления, отметку удаления и т. д.
Ниже приведены конкретные шаги по использованию MetaObjectHandler:
Во-первых, нам нужно создать класс, реализующий интерфейс MetaObjectHandler. В этом классе мы можем переопределять методы по мере необходимости.
package com.frontyue.common.core.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.frontyue.common.core.domain.LoginUser;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* MyMetaObjectHandler
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Autowired
private LoginUser loginUser;
@Override
public void insertFill(MetaObject metaObject) {
setFieldValByName("createTime", LocalDateTime.now(), metaObject);
setFieldValByName("createBy", loginUser.getUsername(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
setFieldValByName("updateBy", loginUser.getUsername(), metaObject);
}
}
В приведенном выше примере мы использовали @Component аннотация,убеждатьсяMyMetaObjectHandler
тип одеяла Spring управлять。нассоздаватьполучил имя по имениMyMetaObjectHandler
класс и орудия MetaObjectHandler
интерфейс。существоватьinsertFill
в методе,нас Автоматически заполняетсясоздаватьлюдиисоздаватьвремя。существовать updateFill
в методе,нас Автоматически обновлять таблицы базы данных Время обновленияс обновлениямилюди。
В классе сущности добавьте поля создателя, времени создания, средства обновления и времени обновления:
import java.time.LocalDateTime;
public class User {
private static final long serialVersionUID = 1L;
@Schema(description = "ID пользователя")
@TableId(value = "user_id", type = IdType.AUTO)
private Integer userId;
@Schema(description = "имя пользователя")
@TableField("username")
private String username;
@Schema(description = «Псевдоним пользователя»)
@TableField("nick_name")
private String nickName;
@Schema(description = "пароль")
@TableField("password")
private String password;
/**
* создавать ВОЗ */
@Schema(description = "создавать ВОЗ") @TableField(value = "create_by" ,fill = FieldFill.INSERT)
private String createBy;
/**
* создаватьвремя */
@Schema(description = "создаватьвремя") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" )
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* Программа обновления
*/
@Schema(description = "Программа обновления")
@TableField(value = "update_by" , fill = FieldFill.INSERT_UPDATE)
private String updateBy;
/**
* Время обновления
*/
@Schema(description = "Время обновления")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" )
@TableField(value = "update_time" , fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* Примечание
*/
@Schema(description = "Примечание")
@TableField("remark" )
private String remark;
}
Благодаря вышеуказанной конфигурации нам не нужно обрабатывать эти поля при работе с базой данных.
В приведенном выше примере мы использовали MyBatis-Plus предоставил strictInsertFill и strictUpdateFill Метод автозаполнениясоздаватьвремяи Время обновления。на самом деле,Мы также можем настроить правила заполнения по мере необходимости.
Например, мы можем добавить новый метод в класс MyMetaObjectHandler, который автоматически заполняет маркеры удаления:
@Override
public void deleteFill(MetaObject metaObject) {
this.strictDeleteFill(metaObject, "deleteFlag", Integer.class, 1);
}
В приведенном выше примере мы использовали strictDeleteFill Метод для автоматического заполнения маркеров удаления. Когда мы выполняем операцию удаления, MyMetaObjectHandler из deleteFill Метод будет вызван автоматически,Чтобы добиться автоматического заполнения меток удаленияиз Функция。
Короче говоря, MetaObjectHandler да MyBatis-Plus Очень практичная функция, она может помочь нам существовать. CRUD действоватьавтоматически выполнять некоторые общиеиздействовать,например автозаполнениесоздаватьвремя、Время обновления、Удалить маркеры и т. д. Напишите собственный MetaObjectHandler с простой настройкой.
наконец,Благодарим партнеров сообщества разработчиков Tencent Cloud за их сотрудничество.,Если вам нравится контент моего блога,Примите мое мнение и поделитесь опытом,Ставьте лайк, ставьте лайк и комментируйте,Это будет моей самой большой поддержкой и поощрением. в то же время,Мы также приветствуем ценные комментарии и предложения каждого.,Позвольте мне лучше улучшить и усовершенствовать мой блог. Спасибо!