Функция первичного ключа — уникальный идентификатор. Мы можем найти этот фрагмент данных с помощью этого уникального идентификатора. В данных таблицы базы данных генерация первичных ключей может следовать настраиваемым правилам, но генерация вручную обычно является трудоемкой. Поэтому в реальной разработке мы предпочитаем использовать стратегию генерации первичных ключей, предоставляемую платформой, для автоматической генерации первичных ключей.
В MybatisPlus,предоставил@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 необходимо убедиться, что поля первичного ключа таблицы базы данных автоматически увеличиваются.
@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 вам необходимо вручную установить значение первичного ключа перед вставкой данных.
@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 использует алгоритм снежинки для генерации идентификаторов и подходит для распределенных сред.
@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 использует алгоритм UUID для генерации первичных ключей и подходит для сценариев, требующих глобальных уникальных идентификаторов строк.
@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 устарели в новых версиях Mybatis-Plus, и вместо них рекомендуется использовать ASSIGN_ID. ID_WORKER и ID_WORKER_STR изначально были распределенными уникальными стратегиями генерации идентификаторов, реализованными на основе алгоритма Twitter Snowflake, но теперь рекомендуется использовать ASSIGN_ID, поскольку он обеспечивает более гибкий и настраиваемый способ генерации идентификаторов.
Если вам нужно реализовать собственную стратегию генерации первичного ключа, вы можете реализовать ее. com.baomidou.mybatisplus.extension.incrementer.IdentifierGenerator
интерфейс и переопределить nextId
или nextUUID
метод. Тогда ты сможешь пройти @TableId
аннотированный generator
свойство Укажите свой собственный класс реализации.
// Пользовательский генератор первичных ключей
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
}