MybatisPlus主键策略(type=IdType.ASSIGN_ID等详解)

更新时间:2023-05-18 19:57:33 阅读: 评论:0

神秘地带MybatisPlus主键策略(type=IdType.ASSIGN_ID等详解)
三,主键策略
我们可以通过@TableId注解的类型属性来设置主键id的增长策略,⼀共有⼏个多个主键策略,可根据情况⾃由配置。
1,ASSIGN_ID(雪花算法)
如果不设置类型值,默认则使⽤IdType.ASSIGN_ID策略(⾃3.3.0起)。该策略会使⽤雪花算法⾃动⽣成主键ID,主键类型为长或字符串(分别对应的MySQL的表字段为BIGINT和VARCHAR)
提⽰:该策略使⽤接⼝IdentifierGenerator的⽅法nextId(以实现类为DefaultIdentifierGenerator雪花算法),下⾯是雪花算法介绍:
雪花算法(雪花)是微博开源的分布式ID⽣成算法其核⼼思想就是:使⽤⼀个64位的长型的数字作为全局唯⼀ID。在分布式系统中的应⽤⼗分⼴泛,且ID引⼊了时间戳,基本上保持⾃增的。
1个2 3 4 5 6 7 8@Data
public class UrInfo {
//指定主键⽣成策略使⽤雪花算法(默认策略)    @TableId(type = IdType.ASSIGN_ID)
private Long id;
private String urName;
private String passWord;
绝美诗词
}
2,ASSIGN_UUID(排除中划线的UUID)
如果使⽤IdType.ASSIGN_UUID策略,并重新⾃动⽣成排除中划线的UUID作为主键。主键类型为String,对应MySQL的表分段为VARCHAR(32)
提⽰:该策略使⽤接⼝IdentifierGenerator的⽅法nextUUID
1个2 3 4 5 6 7 8@Data
public class UrInfo {
产妇能吃海参吗/
/指定主键⽣成策略为不含中划线的UUID    @TableId(type = IdType.ASSIGN_UUID)    private String id;
private String urName;
private String passWord;
}
3,AUTO(数据库ID⾃增)
对于像MySQL这样的⽀持主键⾃动递增的数据库,我们可以使⽤IdType.AUTO策略。
1个2 3 4 5 6 7 8@Data
public class UrInfo {
//指定主键使⽤数据库ID⾃增策略    @TableId(type = IdType.AUTO)    private Integer id;加拿大枫糖
private String urName;
private String passWord;
}
4,INPUT(插⼊前⾃⾏设置主键值)
(1)针对有序列的数据库:Oracle,SQLServer等,当需要建⽴⼀个⾃增序列时,需要⽤到序列。
提⽰:
约等在Oracle 11g中,设置⾃增扩,需要先创建序列(SQUENCE)再创建⼀个触发器(TRIGGER)。
在Oracle 12c中,只需要使⽤IDENTITY属性就可以了,和MySQL⼀样简单。
(2)Mybatis -Plus已经定义好了常见的数据库主键序列,我们⾸先只需要在@Configuration类中定义好@Bean:Mybatis -Plus内置了如下数据库主键序列(如果内置⽀持不满⾜你的需求,可实现IKeyGenerator接⼝来进⾏扩展):DB2KeyGenerator
H2KeyGenerator
KingbaKeyGenerator
Oracle密钥⽣成器
PostgreKeyGenerator
寒湿泄泻1个2 3 4@Bean
public OracleKeyGenerator oracleKeyGenerator(){    return new OracleKeyGenerator();
}
(3)然后实体类配置主键Sequence,指定主键策略为IdType.INPUT即可:
提⽰:⽀持⽗类定义@KeySequence⼦类使⽤,这样就可以⼏个表共享⼀个Sequence
1个2 3 4 5 6 7@TableName("TEST_SEQUSER")
@KeySequence("SEQ_TEST")//类注解public class TestSequr{
@TableId(value = "ID", type = IdType.INPUT)  private Long id;
lol经典台词}
(4)如果主键是String类型的,也可以使⽤:
如何使⽤序列作为主键,但是实体主键类型是字符串开头,表的主键是varchar2,但是需要从序列中取值
实体定义@KeySequence注解clazz指定类型String.class
实体定义主键的类型字符串
注意:oracle的序列返回的是Long类型,如果主键类型是Integer,可能会引起ClassCastException
1个2 3 4 5 6 7@KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = String.class) public class YourEntity{
@TableId(value = "ID_STR", type = IdType.INPUT)
private String idStr;
...
}蜜蜡去哪里鉴定
5,⽆(⽆状态)
如果使⽤IdType.NONE策略,表⽰未设置主键类型(注解⾥等于跟随上下,左右⾥约等于INPUT)
附:变量策略配置
假设我们希望完全全部都使⽤AUTO策略(数据库ID⾃增),那么可以在 application.properties中添加如下配置进⾏修改:1个mybatis-plus.global-config.db-config.id-type=auto
原⽂出⾃:转载请保留原⽂链接:

本文发布于:2023-05-18 19:57:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/914008.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:主键   类型   策略   算法   雪花   序列   配置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图