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