MyBatisPlus 主鍵策略的實(shí)現(xiàn)(4種)
說(shuō)明
MyBatis Plus 集成了多種主鍵策略,幫助用戶(hù)快速生成主鍵。
- 雪花算法ID(默認(rèn)策略)(推薦)
- UUID
- 自增ID
- 用戶(hù)輸入ID(必須用戶(hù)每次插入數(shù)據(jù)時(shí),手動(dòng)傳入ID)
雪花算法ID:IdType.ASSIGN_ID(推薦)
默認(rèn)情況,全局使用的,就是雪花算法ID。也就是說(shuō),id字段在沒(méi)有指定任何主鍵策略時(shí),插入數(shù)據(jù)就是使用的雪花算法生成的ID。
注解
如果全局使用雪花算法ID,這個(gè)注解可以不加。
@TableId(type = IdType.ASSIGN_ID)
代碼
package com.example.web.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.ASSIGN_ID) private Long id; private String name; private Integer age; private String email; }
@Test public void insert() { User user = new User(); user.setName("趙一"); user.setAge(26); user.setEmail("zhaoyi@example.com"); mapper.insert(user); }
效果
UUID:IdType.ASSIGN_UUID
注解
@TableId(type = IdType.ASSIGN_UUID)
代碼
package com.example.web.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.ASSIGN_UUID) private Long id; private String name; private Integer age; private String email; }
@Test public void insert() { User user = new User(); user.setName("趙一"); user.setAge(26); user.setEmail("zhaoyi@example.com"); mapper.insert(user); }
效果
自增ID:IdType.AUTO
該類(lèi)型請(qǐng)確保數(shù)據(jù)庫(kù)設(shè)置了 ID自增,否則無(wú)效(會(huì)報(bào)錯(cuò))。
報(bào)錯(cuò)信息查看文章最后的《報(bào)錯(cuò)示例》
注解
@TableId(type = IdType.AUTO)
代碼與測(cè)試
package com.example.web.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; }
@Test public void insert() { User user = new User(); user.setName("趙一"); user.setAge(26); user.setEmail("zhaoyi@example.com"); mapper.insert(user); }
效果
用戶(hù)輸入ID:IdType.INPUT
注解
@TableId(type = IdType.INPUT)
代碼
package com.example.web.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.INPUT) private Long id; private String name; private Integer age; private String email; }
@Test public void insert() { User user = new User(); user.setId(9L); user.setName("趙一"); user.setAge(26); user.setEmail("zhaoyi@example.com"); mapper.insert(user); }
效果
指定id之后,插入數(shù)據(jù)成功
未指定ID報(bào)錯(cuò)
如果不指定id,也就是 setId() 方法沒(méi)調(diào)用,會(huì)報(bào)錯(cuò):
Column ‘id’ cannot be null
補(bǔ)充:報(bào)錯(cuò)示例(IdType.AUTO)
當(dāng) MySQL 數(shù)據(jù)庫(kù)中的表,ID并沒(méi)有自增,但是代碼中的id是自增,此時(shí)新增一條數(shù)據(jù),會(huì)報(bào)錯(cuò)。
實(shí)體類(lèi)
package com.example.web.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import lombok.Data; @Data public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; }
插入數(shù)據(jù)方法
@Test public void insert() { User user = new User(); user.setName("趙一"); user.setAge(26); user.setEmail("zhaoyi@example.com"); mapper.insert(user); }
報(bào)錯(cuò)信息
到此這篇關(guān)于MyBatisPlus 主鍵策略的實(shí)現(xiàn)(4種)的文章就介紹到這了,更多相關(guān)MyBatisPlus 主鍵策略?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中生成任意之間數(shù)的隨機(jī)數(shù)詳解
這篇文章主要介紹了java中生成任意之間數(shù)的隨機(jī)數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09淺談java中Math.random()與java.util.random()的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談java中Math.random()與java.util.random()的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09jstack配合top命令分析CPU飆高、程序死鎖問(wèn)題
記得前段時(shí)間,同事說(shuō)他們測(cè)試環(huán)境的服務(wù)器cpu使用率一直處于100%,本地又沒(méi)有什么接口調(diào)用,為什么會(huì)這樣?cpu使用率居高不下,自然是有某些線程一直占用著cpu資源,那又如何查看占用cpu較高的線程2021-09-09IDEA 2020代碼提示忽略大小寫(xiě)的問(wèn)題
這篇文章主要介紹了IDEA 2020代碼提示忽略大小寫(xiě)的問(wèn)題,本文通過(guò)圖文并茂的形式給大家分享解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07