💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
默认的主键生成策略共有5种: * AUTO: 主键自增 * NONE: 不设置id生成策略 * INPUT:用户手工输入id * ASSIGN_ID:雪花算法生成id(可兼容数值型与字符串型) * ASSIGN_UUID:以UUID生成算法作为id生成策略 * 其他的几个策略均已过时,都将被ASSIGN\_ID和ASSIGN\_UUID代替掉。 ``` @Data @TableName("tbl_user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; @TableField(value="pwd",select=false) private String password; private Integer age; private String tel; @TableField(exist=false) private Integer online; } ``` ![](https://img.kancloud.cn/b4/91/b491bf0cf34b965752e612e9128c1329_1633x1685.png) **拓展:** 分布式ID是什么? * 当数据量足够大的时候,一台数据库服务器存储不下,这个时候就需要多台数据库服务器进行存储 * 比如订单表就有可能被存储在不同的服务器上 * 如果用数据库表的自增主键,因为在两台服务器上所以会出现冲突 * 这个时候就需要一个全局唯一ID,这个ID就是分布式ID。 # ID生成策略对比 介绍了这些主键ID的生成策略,我们以后该用哪个呢? * NONE: 不设置id生成策略,MP不自动生成,约等于INPUT,所以这两种方式都需要用户手动设置,但是手动设置第一个问题是容易出现相同的ID造成主键冲突,为了保证主键不冲突就需要做很多判定,实现起来比较复杂 * AUTO:数据库ID自增,这种策略适合在数据库服务器只有1台的情况下使用,不可作为分布式ID使用 * ASSIGN_UUID:可以在分布式的情况下使用,而且能够保证唯一,但是生成的主键是32位的字符串,长度过长占用空间而且还不能排序,查询性能也慢 * ASSIGN_ID:可以在分布式的情况下使用,生成的是Long类型的数字,可以排序性能也高,但是生成的策略和服务器时间有关,如果修改了系统时间就有可能导致出现重复主键 综上所述,每一种主键策略都有自己的优缺点,根据自己项目业务的实际情况来选择使用才是最明智的选择。