1. 问题引入
当主键超过19位长度的数值型的属性值后三位会被四舍五入
2. 使用雪花算法解决
雪花算法长度最大只有19位的10进制,所以不会丢失精度问题!
SpringBoot 解决主键雪花算法配置https://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 {
@Bean
public 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);
};
}
}