楔子:疫情渐去,万物复苏。春色同你一般温柔。
1.今日书签
MySQL 数据库,用 mybatis update,更新过后想要拿到更新记录的主键ID,怎么办?或者 insert 记录的同时返回自增主键ID呢?
2.冬去春来
可以通过 mybatis 的 selectKey 标签来获取 update 记录后对应更新记录的主键id:
<update id="updateCouponUseStatus" parameterType="com.meiwei.dao.promotion.primary.bean.CouponBean">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
SELECT id FROM t_coupon WHERE activity_id = #{activityId} AND user_id = #{userId}
</selectKey>
UPDATE t_eshop_coupon
SET use_status = #{useStatus},
update_time = NOW(),
update_user = #{updateUser}
WHERE
activity_id = #{activityId}
AND user_id = #{userId}
AND coupon_code = #{couponCode}
</update>
注意,需要在 mybatis update 标签中:
- 使用 selectKey 标签后置查询更新记录对应主键id
- selectKey 标签的属性 keyProperty 与 update 的 parameterType 实体对象的主键相映射
说明:
标签属性 | 说明 |
---|---|
selectKey | 查询主键 |
keyProperty | 主键对应的属性名称。 即 keyProperty="id" 与 CouponBean 的 id 属性匹对; 若 keyProperty="couponId" 则与 CouponBean 的 couponId 属性匹对 |
resultType | 主键返回类型 |
order | 分为 BEFORE 或 AFTER: 如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句; 如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素。与 update 配合使用,必须使用 AFTER 模式 |
3.番外物语
MySQL 数据库,在 mybatis insert 记录的同时返回自增主键id:
<insert id="save" parameterType="CouponBean" useGeneratedKeys="true" keyProperty="id">
INSERT INTO t_coupon (
<include refid="commonColumnsNotPK"/>
) VALUES (
#{activityId}
, #{couponCode}
, #{userId}
, #{useStatus}
, str_to_date(#{takeTime}, '%Y-%m-%d %H:%i:%s')
, str_to_date(#{expireTime}, '%Y-%m-%d %H:%i:%s')
, #{createUser}
, NOW()
, #{updateUser}
, str_to_date(#{updateTime}, '%Y-%m-%d %H:%i:%s')
)
</insert>
注意,需要在 mybatis insert 标签中:
- 设置属性 useGeneratedKeys 为 true,设置属性 keyProperty 为对应表的自增主键id
- parameterType 为需要插入的实例对象