注:本文代碼樣例及sql腳本均已上傳至gitee:spring-boot-mybatis-plus學習
Mybatis支持的主鍵策略
MybatisPlus支持的主鍵策略定義在IdType中:
值 | 描述 |
---|---|
AUTO | 數據庫ID自增 |
NONE | 無狀態,該類型為未設置主鍵類型(注解里等於跟隨全局,全局里約等於 INPUT) |
INPUT | insert前自行set主鍵值 |
ASSIGN_ID | 分配ID(主鍵類型為Number(Long和Integer)或String)(since 3.3.0),使用接口IdentifierGenerator 的方法nextId (默認實現類為DefaultIdentifierGenerator 雪花算法) |
ASSIGN_UUID | 分配UUID,主鍵類型為String(since 3.3.0),使用接口IdentifierGenerator 的方法nextUUID (默認default方法) |
ID_WORKER | 分布式全局唯一ID 長整型類型(please use ASSIGN_ID ) |
UUID | 32位UUID字符串(please use ASSIGN_UUID ) |
ID_WORKER_STR | 分布式全局唯一ID 字符串類型(please use ASSIGN_ID ) |
/**
* 生成ID類型枚舉類
*
* @author hubin
* @since 2015-11-10
*/
@Getter
public enum IdType {
/**
* 數據庫ID自增
*/
AUTO(0),
/**
* 該類型為未設置主鍵類型(注解里等於跟隨全局,全局里約等於 INPUT)
*/
NONE(1),
/**
* 用戶輸入ID
* <p>該類型可以通過自己注冊自動填充插件進行填充</p>
*/
INPUT(2),
/* 以下3種類型、只有當插入對象ID 為空,才自動填充。 */
/**
* 分配ID (主鍵類型為number或string),
* 默認實現類 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主鍵類型為 string)
* 默認實現類 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER_STR(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
*/
@Deprecated
UUID(4);
private final int key;
IdType(int key) {
this.key = key;
}
}
可以使用@TableId確定主鍵,使用type屬性規定主鍵策略:
@TableId(type = IdType.AUTO) //指定主鍵
private Long id;
測試一下:
@Test
void insert() {
User user = new User();
user.setName("auto");
user.setEmail("12222@qq.com");
user.setRemark("備注信息");
user.setAge(20);
user.setCreateTime(new Date());
int rows = mapper.insert(user);
System.out.println("影響記錄數: " + rows);
System.out.println("主鍵id :" + user.getId());
}
配置主鍵策略的方式
文檔:https://mybatis.plus/config/#dbconfig
- 全局配置
mybatis-plus:
global-config:
db-config:
id-type: AUTO
- 局部配置
@TableId(type = IdType.AUTO) //指定主鍵
private Long id;