天天看点

解决MybatisPlus生成的id过长一:问题描述二、原因三、解决办法

一:问题描述

  记录一下困扰一晚上的一个问题,在使用MybatisPlus(简称"MP")简化开发的时候,在执行添加功能的时候,使用MP的id生成策略生成的id是一个很长的long类型的数字。数字长其实还没事,过分的是他还导致我的删除功能和修改功能都有无法实现了。

二、原因

 使用 MybatisPlus的id生成策略产生的id数太大,超过了JavaScript能够解析的最大范围,这样会导致精度丢失,前台获取到的id和后台数据库中不一致,从而导致无法进行增删改操作。当id定义为Long类型后,生成的id是一个19位数,而 js 能够支持解析的范围是在-9007199254740992到+9007199254740992之间,最大值才16位数。

小插曲: 记录一下MybatisPlus的生成策略:

使用:@TableId 注解

具体使用:

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

分类:

解决MybatisPlus生成的id过长一:问题描述二、原因三、解决办法

三、解决办法

方案一:加注解

在id上边加这个注解

@JsonSerialize(using = ToStringSerializer.class)

众所周知,String是没有范围的,这个注解就会把生成的结果转化为String类型。

@TableName("users")
public class User {
    @TableId(type = IdType.ASSIGN_ID)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
           

方案二:干脆把id类型全改为String类型

把后台代码中的id都转换为String类型,前端代码无需改变

实体类:

@TableName("users")
public class User {
    @TableId(type = IdType.ASSIGN_ID)
    private String id;
           

控制层:

@GetMapping("/{id}")
    public String findById(@PathVariable String id) {
        User user = userMapper.selectById(id);
        return "success";
    }