SpringBoot 全家桶 | MyBatisPlus(五)主键生成策略

使用主键注解@TableId,加到pojo类的主键上

属性类型必须指定默认值描述
valueString“”主键字段名
typeEnumIdType.NONE主键类型

IdType

描述
AUTO数据库ID自增
NONE无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUTinsert前自行set主键值
ASSIGN_ID分配ID(主键类型为Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法)
ASSIGN_UUID分配UUID,主键类型为String(since 3.3.0),使用接口IdentifierGenerator的方法nextUUID(默认default方法)
ID_WORKER分布式全局唯一ID 长整型类型(please use ASSIGN_ID)
UUID32位UUID字符串(please use ASSIGN_UUID)
ID_WORKER_STR分布式全局唯一ID 字符串类型(please use ASSIGN_ID)

数据库自增主键 - AUTO

插入时不会带ID列,需要数据库设置ID自增

插入日志:

JDBC Connection [HikariProxyConnection@1681215776 wrapping com.mysql.cj.jdbc.ConnectionImpl@64b7225f] will not be managed by Spring
==>  Preparing: INSERT INTO user ( name, age, email ) VALUES ( ?, ?, ? )
==> Parameters: Mimi(String), 19(Integer), mimi@163.com(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2a389173]

用户输入 - INPUT

insert前自行set主键值

插入日志:

JDBC Connection [HikariProxyConnection@952288009 wrapping com.mysql.cj.jdbc.ConnectionImpl@1a480135] will not be managed by Spring
==>  Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 9(Long), Mimi(String), 19(Integer), mimi@163.com(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@70e02081]

无状态 - NONE

未设置主键类型,类似于ASSIGN_ID

插入日志:

JDBC Connection [HikariProxyConnection@79620878 wrapping com.mysql.cj.jdbc.ConnectionImpl@6e8a9c30] will not be managed by Spring
==>  Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 1307978008895885313(Long), Mimi(String), 19(Integer), mimi@163.com(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7573e12f]

分配ID - ASSIGN_ID

默认使用插入对象ID,当插入对象ID为空时,使用雪花算法

雪花算法结构图:

雪花算法

插入日志:

JDBC Connection [HikariProxyConnection@79620878 wrapping com.mysql.cj.jdbc.ConnectionImpl@6e8a9c30] will not be managed by Spring
==>  Preparing: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
==> Parameters: 1307978926462754817(Long), Mimi(String), 19(Integer), mimi@163.com(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7573e12f]

分配UUID - ASSIGN_UUID

默认使用插入对象ID,当插入对象ID为空时,使用UUID,并去除“-”,主键类型为String

插入日志:

JDBC Connection [HikariProxyConnection@81355344 wrapping com.mysql.cj.jdbc.ConnectionImpl@9a6fbc0] will not be managed by Spring
==>  Preparing: INSERT INTO dept ( id, name ) VALUES ( ?, ? )
==> Parameters: 4b0e878b5bfc2f22f44f1a3691403116(String), 研发部(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4ae263bf]
1

上一篇:SpringBoot 全家桶 | MyBatisPlus(四)分页与排序
下一篇:SpringBoot 全家桶 | MyBatisPlus(六)软删除(逻辑删除)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农StayUp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值