Mybatis-Flex核心功能之@Id

1、是什么?

在 Entity 类中,MyBatis-Flex 是使用 @Id 注解来标识主键的

2、怎么玩?

public @interface Id {

    /**
     * ID 生成策略,默认为 none
     *
     * @return 生成策略
     */
    KeyType keyType() default KeyType.None;

    /**
     * 若 keyType 类型是 sequence, value 则代表的是
     * sequence 序列的 sql 内容
     * 例如:select SEQ_USER_ID.nextval as id from dual
     *
     * 若 keyType 是 Generator,value 则代表的是使用的那个 keyGenerator 的名称
     *
     */
    String value() default "";


    /**
     * sequence 序列执行顺序
     * 是在 entity 数据插入之前执行,还是之后执行,之后执行的一般是数据主动生成的 id
     *
     * @return 执行之前还是之后
     */
    boolean before() default true;
}

image

3、KeyType属性

@Id(keyType = KeyType.Generator, value = "flexId")
//    @Id(keyType = KeyType.Generator, value = "uuid")
    private Integer id;

image

4、设置全局主键生成器策略

// 设置全局主键生成策略
FlexGlobalConfig.KeyConfig keyConfig = new FlexGlobalConfig.KeyConfig();
keyConfig.setKeyType(KeyType.Generator);
keyConfig.setValue(KeyGenerators.flexId);
keyConfig.setBefore(true);
flexGlobalConfig.setKeyConfig(keyConfig);

值得注意的是,全局主键生成器的策略和局部配置@Id是不冲突的,当配置的局部@Id策略,以局部配置的优先

5、自定义主键生成器

  • 定义
package com.ly.keygen;

import com.mybatisflex.core.keygen.IKeyGenerator;

import java.security.SecureRandom;

/**
 * 自定义id生成器
 *
 * @author ly (个人博客:https://www.cnblogs.com/ybbit)
 * @date 2023-10-12  23:02
 * @tags 喜欢就去努力的争取
 */
public class HashCodeKeyGenerator implements IKeyGenerator {
    @Override
    public Object generate(Object entity, String keyColumn) {
        return entity.hashCode() + new SecureRandom().nextInt();
    }
}
  • 注册
// 设置自定义主键生成策略
        KeyGeneratorFactory.register("hashCode",new HashCodeKeyGenerator());

image

6、覆盖内置主键生成器

// 覆盖内置主键生成器
        MyUUIDKeyGenerator myUUIDKeyGenerator = new MyUUIDKeyGenerator();
        KeyGeneratorFactory.register(KeyGenerators.uuid,myUUIDKeyGenerator);
posted @   我也有梦想呀  阅读(555)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示