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参数控制。
- order = "BEFORE" 先查询主键,设置 keyProperty 然后执行插入语句
- 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>