Mybatis获取新增记录(insert)的主键值

Mysql、SQL Server:

        
		insert into bs_test ( 
			uuid,
			create_time,
			update_time,
			status,
			dm_desc,
			dm_desc2
		)
		values (
			#{uuid,jdbcType=VARCHAR},
			now(),
			now(),
			#{status,jdbcType=INTEGER},
			#{dmDesc,jdbcType=VARCHAR},
			#{dmDesc2,jdbcType=VARCHAR}
		)
	

关键属性:useGeneratedKeys="true" keyProperty="id"

支持:MySQL、SQL Server拥有主键自增的数据库。

原理:useGeneratedKeys是指:使用JDBC的getGeneratedKeys方法获取数据库内部生成的主键,赋值给keyProperty指定的属性。

Oracle、MySQL、SQL Server:


        
		insert into bs_test ( 
			uuid,
			create_time,
			update_time,
			status,
			dm_desc,
			dm_desc2
		)
		values (
			#{uuid,jdbcType=VARCHAR},
			now(),
			now(),
			#{status,jdbcType=INTEGER},
			#{dmDesc,jdbcType=VARCHAR},
			#{dmDesc2,jdbcType=VARCHAR}
		)
                
                    SELECT LAST_INSERT_ID()
                
	





        
                
                    SELECT SEQ_ID.nextval from dual
                
		insert into bs_test ( 
                        id,
			uuid,
			create_time,
			update_time,
			status,
			dm_desc,
			dm_desc2
		)
		values (
                        #{id},
			#{uuid,jdbcType=VARCHAR},
			now(),
			now(),
			#{status,jdbcType=INTEGER},
			#{dmDesc,jdbcType=VARCHAR},
			#{dmDesc2,jdbcType=VARCHAR}
		)
	

原理:MySQL等,在数据库主键自增之后,将其值查询出来赋值给对应的属性。

原理2:Oracle等使用序列生成的主键,在插入记录之前,生成对应属性的值,将其赋值给对应的属性(这样插入的时候既保证属性中有值,也保证数据库记录中有值。)

selectKey的常见数据库写法(获取主键值的写法):
 

DB2、CLOUDSCAPE、DERBY: VALUES IDENTITY_VAL_LOCAL()

SQLSERVER:SELECT SCOPE_INDENTITY()

HSQLDB:CALL IDENTITY()

SYBASE:SELECT@@IDENTITY

DB2_MF:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1

INFORMIX:select dbinfo('sqlca.sqlerrd1') from systables where tabid = 1

你可能感兴趣的:(#,MySQL,#,Oracle,Mybatis,MySQL,Oracle,数据库,主键)