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 为需要插入的实例对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值