MP的主键自增策略

设置主键自增策略:(主键策略类型要和数据库对应)
  • 首先把数据库的主键设置为自增
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("[email protected]");

        boolean bol = user.insert();
        System.out.println("插入是否成功:"+bol);
        System.out.println("主键:"+user.getId());
    }

}

你可能感兴趣的:(MP的主键自增策略)