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;
}
3、KeyType属性
@Id(keyType = KeyType.Generator, value = "flexId")
// @Id(keyType = KeyType.Generator, value = "uuid")
private Integer id;
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());
6、覆盖内置主键生成器
// 覆盖内置主键生成器
MyUUIDKeyGenerator myUUIDKeyGenerator = new MyUUIDKeyGenerator();
KeyGeneratorFactory.register(KeyGenerators.uuid,myUUIDKeyGenerator);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构