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("123@qq.com");
        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("123@qq.com");
        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() 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小赵OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值