> 文章列表 > SpringBoot 解决id使用字符串类型可以解决精度问题

SpringBoot 解决id使用字符串类型可以解决精度问题

SpringBoot 解决id使用字符串类型可以解决精度问题

1. 问题引入

当主键超过19位长度的数值型的属性值后三位会被四舍五入

2. 使用雪花算法解决 

雪花算法长度最大只有19位的10进制,所以不会丢失精度问题!
SpringBoot 解决主键雪花算法配置icon-default.png?t=N2N8https://liush.blog.csdn.net/article/details/129779627

①  application.yml 全局配置文件

mybatis-plus:global-config:db-config:id-type: assign_id

② 指定单一注解使用

@TableId(type = IdType.ASSIGN_ID) // 注解指定设置雪花算法
private Long id;

3. 使用属性设置String类型解决

@TableId(type = IdType.ASSIGN_ID) // 注解指定设置雪花算法
private String id;

4. 使用 Jackson 注解

设置 Jackson 转换对象为 json字符串时 Long类型的 id属性转为字符串 处理

@JsonSerialize(using = ToStringSerializer.class)
private Long id;

5. 使用 Jackson 配置类

@Configuration
public class JacksonConfig {@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return jacksonObjectMapperBuilder -> {jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance);jacksonObjectMapperBuilder.serializerByType(BigDecimal.class, ToStringSerializer.instance);};}
}