Java书签 # MyBatis返回插入/更新记录的id,及selectKey标签的巧用

楔子:疫情渐去,万物复苏。春色同你一般温柔。

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 标签中:

  1. 使用 selectKey 标签后置查询更新记录对应主键ID
  2. 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 标签中:

  1. 设置属性 useGeneratedKeys 为 true,设置属性 keyProperty 为对应表的自增主键ID
  2. parameterType 为需要插入的实例对象
发布了68 篇原创文章 · 获赞 14 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/itanping/article/details/103125807