Mybatis-Plus(二)进阶篇

书接上文,讲解完MP的基本知识,我们已经可以独立完成增删改查的功能,本文将讲解一些MP更加深入的知识,让我们开始吧

主键策略

简单来说就是我们该用哪种方式生成主键,这里的主键策略和IdType相关,每一种IdType代表着一种主键生成策略
示例:@TableId(value = “id”, type = IdType.INPUT)
全部的IdType如下:

描述 备注
AUTO 数据库 ID 自增 AUTO自动增长策略,这个配合数据库使用,Mysql可以,但是Oracle不行
NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT) 在 application.properties 中添加如下配置:mybatis-plus.global-config.db-config.id-type=auto
INPUT insert 前自行 set 主键值 INPUT进行自己传递主键即可,进行插入工作,但在插入之前一定要检查数据库是否已经存在了该主键Mybatis-Plus 内置了5个数据库主键序列(如果内置支持不满足你的需求,可实现 IKeyGenerator 接口来进行扩展,下面会详细讲解)
ASSIGN_ID 分配 ID(主键类型为 Number(Long 和 Integer)或 String),使用接口IdentifierGenerator的方法nextId(默认实现类为DefaultIdentifierGenerator雪花算法) 使用雪花算法自动生成主键 ID(雪花算法自行了解)
ASSIGN_UUID 分配 UUID,主键类型为 String,使用接口IdentifierGenerator的方法nextUUID(默认 default 方法) 自动生成不含中划线的 UUID 作为主键

接下来我们分别测试一下吧

测试主键策略-AUTO

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @Test
    public void testMPKeyGenerator() {
   
        User user = new User();
        user.setName("张三");
        user.setEmail("[email protected]");
        user.setAge(12);
        user.setCreateTime(LocalDateTime.now());

        boolean save = userService.save(user);
        System.out.println(save);
    }

测试结果:主键ID+1

测试主键策略-NONE

application.properties

mybatis-plus:
	global-config:
		db-config:
			id-type: auto
	@TableId(value = "id", type = IdType.NONE)
    private Long id;

测试结果:主键ID+1
注意:注解里等于跟随全局,下面是TableId代码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({
   ElementType.FIELD, ElementType.ANNOTATION_TYPE})
public @interface TableId {
   
    String value() default "";

    IdType type() default IdType.NONE;
}

测试主键策略-INPUT

    @TableId(value = "id", type = IdType.INPUT)
    private Long id;
    @Test
    public void testMPKeyGenerator() {
   
        User user = new User();
        user.setId(100l);
        user.setName("张三");
        user.setEmail("[email protected]");
        user.setAge(12);
        user.setCreateTime(LocalDateTime.now());

        boolean save = userService.save(user);
        System.out.println(save);
    }

注意:如果在input策略下不自己设置主键值,并且数据库主键不是自动增长就会报错


虽然MP内置了5种5个数据库主键序列:

  • DB2KeyGenerator
  • H2KeyGenerator
  • KingbaseKeyGenerator
  • OracleKeyGenerator
  • PostgreKeyGenerator

我们可以这样使用(由于作者只有MySQL数据库,所以这里代码参照官方):
实体类

@KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = String.class)
public class YourEntity {
   

    @TableId(value = "ID_STR", type = IdType.INPUT)
    private String idStr;

}

配置类

@Configuration
public class MPConfig {
   
    @Bean
    public IKeyGenerator keyGenerator() 

你可能感兴趣的:(后端,mybatis,java,数据库,mybatis-plus)