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

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

 

1.书签引短

MySQL 数据库,用 mybatis update,更新过后想要拿到更新记录的主键ID,怎么办?或者 insert 记录的同时返回自增主键ID呢?

 

2.解决方案

可以通过 mybatis 的 selectKey 标签来获取 update 记录后对应更新记录的主键ID:


    
        SELECT id FROM t_coupon WHERE activity_id = #{activityId} AND user_id = #{userId}
    
    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}

注意,需要在 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 INTO t_coupon (
        
    ) 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')
    )

注意,需要在 mybatis insert 标签中:

  1. 设置属性 useGeneratedKeys 为 true,设置属性 keyProperty 为对应表的自增主键ID
  2. parameterType 为需要插入的实例对象

 

你可能感兴趣的:(Java,MyBatis,mybatis,selectKey,keyProperty)