1、前期检查
- 注解√
@Data public class User { @TableId(type = IdType.AUTO) private Long id; //数据库设置的是BigInt private String name; private Integer age; private String email; private SexEnum sex; @TableLogic private int isDeleted; //逻辑删除 }
- 确保数据库设置了id自增
2、操作运行测试
@SpringBootTest
public class MyBatisPlusEnumTest {
@Autowired
private UserMapper userMapper;
@Test
public void test(){
User user = new User();
user.setName("admin");
user.setAge(33);
user.setSex(SexEnum.MALE);
int result = userMapper.insert(user);
System.out.println("result:"+result);
}
}
造成这个问题的原因可能是在我还没有设置@TableId注解之前运行的程序中插入过数据,由于程序默认的主键策略为ASSIGN_ID雪花算法,因此导致后面主键自增的值都在生成的该id的基础上进行自增+1。
补:type
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableId {
/**
* 主键类型
* {@link IdType}
*/
IdType type() default IdType.NONE;
}
@Getter
public enum IdType {
/**
* 数据库ID自增
* <p>该类型请确保数据库设置了 ID自增 否则无效</p>
*/
AUTO(0),
/**
* 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
*/
NONE(1),
/**
* 用户输入ID
* <p>该类型可以通过自己注册自动填充插件进行填充</p>
*/
INPUT(2),
/* 以下2种类型、只有当插入对象ID 为空,才自动填充。 */
/**
* 分配ID (主键类型为number或string),
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主键类型为 string)
* 默认实现类 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4);
3、解决办法
将Mysql记录的自增值重置一下
先删除之前插入的那几条脏数据
再在mysql数据库中执行:ALTER TABLE 库名.表名 AUTO_INCREMENT = xx(对应数字);
ALTER TABLE mybatis_plus.`user` AUTO_INCREMENT = 5;
重新执行代码查看数据库变化: