MybatisPlus使用@TableId注解主键策略的报错及解决办法总结

MybatisPlus中使用@TableId注解来设置主键策略,可以查看源代码

package com.baomidou.mybatisplus.annotation;

public enum IdType {
    AUTO(0),
    NONE(1),
    INPUT(2),
    ASSIGN_ID(3),
    ASSIGN_UUID(4),
    /** @deprecated */
    @Deprecated
    ID_WORKER(3),
    /** @deprecated */
    @Deprecated
    ID_WORKER_STR(3),
    /** @deprecated */
    @Deprecated
    UUID(4);

    private final int key;

    private IdType(int key) {
        this.key = key;
    }

    public int getKey() {
        return this.key;
    }
}

分为以下五种:

主键策略详情:

AUTO(数据库ID自增)
数据库 ID自增,这种情况下将表中主键设置为自增,否则,没有设置主动设置id值进行插入时会报错。对于像MySQL这样的支持主键自动递增的数据库,就可以使用IdType.AUTO策略。

NONE(无状态) 

无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里默认 ASSIGN_ID)

INPUT(插入前自行设置主键值) 

insert 前自行 set 主键值,在采用IKeyGenerator类型的ID生成器时必须为INPUT

ASSIGN_ID(雪花算法)

分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),
如果不设置类型值,默认则使用IdType.ASSIGN_ID策略,分配 ID(主键类型为 Number(Long 和 Integer)或 String)(自3.3.0起)。该策略会用雪花算法,使用接口IdentifierGenerator的方法nextId自动生成主键ID(默认实现类为DefaultIdentifierGenerator雪花算法),主键类型为长或字符串(分别对应的MySQL的表字段为BIGINT和VARCHAR)

ASSIGN_UUID(排除中划线的UUID)
如果使用IdType.ASSIGN_UUID策略,并重新自动生成排除中划线的UUID作为主键。主键类型为String,使用接口IdentifierGenerator的方法nextUUID(默认 default 方法),对应MySQL的表分段为VARCHAR(32)

spring boot中,可以通过如下配置更改全局配置。

mybatis-plus.global-config.db-config.id-type=assign_id

报错解决:

1、Field 'id' doesn't have a default value; nested exception is java.sql.SQLException: Field 'id' doesn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值