一,前言
在使用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的一组数据:
使用这组数据,重新插入一组到数据库并返回主键id:
此时返回的主键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