Interpretación de la estrategia de clave principal de mybatisPlus

Tabla de contenido

Introducción a la estrategia de generación de claves primarias

estrategia AUTO

estrategia de entrada

Estrategia ASSIGN_ID

 NINGUNA estrategia

ASSIGN_UUID estrategia 


Introducción a la estrategia de generación de claves primarias

El papel de la clave principal es identificar de forma única, y podemos usar esta identificación única para localizar este dato. Por supuesto, para la clave principal en los datos de la tabla, podemos diseñar las reglas de generación nosotros mismos para generar la clave principal. Pero en más escenarios, si no hay requisitos especiales, es problemático para nosotros generar manualmente cada vez.Podemos usar el marco para proporcionar una buena estrategia de generación de clave principal para generar la clave principal. Esto es más conveniente y rápido.

Se proporciona una anotación en MybatisPlus, que es @TableId, que proporciona varias estrategias de generación de claves principales. Podemos usar esta anotación para especificar la estrategia de generación de claves principales para nuevos datos. Luego, cuando se agreguen nuevos datos en el futuro, los datos generarán la clave principal correspondiente de acuerdo con la estrategia de generación de clave principal que especificamos.

@TableName("sys_user")
public class User {
    @TableId
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
Atributos tipo debe especificar valores predeterminados describir
valor Cadena No "" nombre de campo de clave principal
tipo enumeración No IdType.NONE Especificar el tipo de clave principal

 El tipo de tipo es el siguiente

valor describir
AUTO Incremento automático de ID de base de datos
NINGUNO Sin estado, este tipo es el tipo que no tiene una clave principal establecida (en la anotación, es igual a seguir el global, y el Rio global es igual a INPUT)
APORTE Establecer el valor de la clave principal antes de insertar
ASSIGN_ID Asignar ID (el tipo de clave principal es Número (largo y entero) o Cadena) (desde 3.3.0), usar el IdentifierGeneratormétodo de interfaz nextId(la clase de implementación predeterminada es DefaultIdentifierGeneratorel algoritmo de copo de nieve)
ASSIGN_UUID Asigne UUID, el tipo de clave principal es Cadena (desde 3.3.0), use IdentifierGeneratorel método de interfaz nextUUID(método predeterminado predeterminado)
ID_TRABAJADOR Tipo de número entero largo de ID único global distribuido (utilice ASSIGN_ID)
UUID Cadena UUID de 32 bits (utilice ASSIGN_UUID)
ID_TRABAJADOR_STR Tipo de cadena de ID única distribuida globalmente (utilice ASSIGN_ID)

estrategia AUTO

Esta estrategia sigue la estrategia de incremento de clave principal de la tabla de la base de datos, siempre que la clave principal de la tabla de la base de datos esté configurada para incrementar automáticamente

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}
@Test
void primaryKey(){
    User user = new User();
    user.setName("Mary");
    user.setAge(35);
    user.setEmail("[email protected]");
    userMapper.insert(user);
}

estrategia de entrada

Esta estrategia indica que debemos insertar manualmente el id, de lo contrario no se pueden agregar los datos

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

Si omitimos la identificación aquí, encontraremos que los datos no se pueden insertar

@Test
void primaryKey(){
    User user = new User();
    user.setName("Jerry");
    user.setAge(38);
    user.setEmail("[email protected]");
    userMapper.insert(user);
}

 Pero especificamos la identificación nosotros mismos y descubrimos que se puede agregar con éxito

Estrategia ASSIGN_ID

Pensemos en ello, ¿qué tiene de malo el método de incremento automático como antes?

Si tenemos una gran cantidad de datos en una tabla en el futuro, debemos dividir la tabla.

Hay dos estrategias comunes de división de tablas

【1】División horizontal

La división horizontal consiste en dividir una tabla grande según la cantidad de datos

【2】División vertical

La división vertical es dividir una tabla grande por campo

De hecho, tenemos tres requisitos para los datos divididos, como la división horizontal:

[1] La clave principal de la tabla anterior está en orden y sigue en orden después de la división

[2] Aunque la tabla se ha dividido, cada dato debe garantizar la unicidad de la clave principal

[3] Es mejor no exponer directamente la cantidad de datos en la clave principal, para que el mundo exterior pueda conocer fácilmente la información clave.

Entonces tiene que haber un algoritmo que pueda cumplir con estos tres requisitos.Este algoritmo es el algoritmo del copo de nieve.

El algoritmo de copo de nieve se compone de un binario de 64 bits, que en última instancia es un valor de tipo Long. Principalmente dividido en cuatro partes de almacenamiento

[1] Bit de signo de 1 bit, el valor fijo es 0

[2] marca de tiempo de 41 bits

[3] Código de máquina de 10 dígitos, incluida la identificación de máquina de 5 dígitos y la identificación de servicio de 5 dígitos

【4】Número de serie de 12 dígitos

 Utilice el algoritmo del copo de nieve para lograr números únicos y ordenados que no expongan directamente la ordenación. 

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

 NINGUNA estrategia

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

La estrategia NINGUNA significa que la estrategia de generación de clave principal no está especificada. Cuando no especificamos la estrategia de generación de clave principal o la estrategia de clave principal es NINGUNA, sigue la estrategia global. El tipo de identificación en la configuración global se usa para configurar la estrategia de generación de clave principal Podemos echar un vistazo Valor predeterminado para tipo de identificación

Al ver el código fuente, se encuentra que el valor predeterminado de id-type es el algoritmo de copo de nieve

ASSIGN_UUID estrategia 

UUID ( Universally Unique Identifier ) ​​es un identificador único a nivel mundial, definido como una clave primaria de cadena, compuesta por 32 dígitos, codificada en hexadecimal , y define la información del sistema que es completamente única en el tiempo y el espacio.

Reglas de codificación para UUID:

[1] 1 ~ 8 dígitos adoptan la hora del sistema, y ​​la hora del sistema tiene una precisión de milisegundos para garantizar la singularidad de la hora;

[2] 9~16 dígitos utilizan la dirección IP subyacente, que es única en el clúster de servidores;

[3] Los 17~24 bits adoptan el valor HashCode del objeto actual, que es único en un objeto interno;

[4] Los 25~32 dígitos utilizan un número aleatorio para llamar al método, que es único en el nivel de milisegundos dentro de un objeto.

La singularidad se puede garantizar a través de las cuatro estrategias anteriores . Cuando se necesitan números aleatorios en el sistema, se puede considerar el algoritmo UUID .

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    private String name;
    private Integer age;
    private String email;
}

Supongo que te gusta

Origin blog.csdn.net/m0_62436868/article/details/131901778
Recomendado
Clasificación