Estrategia de generación de claves primarias MyBatis-Plus

Estrategia de generación de claves primarias MyBatis-Plus

Continuación del blog anterior: Comience rápidamente con el desarrollo de MyBatis-Plus

Ejecute la operación Insertar en la clase de prueba para insertar registros en la tabla de datos:

//测试插入操作
@Test
public void testInsert(){
    
    
    User user = new User();
    user.setName("Cloud");
    user.setAge(3);
    user.setEmail("[email protected]"); //MP自动生成id
    int res = userMapper.insert(user);
    System.out.println(res);  //受影响的行数
    System.out.println(user);
}

A través del registro impreso en la consola, se encuentra que MyBatis-Plus asigna userautomáticamente la idpropiedad del objeto, y la asignación utiliza el algoritmo de copo de nieve;

@TableId: establezca la asignación de clave principal, valueasigne el nombre del campo de clave principal y typeestablezca el tipo de clave principal, es decir, la estrategia de generación de clave principal. por ejemplo:@TableId(value = "id", type = IdType.AUTO)

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor

public class User {
    
    
    @TableId(type = IdType.Auto)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

IdTypeEs una clase de enumeración, existen principalmente 4 tipos diferentes de valores (AUTO, NONE, INPUT, ASSIGN_ID y ASSIGN_UUID), el código fuente es el siguiente:

public enum IdType {
    
    
    AUTO(0),
    NONE(1),
    INPUT(2),
    ASSIGN_ID(3),
    ASSIGN_UUID(4),
    
    //下面的表示已经弃用了,并以上面几种代替
    /** @deprecated */
    @Deprecated
    ID_WORKER(3),
    /** @deprecated */
    @Deprecated
    ID_WORKER_STR(3),
    /** @deprecated */
    @Deprecated
    UUID(4);
}
valor describir
AUTO Incremento automático del campo de clave principal
NINGUNA Clave principal no establecida
APORTE Requiere que los desarrolladores asignen valores manualmente
ASSIGN_ID ID de asignación de MP, número/tipo de cadena
ASSIGN_UUID MP asigna UUIN, tipo de cadena

1. AUTO: El campo de clave principal se incrementa automáticamente

① Anotación del campo de clave principal de la clase de entidad @TableId(type = IdType.AUTO);

② Los campos correspondientes a la tabla de datos también deben configurarse para que se incrementen automáticamente;

Si solo se agregan anotaciones, pero el campo de clave principal correspondiente a la tabla de datos no está configurado para incrementarse automáticamente, se producirá la siguiente excepción.

Nota: cuando utilice type = IdType.AUTOanotaciones , asegúrese de establecer el campo de clave principal correspondiente en [Aumento automático].

2. NINGUNO: la clave principal no está configurada

Dado que cada tabla de datos tiene una clave principal, casi no es necesario agregar esta anotación.

3. ENTRADA: requiere que los desarrolladores asignen valores manualmente

ENTRADA Si el desarrollador no establece el valor manualmente, la base de datos asigna la clave principal configurando el método de incremento automático ( MP no interviene en la generación de la clave principal ). De manera similar, si la base de datos no establece el incremento automático, un se lanzará una excepción ; si el desarrollador asigna manualmente el valor, entonces almacene directamente este valor.

Puede ver userque la clave principal del objeto es el idvalor null, pero el objeto se insertó correctamente en la base de datos porque la base de datos establece la política de incremento automático de la clave principal.

Una cosa a tener en cuenta: @TableId=(type = IdType.INPUT )MyBatis-Plus no interfiere con la generación de claves primarias bajo la anotación.

4. ASSIGN_ID: MyBatis-Plus asigna automáticamente

ASSIGN_ID Si el usuario o desarrollador no asigna la clave principal, MyBatis-Plus utiliza el algoritmo de copo de nieve (también conocido como algoritmo de copo de nieve) para asignar un ID al campo de la clave principal, este ID puede ser de tipo Número (Largo) o Cadena escribe.

Algoritmo Snowflake : Snowflake es el algoritmo de generación de ID distribuido de código abierto de Twitter y el resultado es un ID largo. La idea central es: usar 41 bits como el número de milisegundos, 10 bits como la ID de la máquina (5 bits son el centro de datos, 5 bits son la ID de la máquina) y 12 bits como el número de serie en milisegundos (lo que significa que cada nodo puede generar 4096 IDs) y un bit de signo al final, que siempre es 0. Garantizado para ser casi el único en el mundo!

Si no @TableIdanota , el valor predeterminado es @TableId=(type = IdType.ID_WORKER), ya que este elemento de enumeración ha quedado obsoleto y se usa ASSIGN_IDen su lugar . Si el usuario no asigna la clave principal en este momento, MP se asignará automáticamente y no es necesario que el campo de clave principal de la base de datos esté configurado para incrementarse automáticamente en este momento.

5. ASSIGN_UUID: MyBatis-Plus asigna UUID, que debe ser de tipo String

El uso de ASSIGN_UUID es similar a ASSIGN_ID, que puede representar una ID única más larga, pero el tipo de datos de su clave principal debe ser String, y MyBatis-Plus genera automáticamente UUID para la asignación;

6. Resumen

Dado que el campo de clave principal de la tabla de datos no puede estar vacío, las reglas generales de la estrategia de generación de clave principal son las siguientes:

Si el usuario o desarrollador asigna la clave principal, el valor se almacena directamente; si el usuario no asigna la clave principal, el MP (abreviatura de MyBatis-Plus) asigna la clave principal; si ni el usuario ni el MP asignan un valor a la clave principal, entonces El autoincremento de la clave principal lo establece la tabla de datos de la base de datos para completar la operación de asignación; si ni el usuario, MyBatis-Plus ni la base de datos asignan la clave principal, el programa lanzará una excepción .

Supongo que te gusta

Origin blog.csdn.net/qq_41775769/article/details/123045089
Recomendado
Clasificación