Mybatis-insert数据返回主键id

一,前言

在使用Mybatis做insert操作时,有时候我们希望能够或得插入后数据的主键,例如一个自增id字段,在后续的逻辑中我们可以会使用到这个字段做数据结构上的关联,以下是Mybatis中的实现

二,场景

我们模拟一个需要insert数据后返回主键,在后续逻辑中使用这个主键的场景:
现在我们有一个满减的需求,数据库表设计为满减基础信息表,满减等级表,和满减商品表
如:
    基本信息:买牙膏送牙刷,
    满减等级:100-10,200-30,300-50
    满减商品:1000001,1000002,1000003

如此一来,我们需要靠基本信息表的主键id来关联等级和商品的所属情况

三,insert数据返回主键id

使用@Options(useGeneratedKeys = true, keyProperty = “id”, keyColumn = “id”)返回主键id

/**
 * Created by Brave on 2017/3/15.
 */
@Mapper
public interface PromotionFullcutMapper {

    @Insert("insert into promotion_fullcut (name, create_time, update_time, " +
            "create_by, update_by, active, begin_time, end_time) " +
            "values (" +
            "#{name, jdbcType=VARCHAR}, " +
            "#{createTime, jdbcType=TIMESTAMP}, " +
            "#{updateTime, jdbcType=TIMESTAMP}, " +
            "#{createBy, jdbcType=VARCHAR}, " +
            "#{updateBy, jdbcType=VARCHAR}, " +
            "#{activeStatus, jdbcType=INTEGER}, " +
            "#{beginTime, jdbcType=TIMESTAMP}, " +
            "#{endTime, jdbcType=TIMESTAMP}" +
            ")")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insertFullCutInfo(FullCutEntity FullCutObj);
}

四,测试

在我们的数据库中已经有一组id=1的数据,我们先取出来这组数据,再添加进行测试

// test
FullCutEntity fullCutEntity = promotionFullcutService.queryFullCutDetail(1);
promotionFullcutService.insertFullCutDetail(fullCutEntity);

测试:

取出数据库中id=1的一组数据:

mybatis-id1

使用这组数据,重新插入一组到数据库并返回主键id:

mybatis_id2

此时返回的主键id=17为新插入数据的主键id,并在后续的逻辑中使用此id,完成数据关联

查看数据库中的数据关系:

基础信息表:
17  买牙膏送牙刷  2017-11-21 14:16:11     admin       1   2017-11-01 14:16:27 2017-11-30 14:16:30

等级表:
22  17  1   100.00  10.00
23  17  2   200.00  30.00
24  17  3   300.00  50.00

Sku表:
7   17  1000001
8   17  1000002
9   17  1000003
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BraveWangDev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值