Этот документ для первых девяти серии MyBatis Plus до 8 посетите следующий адрес:
- Небольшая книга MybatisPlus, часть 1. Интеграция SpringBoot для быстрого добавления, удаления, изменения и проверки
- Небольшая книга MybatisPlus, часть 2. Применение и обзор условных конструкторов
- Небольшая книга MybatisPlus, часть 3 — Пользовательский SQL
- Небольшая книга MybatisPlus, часть 4. Пейджинг таблиц и запрос на пейджинг с раскрывающимся списком
- Маленькая книга MybatisPlus, часть 5 - Интенсивный режим активной записи
- Маленькая книга MyBatisplus Часть 6 - Стратегия генерации основных ключей
- Небольшая книга MybatisPlus, часть 7 - Принципы генераторов кода и способы их использования
- Небольшая книга MybatisPlus, часть 8. Реализация логического удаления и детали API
1. Обработка полей заполнения
Случай требования: при вставке данных автоматически заполните createTime и updateTime как текущее время вставки данных и измените updateTime как время изменения данных при обновлении данных. Ручное назначение не требуется.
- На уровне таблицы базы данных вам нужно добавить два поля типа даты create_tme и update_time
- Используйте аннотацию @TableField, чтобы отметить, какие поля в классе сущностей необходимо заполнить:
@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;
}
FieldFill — это перечисление, указывающее, при каких обстоятельствах оно будет заполняться автоматически.Существуют следующие необязательные значения:
- ПО УМОЛЧАНИЮ: не обрабатывается по умолчанию
- INSERT: автозаполнение полей при вставке
- ОБНОВЛЕНИЕ: поля автозаполнения при обновлении
- INSERT_UPDATE: поля автоматически заполняются при вставках и обновлениях.
2. Пользовательские значения заполнения по умолчанию
Напишем общедоступный класс обработчика заполнения полей, который наследует класс MetaObjectHandler, и переопределяет методы insertFill и updateFill, в этих двух методах мы получаем поля, которые необходимо заполнить, и заполненные по умолчанию значения.
- Обработчик заполнения MyMetaObjectHandler должен объявить инъекцию @Component или @Bean в Spring Boot
- Второй параметр методов strictInsertFill и strictUpdateFill — это имя свойства в классе сущностей, а не имя соответствующего поля базы данных.
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
Если это версия после 3.3.0, например 3.3.1.8, вы также можете использовать следующий более простой метод записи (3.3.0 не используйте этот метод, есть ошибки)
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.fillStrategy(metaObject, "createTime", new Date());
this.fillStrategy(metaObject, "updateTime", new Date());
}
@Override
public void updateFill(MetaObject metaObject) {
this.fillStrategy(metaObject, "updateTime", new Date());
}
}
В некоторых старых версиях API для установки значений полей выглядит следующим образом, что устарело после 3.3.0.
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
3. Запустите тест
- Вставляем кусок данных, обратите внимание, мы не присваивали значения createTime и updateTime
@Test
public void testInsert() {
User user = new User();
user.setName("字母哥");
user.setAge(18);
userMapper.insert(user);
}
Но результат операции таков: автоматически назначаются createTime и updateTime
- Обновите часть данных на основе Id, обратите внимание, что мы не присваивали значение updateTime
@Test
public void testUpdate() {
User user = new User();
user.setId(1287387821681790977L);
user.setName("字母哥&curry");
user.setAge(18);
userMapper.updateById(user);
}
Но результат операции: updateTime автоматически назначается при выполнении операции модификации записи данных.
Добро пожаловать, чтобы обратить внимание на мой блог, в нем много прекрасных коллекций
- Эта статья воспроизводится с указанием источника (должна быть ссылка, а не только текст):Блог Адетокунбо.
Если вы считаете это полезным, пожалуйста, поставьте лайк и поделитесь! Ваша поддержка - моя неиссякаемая творческая мотивация!. Кроме того, автор недавно выпустил следующий прекрасный контент, с нетерпением жду вашего внимания.