跳到主要内容

主键生成

MySQL 使用 AUTO_INCREMENT 生成主键,插入后可将值自动写回实体。

说明

通用配置见主键生成与回填

主键策略

策略本数据源的用法
手工赋值插入前由应用提供主键。
自增由数据库生成数值主键。
UUID字符主键使用 UUID32 或 UUID36。
序列不提供序列主键策略。
自定义使用自定义生成器,在插入前或后处理主键。

使用 AUTO_INCREMENT

CREATE TABLE user_info (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(64)
) ENGINE=InnoDB;
@Table("user_info")
public class UserInfo {
@Column(value = "id", primary = true, keyType = KeyType.Auto)
private Integer id;
@Column("name")
private String name;
}
UserInfo user = new UserInfo();
user.setName("mali");

LambdaTemplate lambda = ...;
lambda.insert(UserInfo.class).applyEntity(user).executeSumResult();

Integer id = user.getId(); // 自动回填
注意

插入多个实体后,从各实体属性读取 ID,不要从第一个 ID 推算其它主键。插入冲突导致跳过或更新已有记录时,不保证回填主键。

选择回填来源

方法注解和 Mapper 文件均使用 useGeneratedKeys,保持默认回填来源。生成键和命令本身的结果集不是同一个结果;这里的插入不要设置 generatedKeySource="resultSet"

上面的例子展示了可用的生成键回填方式;需要指定返回列时使用 keyColumn