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);