Интерпретация стратегии генерации первичного ключа (@TableId)
Интерпретация стратегии генерации первичного ключа (@TableId)

Основное введение

Функция первичного ключа — уникальный идентификатор. Мы можем найти этот фрагмент данных с помощью этого уникального идентификатора. В данных таблицы базы данных генерация первичных ключей может следовать настраиваемым правилам, но генерация вручную обычно является трудоемкой. Поэтому в реальной разработке мы предпочитаем использовать стратегию генерации первичных ключей, предоставляемую платформой, для автоматической генерации первичных ключей.

В MybatisPlus,предоставил@TableIdАннотации для указания стратегии генерации первичного ключа.。Эта аннотация позволяет нам указать метод генерации первичного ключа для вновь добавляемых данных.。

Атрибут аннотации @TableId

свойство

тип

Должно быть указано

значение по умолчанию

описывать

value

String

нет

""

Имя поля первичного ключа

type

Enum

нет

IdType.NONE

Укажите тип первичного ключа

тип перечисление типа

  • AUTO:база данныхIDсамовозрастающий。Стратегия следуетбаза данныхстолпервичный ключпошаговая стратегия,Предполагается, что для первичного ключа таблицы базы данных должно быть установлено автоматическое приращение.
  • NONE:Лицо без гражданства,Тип заключается в том, что тип первичного ключа не установлен (аннотация эквивалентна следованию глобальному,Global Rio равен INPUT).
  • INPUT:insertпередняя самоходнаяsetзначение первичного ключа。если не установленозначение первичного ключа,Данные не могут быть добавлены.
  • ASSIGN_ID:распространятьID(первичный ключтипдляNumber(LongиInteger)илиString)。Использовать интерфейсIdentifierGeneratorметодnextId(Класс реализации по умолчаниюдляDefaultIdentifierGenerator,с использованием алгоритма снежинки).
  • ASSIGN_UUID:распространятьUUID,первичный ключтипдляString。Использовать интерфейсIdentifierGeneratorметодnextUUID(Реализация по умолчаниюдля Метод по умолчанию)。
  • ID_WORKER:Распространённый и глобально уникальныйIDдлинное целое числотип(Рекомендуется использоватьASSIGN_ID)。
  • UUID:32КусочекUUIDнить(Рекомендуется использоватьASSIGN_UUID)。
  • ID_WORKER_STR:Распространённый и глобально уникальныйIDнитьтип(Рекомендуется использоватьASSIGN_ID)。

Пример стратегии АВТО

При использовании стратегии AUTO необходимо убедиться, что поля первичного ключа таблицы базы данных автоматически увеличиваются.

Язык кода:java
копировать
@Data  
@AllArgsConstructor  
@NoArgsConstructor  
@TableName("sys_user")  
public class User {  
    @TableId(type = IdType.AUTO)  
    private Long id;  
    private String name;  
    private Integer age;  
    private String email;  
}  
  
// Метод испытания  
@Test  
void testAutoPrimaryKey() {  
    User user = new User();  
    user.setName("Mary");  
    user.setAge(35);  
    user.setEmail("test7@powernode.com");  
    userMapper.insert(user); // После вставки полю id будет автоматически присвоено значение.  
}

Пример политики INPUT

При использовании стратегии INPUT вам необходимо вручную установить значение первичного ключа перед вставкой данных.

Язык кода:java
копировать
@Data  
@AllArgsConstructor  
@NoArgsConstructor  
@TableName("sys_user")  
public class User {  
    @TableId(type = IdType.INPUT)  
    private Long id;  
    private String name;  
    private Integer age;  
    private String email;  
}  
  
// Метод испытания  
@Test  
void testInputPrimaryKey() {  
    User user = new User();  
    user.setId(1L); // Идентификатор должен быть установлен вручную  
    user.setName("Jerry");  
    user.setAge(38);  
    user.setEmail("test8@powernode.com");  
    userMapper.insert(user); // Вставка прошла успешно, поскольку идентификатор установлен.  
}

Пример политики ASSIGN_ID

Стратегия ASSIGN_ID использует алгоритм снежинки для генерации идентификаторов и подходит для распределенных сред.

Язык кода:java
копировать
@Data  
@AllArgsConstructor  
@NoArgsConstructor  
@TableName("sys_user")  
public class User {  
    @TableId(type = IdType.ASSIGN_ID)  
    private Long id;  
    // ... Другие поля  
}  
  
// Метод испытания(иAUTOСтратегии похожи,Но идентификатор автоматически генерируется фреймворком)  
@Test  
void testAssignIdPrimaryKey() {  
    User user = new User();  
    user.setName("John");  
    user.setAge(28);  
    user.setEmail("test9@powernode.com");  
    userMapper.insert(user); // После вставки полю id будет автоматически присвоено значение (генерируется алгоритмом снежинки).  
}

Пример политики ASSIGN_UUID

Стратегия ASSIGN_UUID использует алгоритм UUID для генерации первичных ключей и подходит для сценариев, требующих глобальных уникальных идентификаторов строк.

Язык кода:java
копировать
@Data  
@AllArgsConstructor  
@NoArgsConstructor  
@TableName("sys_user")  
public class User {  
    @TableId(type = IdType.ASSIGN_UUID)  
    private String id; // Обратите внимание, что тип идентификатора здесь — строка для размещения UUID.  
    private String name;  
    private Integer age;  
    private String email;  
}  
  
// Метод испытания  
@Test  
void testAssignUuidPrimaryKey() {  
    User user = new User();  
    user.setName("Alice");  
    user.setAge(25);  
    user.setEmail("testA@powernode.com");  
    userMapper.insert(user); // После вставки полю id будет автоматически присвоено значение.(UUIDгенерировать)  
      
    // Проверьте сгенерированный UUID  
    String uuid = user.getId();  
    // Здесь вы можете выполнять такие операции, как утверждение и вывод uuid.  
    System.out.println("Generated UUID: " + uuid);  
}

Политики ID_WORKER и ID_WORKER_STR (устарело)

Обратите внимание, что стратегии ID_WORKER и ID_WORKER_STR устарели в новых версиях Mybatis-Plus, и вместо них рекомендуется использовать ASSIGN_ID. ID_WORKER и ID_WORKER_STR изначально были распределенными уникальными стратегиями генерации идентификаторов, реализованными на основе алгоритма Twitter Snowflake, но теперь рекомендуется использовать ASSIGN_ID, поскольку он обеспечивает более гибкий и настраиваемый способ генерации идентификаторов.

Пользовательская стратегия генерации первичного ключа

Если вам нужно реализовать собственную стратегию генерации первичного ключа, вы можете реализовать ее. com.baomidou.mybatisplus.extension.incrementer.IdentifierGenerator интерфейс и переопределить nextId или nextUUID метод. Тогда ты сможешь пройти @TableId аннотированный generator свойство Укажите свой собственный класс реализации.

Язык кода:java
копировать
// Пользовательский генератор первичных ключей  
public class CustomIdGenerator implements IdentifierGenerator {  
    @Override  
    public Long nextId(Object entity) {  
        // Здесь можно реализовать собственную логику генерации идентификаторов.  
        // ...  
        return yourCustomGeneratedId; // Возвращает ваш собственный идентификатор  
    }  
  
    @Override  
    public String nextUUID(Object entity) {  
        // Здесь этот метод обычно не переопределяется, поскольку ASSIGN_UUIDтип будет использовать стратегию генерации UUID по умолчанию.  
        // ...  
        return null;  
    }  
}  
  
// Использование Пользовательского в классе сущностей генератор первичных ключей  
@Data  
@AllArgsConstructor  
@NoArgsConstructor  
@TableName("sys_user")  
public class User {  
    @TableId(type = IdType.ASSIGN_ID, generator = "customIdGenerator")  
    private Long id;  
    // ... Другие поля  
  
    // Вам также необходимо прописать свой Пользовательский в конфигурации Mybatis-Plus. генератор первичных ключей  
    // Например, весной В приложении Boot вы можете зарегистрироваться в классе MybatisPlusConfig.  
}  
  
// Пример класса конфигурации MybatisPlusConfig (Spring Boot)  
@Configuration  
public class MybatisPlusConfig {  
  
    @Bean  
    public IdentifierGenerator customIdGenerator() {  
        return new CustomIdGenerator();  
    }  
  
    // ... Другие конфигурации Mybatis-Plus  
}
boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.