El método de incremento automático de la identificación de la tabla

A continuación se enumeran varios métodos para incrementar automáticamente el ID de la clave principal de la base de datos.

1. Autoincremento de la base de datos (compatible con algunas bases de datos)
establezca el autoincremento de id al crear una tabla, o modifique el autoincremento de id de tabla más adelante

# mysql 语法
create table your_table_name(
    id bigint(20)  not null auto_increment primary key comment '主键', // auto_increment 表示自增(固定死id从1开始,每次加1)
	name varchar(24) not null
);
# sqlserver 语法
create table [dbo].[your_table_name] (
  [id] int primary key identity(1,1) not null,// identity(1,1) 表示自增(支持id从N开始,每次加M,这里N,m都=1)
  [name] varchar(24) not null
);

2. Número de serie (adecuado para Oracle)

# 创建序列号
create sequence user_seq
       minvalue 1  --最小值
       nomaxvalue --最大值
       start with 1 --起始值
       increment by 1  --增长基数
       nocycle  --不循环一直增加
       nocache ; -- 不使用缓存
       
# 插入数据       
insert into user (user_id, user_name, sex) values (user_seq.nextval, #{
    
    userName}, #{
    
    sex});

3. Mybatis adquiere el autoincremento (general)
Cuando se ejecuta la instrucción sql, traerá automáticamente el campo de clave principal y el valor de relleno para ejecutar, y no es necesario escribir el campo de identificación en la instrucción. El atributo useGeneratedKeys es falso de forma predeterminada, keyProperty corresponde al nombre de campo de id de clave principal en el objeto de entidad y keyColumn corresponde al nombre de campo de la base de datos

<insert id="addUser" parameterType="com.yulisao.User" useGeneratedKeys="true"
       keyProperty="userId" keyColumn="user_id">
    insert into user (user_name, sex) VALUES (#{
    
    userName}, #{
    
    sex})
</insert>

Si es sql en forma de anotación, se escribe de la siguiente manera

@Insert("<script>insert into user (user_name, sex) values (#{userName}, #{sex})</script>")
@Options(useGeneratedKeys=true, keyProperty="userId", keyColumn="user_id")
Integer addUser(User user);

O personalizar el valor de identificación

<insert id="addUser" parameterType="com.yulisao.User" useGeneratedKeys="true"
            keyProperty="userId">
        <selectKey keyProperty="userId" resultType="int" order="BEFORE"> <!-- order 属性的值和数据库有关, mysql是 after,oracle是 before  -->
            <!-- 自己查询最后使用的id -->
            select isnull(max(user_id)+1, 1) as userId from user <!-- sqlserver语法-->
            <!-- select 你创建的序列名称.nextval from dual --><!-- oracle 查询最后使用的id -->
            <!-- select LAST_INSERT_ID() --><!-- mysql 查询最后使用的id -->
            <!-- select SCOPE_IDENTITY() --><!-- sqlserver 查询最后的id -->
        </selectKey>
        insert into user (user_name, sex) values (#{
    
    userName}, #{
    
    sex});
    </insert>

ampliar conocimientos

  1. <insert>La etiqueta contiene atributos de la siguiente manera
  • id: identificador único, el id de cada instrucción sql es diferente, si hay proyectos de inicio repetidos, se debe informar un error
  • tipoparámetro: El nombre de clase o alias del parámetro de entrada es opcional (MyBatis puede inferir automáticamente el tipo de parámetro de entrada)
  • resultType: el nombre de clase o alias del resultado devuelto
  • flushCache: el valor predeterminado es verdadero y cualquier ejecución borrará el caché de primer nivel y el caché de segundo nivel
  • tiempo de espera: tiempo de espera en segundos
  • statementType : Para STATEMENT, PREPARED y ALLABLE, MyBatis utilizará la instrucción Statement, PreparedStatement y Callable respectivamente, y el valor predeterminado es PREPARED
  • useGeneratedKeys: El valor por defecto es false, si se establece en true, MyBatis utiliza el método JDBC - getGeneratedKeys para recuperar la clave primaria generada internamente por la base de datos
  • keyProperty: Qué nombre de campo se asignará al valor del id de la clave primaria obtenido por MyBatis a través de getGeneratedKeys (es decir, el id de usuario del caso camel en el objeto de la entidad)
  • keyColumn: solo válido para insertar, ¿cuál es el nombre de la columna generada (es decir, el nombre del campo subrayado user_id de la tabla de la base de datos) debe estar relacionado con el tipo de base de datos, por ejemplo, PostgreSQL debe
  • databaseId: este atributo solo se usa cuando un proyecto usa múltiples bases de datos/fuentes de datos. Si se configura databaseIdProvider, MyBatis cargará todas las declaraciones sin databaseId o que coincidan con la base de datos actual; si hay declaraciones con o sin, las que no tienen serán ignoradas. Es decir, si el databaseIdProvider no está configurado en el archivo de configuración de mybatis, el atributo databaseId no tendrá efecto.

Aquí se pueden ver más atributos y atributos de otras etiquetas (desde XXXMapper.xml, presione y mantenga presionada la tecla Ctrl para hacer clic en la etiqueta o el atributo para saltar). A veces, se usa el atributo useGeneratedKeys
inserte la descripción de la imagen aquí
pero no tiene efecto. También puede consultar las siguientes razones

  • Establecer keyProperty, el valor de keyColumn es incorrecto
  • El campo de identificación de la base de datos debe establecerse en incremento automático
  • Si el parámetro de entrada se modifica con @Param, la identificación no se puede asignar automáticamente

Finalmente, no se recomienda implementar el incremento automático de id a través de activadores, eventos, etc., por lo que no daré un ejemplo.

Supongo que te gusta

Origin blog.csdn.net/qq_29539827/article/details/130105579
Recomendado
Clasificación