主键策略
数据库插入时一般都会有主键 id,mybatis-plus 通过注解来插入不同的主键 id
@TableId
属性 | 类型 | 必须指定 | 默认值 | 描述 |
---|---|---|---|---|
value | String | 否 | “” | 主键字段名 |
type | Enum | 否 | IdType.NONE | 主键类型 |
IdType
值 | 描述 |
---|---|
AUTO | 数据库ID自增,表中id字段必须为自增 |
NONE | 若有手动设置主键值,则使用手动设置的值,如果没有,则使用雪花算法生成 |
INPUT | insert前自行set主键值 |
ASSIGN_ID | 雪花算法分配ID,主键类型为Number或String,since 3.3.0 |
ASSIGN_UUID | 分配UUID,主键类型为String,since 3.3.0 |
ID_WORKER | 过时,分布式全局唯一ID 长整型类型(please use ASSIGN_ID) |
UUID | 过时,32位UUID字符串(please use ASSIGN_UUID) |
ID_WORKER_STR | 过时,分布式全局唯一ID 字符串类型(please use ASSIGN_ID) |
开始使用
**说明:**除了手动插入指定的 id 生成策略,其他策略在代码中都不需要设置实体类 id 的值,这里只使用 AUTO 的策略来演示
实体类添加注解
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@TableId(type = IdType.AUTO) // 自增策略
private Long id;
private String name;
private Integer age;
private String email;
}
注意:当使用长主键时,那么实体类成员变量 id 应该用 Long 类型
测试自增策略
@Test
void test1(){
User user = new User(); // 不需要set主键id
user.setName("Mario");
user.setAge(22);
user.setEmail("blp001@qq.com");
userMapper.insert(user);
}
查看结果
- 主键 id 自增为 6,测试成功