常规mybatis中批量或单个插入数据成功后,插入的实体类会获取到主键id,例如:
实体类为:
@JsonInclude(JsonInclude.Include.NON_NULL)
@TableName("test_users")
@Data
public class TestUsers implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 年龄
*/
@TableField("age")
private Integer age;
/**
* 姓名
*/
@TableField("name")
private String name;
}
现自定义一个业务实体类批量插入(或单条插入,不会影响主键的返回)并要求返回主键id注入到userId的属性中,如下图:
自定义的业务实体类为:
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class TestUsersDto implements Serializable{
private static final long serialVersionUID = 1L;
private Integer userId;
/**
* 年龄
*/
private Integer age;
/**
* 姓名
*/
private String name;
}
TestUsersMapper.class接口的定义
int batchSave(@Param("list")List<TestUsersDto> list);
TestUsersMapper.xml的实现:
mybatis中配置useGeneratedKeys="true" keyProperty="userId"的作用
useGeneratedKeys="true"时,表示如果插入的表以自增为主键,则允许JDBC支持自动生成主键,并可将自动生成的主键id返回。useGeneratedKeys参数只针对Insert语句生效,默认为false;
keyPproperty="userId"表示把获取到的主键注入到TestUsersDto的userId属性中。