自增主键的问题

MybatisPlus 中的主键策略:(主键是否自增,主键id怎么生成)

主键策略

我可以在我们的实体类的主键Id上使用注解@TableId表示此字段为表主键,使用Type属性指定主键设置填充的策略,Mybatis-plus默认使用的是(即我们不使用注解修饰我们的主键ID)雪花银算法

@TableId(type = IdType.ASSIGN_ID)
private String id;

  • AUTO

    数据库ID自增,依赖于数据库。该类型请确保数据库设置了 ID自增 否则无效

  • NONE

    未设置主键类型。若在代码中没有手动设置主键,则会根据主键的全局策略自动生成(默认的主键全局策略是基于雪花算法的自增ID)

  • INPUT

    需要手动设置主键,若不设置。插入操作生成SQL语句时,主键这一列的值会是null

  • ASSIGN_ID

    当没有手动设置主键,即实体类中的主键属性为空时,才会自动填充,使用雪花算法

  • ASSIGN_UUID

    当实体类的主键属性为空时,才会自动填充,使用UUID

AAIGN_ID(雪花算法)

MyBatis-Plus默认的主键策略是:ASSIGN_ID (使用了雪花算法)

雪花算法:分布式ID生成器
雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。

AUTO自增策略

需要在创建数据表的时候设置主键自增
实体字段中配置 @TableId(type = IdType.AUTO)

全局主键策略设置

要是想要配置全局的主键策略,可以在配置文件中写入全局主键策略(全局设置了之后就不用一个个去设置了)

#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto

经过测试,

1.什么都不写的情况下,前端传进controller中时候是id为null  插入失败

2.只用自己写的id生成器注解 ,注解在contoller层方法上时,前端传进controller中时候是id已经生成好,插入成功

 3.在实体类的ID字段上注解 ASSIGN_ID时候,@TableId(type = IdType.ASSIGN_ID)    
 
前端传进controller中时候是id为null 但是在mapper层进行插入语句的时候id就有值了

对于自己定义的id生成器注解

注解的使用:

注解的定义:

 切面: 获取第一个参数(paramIndex=0)一般是实体类对象 例如user, 然后 定义方法名为setUserId,利用setIdByObject方法中的反射 去自动生成id。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值