在用mybatis Plus搞項目時發現一個坑,所以和大家分享一下,避免重復踩坑
問題: 在搞一個功能的修改時,發現獲取的id用條件查詢查不到數據,無法修改該數據,開始排查出錯原因,
前端拿到的數據: 數據庫存取的數據:
可以看的出來返回給前端的數據和數據庫里面的數據不一致了,然后就到導致修改獲取的id查不到該條數據
那為什么會出現這樣的問題呢
mybatis-plus的主鍵策略 ASSIGN_ID 策略是根據雪花算法會生成一個Long型的19位的數值,這個數值傳到前台之后,超過了js中數字的最大范圍,具體表現為最后兩位始終為 0。所以導致了該問題的出現
解決辦法:
在實體類中把id的主鍵上轉換類型,用別的類型就可以把該數值完全的拿到了(注意細節: 這樣解決的辦法,是需要在每個id都需要加上這個注解的,這樣下來可能會比較麻煩.所以我用的辦法是我把所有公共用的值都封裝在了一起(),使用的時候直接繼承了這個實體,所以只寫了一個id注解,所有的都可以正常使用的,如果你的不是這種的,你可能是需要每個實體類的id都需要加上這個注解哦!)
@TableId(type = IdType.ASSIGN_ID) @JsonSerialize(using = ToStringSerializer.class) //轉換類型為String
private Long id;
加上以后就可以把id的類型轉換為String類型的,完整的拿到了
也是第一次遇到這樣的問題,解決問題的辦法也有限,有可能會有很好的解決辦法.