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

16 篇文章 1 订阅

Mysql、SQL Server:

        <insert id="insert"
		parameterType="xyz.jangle.model.BsTest" useGeneratedKeys="true" keyProperty="id">
		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}
		)
	</insert>

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

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

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

Oracle、MySQL、SQL Server:

<!-- 自增型的使用order="AFTER" ,获取插入之后的id值。 -->
        <insert id="insert"
		parameterType="xyz.jangle.model.BsTest" >
		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}
		)
                <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER" >
                    SELECT LAST_INSERT_ID()
                </selectKey>
	</insert>



<!-- Oracle这种不使用自增,而是使用序列的,则需要使用order="BEFORE" 先将生成的值赋值给对应属性
然后将属性的值插入。即insert语句中需要书写id的列和id的属性  -->

        <insert id="insert" parameterType="xyz.jangle.model.BsTest" >
                <selectKey keyColumn="id" resultType="long" keyProperty="id" order="BEFORE" >
                    SELECT SEQ_ID.nextval from dual
                </selectKey>
		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}
		)
	</insert>

原理: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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值