MyBatisPlus 主鍵策略的實現(xiàn)(4種)
說明
MyBatis Plus 集成了多種主鍵策略,幫助用戶快速生成主鍵。
- 雪花算法ID(默認(rèn)策略)(推薦)
- UUID
- 自增ID
- 用戶輸入ID(必須用戶每次插入數(shù)據(jù)時,手動傳入ID)
雪花算法ID:IdType.ASSIGN_ID(推薦)
默認(rèn)情況,全局使用的,就是雪花算法ID。也就是說,id字段在沒有指定任何主鍵策略時,插入數(shù)據(jù)就是使用的雪花算法生成的ID。
注解
如果全局使用雪花算法ID,這個注解可以不加。
@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
該類型請確保數(shù)據(jù)庫設(shè)置了 ID自增,否則無效(會報錯)。
報錯信息查看文章最后的《報錯示例》
注解
@TableId(type = IdType.AUTO)
代碼與測試
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); }
效果
用戶輸入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報錯
如果不指定id,也就是 setId() 方法沒調(diào)用,會報錯:
Column ‘id’ cannot be null
補充:報錯示例(IdType.AUTO)
當(dāng) MySQL 數(shù)據(jù)庫中的表,ID并沒有自增,但是代碼中的id是自增,此時新增一條數(shù)據(jù),會報錯。
實體類
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); }
報錯信息
到此這篇關(guān)于MyBatisPlus 主鍵策略的實現(xiàn)(4種)的文章就介紹到這了,更多相關(guān)MyBatisPlus 主鍵策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談java中Math.random()與java.util.random()的區(qū)別
下面小編就為大家?guī)硪黄獪\談java中Math.random()與java.util.random()的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09