1、问题概述?

我们在使用mybatis或者mybatisplus向mysql数据库添加数据的时候,经常使用的id是自增主键,数据添加成功后,我们想使用这个id,这个时候我们就需要获取这个id。

如果你不会使用springboot整合mybatis框架,请看如下连接:

https://blog.csdn.net/tangshiyilang/article/details/129678563

2、获取方式?

2.1、创建对应的表

啥表都行,重点是id INT(11)NOT NULL AUTO_INCREMENT,-- 编号 使用的是自增主键

-- 创建班次轮值表  需要体现出当前时间节点多人是谁值班。
CREATE TABLE  dutytruns(
     id INT(11)NOT NULL AUTO_INCREMENT,-- 编号
     dutyshift VARCHAR(10),    --  班次   财智中心白班
     dutysort  VARCHAR(500), --  值班人员及顺序如 json字符串
     dutytimeday VARCHAR(10), -- 值班时间如周一 
     dutyremark VARCHAR(200), -- 备注信息
     PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

2.2、创建添加数据使用的bean

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("dutytruns")
public class DutyTruns {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;//编号
    private String dutyshift;//班次   财智中心白班
    private String dutysort;//值班人员及顺序如 json字符串
    private String dutytimeday;//值班时间如周一
    private String dutyremark;//备注信息
}

2.3、创建mapper映射文件

重点配置:
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>

注意点:

   这个时候虽然insert会返回一个id,但是不需要配置resultType返回值类型。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hazq.hazqoa.mapper.DutyInfoMapper">
    <!-- 判断数据的存在性 -->
    <insert id="addDutyInfo" parameterType="DutyInfo">
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO duty_dutyinfo (dutyname,dutyphone,dutyemail,dutytimeday,dutyshift,dutystate,dutyremark,createtime,updatetime)
        VALUES (#{dutyname},#{dutyphone},#{dutyemail},#{dutytimeday},#{dutyshift},#{dutystate},#{dutyremark},#{createtime},#{updatetime})
    </insert>
</mapper>

2.4、创建映射文件对应的接口

由于使用的是mybatis的mapper代理开发,创建接口就可以了。

注意点:

      由于期望返回添加成功后的自增主键,所以接口需要返回一个int类型的参数。

public interface DutyInfoMapper extends BaseMapper<DutyInfo> {
    public  int  addDutyInfo(DutyInfo dutyInfo);
}

2.5、使用并获取自增id

注意点:

   这个时候dutyTrunsMapper.addDutyTruns(dutyTruns);其实不需要返回值,我们使用的dutyTruns对象中的id会被自动赋值,说白了:dutyTruns中的id属性已经被赋值数据库中对应的自增逐渐,你可以直接使用了。

DutyTruns dutyTruns=new DutyTruns();
dutyTruns.setDutyshift(dutyInfo.getDutyshift());
dutyTruns.setDutySort(dutyInfo.getDutySort());
dutyTruns.setDutytimeday(dutyInfo.getDutytimeday());
dutyTrunsMapper.addDutyTruns(dutyTruns);
04-01 08:00