设置主键自增策略:(主键策略类型要和数据库对应)
alter table user change column id id bigint(20) auto_increment;
- 给实体主键id上加注解,并设置为自增策略@TypeId(type = IdType.AUTO)
@TableId(type = IdType.AUTO)
private Long id;
- 设置主键为跟随全局策略,默认的策略@TableId(type = IdType.NONE);
这时如果你设置了主键id,则主键为你设置的id值,如果没有设置,那就是按雪花算法了
@TableId(type = IdType.NONE)
private Long id;
以下三种是局部策略,只有当没设置id时才会自动填充,如果手动设置了id,那就按设置的id为准
- 设置主键为UUID策略@TableId(type = IdType.UUID);
UUID是String类型的,所以数据库和实体里都要改成字符串类型
@TableId(type = IdType.UUID)
private String id;
- 设置主键为ID_WORKER_STR策略@TableId(type = IdType.ID_WORKER_STR);
ID_WORKER_STR是String类型的雪花算法,所以数据库和实体里都要改成字符串类型
@TableId(type = IdType.ID_WORKER_STR)
private String id;
- 设置主键为WORKER_STR策略@TableId(type = IdType.WORKER_STR);
WORKER_STR是数值类型的雪花算法
@TableId(type = IdType.WORKER_STR)
private Long id;
也可以在yml中设置全局的策略,这样就不用再实体上加@TableId(type = ...)注解了
mybatis-plus:
mapper-locations: classpath*:com/mp/first/mapper/*.xml
# 全局策略配置为UUID
global-config:
db-config:
id-type: uuid
局部策略>全局策略,都配的话会按局部策略走
测试:
package com.mp.first;
import com.mp.first.dao.UserMapper;
import com.mp.first.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class IdTypeTest {
// @Autowired
// private UserMapper userMapper;
// INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
@Test
public void insert() {
User user = new User();
// user.setId("123");
user.setName("青儿");
user.setAge(18);
user.setEmail("qinger@qq.com");
boolean bol = user.insert();
System.out.println("插入是否成功:"+bol);
System.out.println("主键:"+user.getId());
}
}