mybatis-plus主键自增带来的问题!

若依框架下从mybatis升级到mybatis-plus后遇到的一些问题:

在建表时定义了主键自增初始值也设置为一个二位常数,但是经过mybatis-plus的主键自增注解后会生成一个长度为19位的主键id!

而且在看数据库结构主键自增的初始值也被更改为长度为19位的大数!

CREATE TABLE `bas_ship_certificate` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `sys_dept_id` int(10) unsigned NOT NULL COMMENT 'sys_dept表主键',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
  PRIMARY KEY (`id`)
) AUTO_INCREMENT = 85 AUTO_INCREMENT_MODE = 'ORDER' DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 COMMENT = '船舶证书信息';

可以看得到这里的 AUTO_INCREMENT = 85 这里的自增初始值为85

java中的实体类注解为(这段是从mybatis之前的老框架中复制过来的代码):

@Data
@ApiModel(value = "ShipCertificate", description = " ship_certificate")
public class BasShipCertificate extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** id */
    @NotNull(message = "修改时id不能为空", groups = {Update.class})
    @ApiModelProperty(value = "id")
    @TableId
    private Long id;


其中注意看 @TableId 这个就是主键id的注解

问题就出在这里,在mybatis中 @TableId 注解默认值与 mybatis-plus的 @TableId 默认值不同!

mybatis-plus的 @TableId 注解默认值为 ASSIGN_ID

查看源码官网介绍为

他是雪花算法,是根据地域时间等一些因素生成一个全球绝对唯一的id类型为number,同时在存入数据库时也会把数据库的结构改变,就是咱们之前提到的 AUTO_INCREMENT = 85 其中的85会变成一个19位的数字!

注意前端json传输数据时使用的number接收数字类型的数据的,最多能准确接收16位!然而雪花算法时19位!如果想解决可以参考这位博主的前端准确接收19位数字

不过咱们刚建的标其实还有很多解决办法,可以让mybatis-plus的主键自增按照mybatis的之间自增模式进行增长!

解决办法就是指定 @TableId 注解的类型

如下:

@Data
@ApiModel(value = "ShipCertificate", description = "船舶证书信息对象 ship_certificate")
public class BasShipCertificate extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** id */
    @NotNull(message = "修改时id不能为空", groups = {Update.class})
    @ApiModelProperty(value = "id")
    @TableId(type = IdType.AUTO)
    private Long id;


指定 type = IdType.AUTO

查看源码官方介绍为:

设置成普通的这个就行了,会根据你创建数据库时的值进行递增!

有同学就会疑问了:我创建表的时候没有指定 AUTO_INCREMENT = 85 这个呀!

其实你不指定它默认是 AUTO_INCREMENT = 1

如果你时直接复制的别人的表结构 AUTO_INCREMENT = 85 这个属性也会复制过来。

全部评论

相关推荐

hanliu:1. 排版与格式问题字体与对齐问题:标题和内容的字体大小差异不够明显,无法迅速吸引目光。某些文字看起来有些拥挤(比如校园经历中的“班委成员”部分)。2. 内容逻辑性模块顺序问题:实习经历放在较靠后的位置,实际上这部分内容对应聘来说更重要,建议提前突出。细节表述不够突出:比如教育背景部分的专业课程仅仅列出名字,没有说明自己在这些课程中表现如何或者掌握了什么技能,缺乏量化描述。多余内容:例如“班委成员”和“宣传委员”这类校园经历,叙述过于普通,缺乏和岗位相关的实质性贡献。,建议简写。3. 措辞专业性表达不够精准:例如“协助班长与团支书更好地为同学服务”显得较为笼统,没有实际成果的体现。用词重复:如“学习了焊接”“学习了光检”等重复词语较多,缺乏丰富的动词来展示个人能力(如“负责”“优化”“改进”等)。技能展示不足:虽然列出了UG和CAD证书,但没有明确提到这些技能如何在实际工作中发挥作用。4. 技能匹配度技能深度不足:虽然列出了掌握的软件和技术,但没有描述技能水平(如“熟练掌握”“精通”),也没有具体案例支持这些技能。缺乏岗位导向性:比如针对机械设计与制造方向,实习经历提到了“E6尾灯项目”,但没有详细说明自己在其中的技术贡献,可能会显得经验描述泛泛而谈。5. 自我评价问题表达空泛:如“具有良好的沟通协调能力”“责任心强”之类的描述太常见,没有让人眼前一亮的特点。缺乏成果支持:自我评价中的能力没有用具体项目、经历或成就来验证,可信度较弱。 兄弟加油
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务