Mybatis插入数据时返回自增主键

useGeneratedKeys

对于MySQL sqlserver这种支持自增主键功能的数据库,可以使用useGeneratedKeys。

useGeneratedKeys="true" keyProperty="id" 两个属性配合使用,支持单条或批量插入返回主键信息。

	<insert id="insertList" parameterType="list" useGeneratedKeys="true" keyProperty="id">
		insert into t_goods_supplier_shop_relation(groupID,relationID,goodsID,supplierID,shopID,
		shopName,shopCode,action,createTime,createBy)
		values
		<foreach collection="list" item="item" index="index" separator="," >
			(#{item.groupID},#{item.relationID},#{item.goodsID},#{item.supplierID},
			#{item.shopID},#{item.shopName},#{item.shopCode},0,date_format( now() ,'%Y%m%d%H%i%s'),
			#{item.createBy})
		</foreach>
	</insert>

<selectKey> 

对于Oracle这种不支持主键自增功能的数据库,不可以使用useGeneratedKeys属性配置。要使用seleckey标签嵌套在insert标签中显示查询主键后进行返回。

<selectKey> 标签支持返回插入前最新主键和插入后最新主键,通过order参数控制。

  1. order = "BEFORE" 先查询主键,设置 keyProperty 然后执行插入语句
  2. order = "AFTER"  在执行插入语句后查询最新主键(本次插入数据的主键)
# Oracle
<insert id="insert" useGeneratedKeys="true" keyProperty="idColName">
	<selectKey keyColumn="colName" keyProperty="colParamName" order="AFTER" resultType="Long">
		select currval('seq_name') from dual
	</selectKey>
    insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})
</insert>

# Mysql
<insert id="insert" useGeneratedKeys="true" keyProperty="idColName">
	 <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
            SELECT LAST_INSERT_ID()
     </selectKey>
    insert into tableName (colName) values (#{colVal,jdbcType=VARCHAR})
</insert>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WannaRunning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值