Mybatis-insert数据返回主键id

来源:互联网 发布:java 图片上传非jsp 编辑:程序博客网 时间:2024/05/26 08:43

一,前言

在使用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. */@Mapperpublic 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的数据,我们先取出来这组数据,再添加进行测试

// testFullCutEntity 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.0023  17  2   200.00  30.0024  17  3   300.00  50.00Sku表:7   17  10000018   17  10000029   17  1000003