Автозаполнение публичных полей Mybatis Plus

Java MyBatis

1. Введение

Когда мы разработаем базу данных, мы обязательно будем принести информацию о проверке аудита, такую ​​как время добавления и обновления, а также оператора. Причина этой информации заключается в том, что если однажды база данных компании удаляется искусственно, хотя может быть резервная копия базы данных для восстановления данных. Но нам все еще нужно отслеживать, кто это сделал, когда это сделал, что это сделало и т. Д., Так что его можно легко определить и отремонтировать. Тем не менее, очень громоздко явно измените эту информацию, когда мы изменяем каждую часть данных, и надеемся обрабатывать эту информацию незаметно.

2. Общий подход

Итак, что такое хорошее решение? существуетSpring Dataпредоставляется в рамках@CreatedByи@LastModifiedByчтобы зафиксировать, кто создал или изменил сущности и@CreatedDateи@LastModifiedDateдля захвата правильно созданных или измененных объектов. Эти функции доступны, если вы используете соответствующий фреймворк. Ну, мы на самом деле знаем, чтоSpring Data JDBC,Spring Data JPAНе мейнстрим, мейнстримMybatis. Итак, какие у нас есть варианты?

2.1 Разработка плагина аудита Mybatis

Если вы используете роднойMybatisВы можете написать плагин для аудита этих функций. я объяснял ранееMybatisУчебник по плагину не очень сложный. Если вы хотите использовать его, на самом делеGitHubЕсть много вариантов, доступных наMybatisКомпонент аудита я изначально планировал написать вручную, но он действительно хорошо написан. Вы можете использовать ключевые словаMybatis AuditПриходите и найдите их, чтобы выбрать тот, который подходит вам лучше всего.

2.2 Автозаполнение Mybatis Plus

Если вы используетеMybatis Plus, что может быть достигнуто с помощью функции автозаполнения.

на основеMybatis Plus 3.3.0

просто нужно реализоватьMetaObjectHandlerинтерфейс:

@Component
public class MybatisAuditHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 声明自动填充字段的逻辑。
        String userId = AuthHolder.getCurrentUserId();
        this.strictInsertFill(metaObject,"creator",String.class, userId);
        this.strictInsertFill(metaObject,"createTime", LocalDateTime.class,LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 声明自动填充字段的逻辑。
        String userId = AuthHolder.getCurrentUserId();
        this.strictUpdateFill(metaObject,"updater",String.class,userId);
        this.strictUpdateFill(metaObject,"updateTime", LocalDateTime.class,LocalDateTime.now());
    }
}

Затем мы расширяемMybatis PlusизModel<T>Поместите поле публичного аудита и объявите соответствующую стратегию заполнения:

public abstract class BaseEntity<T extends Model<?>> extends Model<T> {

    @TableField(fill = FieldFill.INSERT)
    private String creator;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime addTime;
    @TableField(fill = FieldFill.UPDATE)
    private String updater;
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;
}

Наконец, наши классы сущностей больше не наследуют напрямуюModel<T>изменить на вышеBaseEntity<T>:

@Data
@EqualsAndHashCode(callSuper = false)
public class UserInfo extends BaseEntity<UserInfo> {
    @TableId(value = "user_id", type = IdType.ASSIGN_ID)
    private String userId;
    private String username;

    @Override
    protected Serializable pkVal() {
        return this.userId;
    }
}

Таким образом, нам не нужно заботиться об этих общедоступных полях.Конечно, вы можете добавить дополнительные поля, которые вам нужно заполнить по мере необходимости.

3. Резюме

Сегодня мы ввели некоторые общие схемы автоматического заполнения некоторых общих полей в аудите SQL, особенно дляMybatis PlusПредоставленные функции представлены, и я считаю, что они могут помочь вам упростить написание некоторого шаблонного кода. Но аудит SQL не так уж и прост, в зависимости от вашего бизнеса могут быть разные схемы. Если дизайн будет более совершенным, трафик доступа ко всем базам данных будет собираться с помощью зеркалирования или зондирования, а все доступы к базам данных и поведение операций будут записываться на основе синтаксиса SQL и технологии семантического анализа. Если у вас есть время, вы можете получить соответствующую информацию из Интернета, чтобы понять. Вот сегодня, обратите внимание:Код Фермер Маленький Толстый Брат, получить больше программирования практических галантереи.