Небольшая книга MybatisPlus, часть 6 — Стратегия генерации первичного ключа

Spring Boot

Эта статья является шестой в серии документов mybatis. Пожалуйста, посетите следующий URL-адрес, чтобы ознакомиться с первыми пятью статьями.

Mybatis Plus предоставляет нам три способа установки стратегии генерации первичного ключа. Их порядок приоритета: локальная аннотация > глобальная > по умолчанию (алгоритм снежинки). Давайте представим один за другим

Во-первых, стратегия генерации первичного ключа по умолчанию: алгоритм снежного цветка.

Если Mybatis Plus не настраивает какую-либо стратегию первичного ключа, по умолчанию используется алгоритм снежинки. Эта стратегия будет генерировать идентификатор первичного ключа в соответствии с алгоритмом снежинки. Тип первичного ключа — Long или String (в частности, база данных MySQL — BIGINT и VARCHAR). В стратегии используется метод nextId интерфейса IdentifierGenerator (класс реализации по умолчанию — Алгоритм снежинки DefaultIdentifierGenerator)

Алгоритм снежинки — это алгоритм генерации распределенного идентификатора Twitter с открытым исходным кодом, результатом которого является идентификатор длинного типа. Его основная идея: использовать 41 бит в качестве количества миллисекунд, 10 бит в качестве идентификатора машины (5-битный центр обработки данных, 5-битный идентификатор машины), 12 бит в качестве серийного номера в миллисекундах (это означает, что каждый узел может генерировать 4096 идентификаторов в миллисекунду). знаковый бит в конце, который всегда равен 0.

Во-вторых, настраиваемая стратегия первичного ключа

После mybatis-plus3.3.0 существует в основном пять стратегий генерации первичных ключей.

public enum IdType {
    /**
     * 数据库ID自增,数据库需要支持主键自增(如MySQL),并设置主键自增
     */
    AUTO(0),

    /**
     * 该类型为未设置主键类型,默认使用雪花算法生成
     */
    NONE(1),

    /**
     * 用户输入ID,数据类型和数据库保持一致就行
     * <p>该类型可以通过自己注册自动填充插件进行填充</p>
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 全局唯一ID (idWorker),数值类型  数据库中也必须是数值类型 否则会报错
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID,不含中划线)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示),数据库也要保证一样字符类型
     */
    ID_WORKER_STR(5);
}

3. Стратегия настройки локальных аннотаций

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

@TableId(type = IdType.AUTO)
private long userId;

В-четвертых, глобальная стратегия распределения

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

V. Расширенное использование

5.1. Использование стратегии идентификации пользовательского ввода INPUT

Среди них то, что нужно специально представить всем, это: Input (идентификатор ввода пользователя), есть два источника этого идентификатора

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

Mybatis-Plus имеет следующие встроенные последовательности первичных ключей базы данных (если встроенная поддержка не соответствует вашим потребностям, вы можете реализовать интерфейс IKeyGenerator для расширения):

  • DB2KeyGenerator
  • H2KeyGenerator
  • KingbaseKeyGenerator
  • OracleKeyGenerator
  • PostgreKeyGenerator

В качестве примера возьмем метод оракула, метод выглядит следующим образом: Сначала добавьте @bean

 @Bean
    public OracleKeyGenerator oracleKeyGenerator(){
        return new OracleKeyGenerator();
    }

Затем настройте последовательность первичного ключа для класса сущностей и укажите стратегию первичного ключа как IdType.INPUT.

@Data
@KeySequence(value = "SEQ_USER" , clazz = Long.class)
public class User {

    @TableId(value = "ID",type = IdType.INPUT)
    private Integer id;

Добро пожаловать, чтобы обратить внимание на мой блог, в нем много прекрасных коллекций

  • Эта статья воспроизводится с указанием источника (должна быть ссылка, а не только текст):Блог Адетокунбо.

Если вы считаете это полезным, пожалуйста, поставьте лайк и поделитесь! Ваша поддержка - моя неиссякаемая творческая мотивация!. Кроме того, автор недавно выпустил следующий прекрасный контент, с нетерпением жду вашего внимания.