自定义主键
2024/6/21大约 2 分钟
easy-query提供了PrimaryKeyGenerator接口该接口可以由用户自行实现,具体功能就是可以自动对当前对象的主键进行赋值,比如你可以实现一个uuid的或者雪花id的 2.0.43^
PrimaryKeyGenerator
自定义主键目前支持使用PrimaryKeyGenerator或者 拦截器
| 方法 | 参数 | 描述 |
|---|---|---|
| getPrimaryKey | 无 | 用来返回一个主键 |
| setPrimaryKey | 对象,key的columnMetadata | 用来对对象进行设置主键(默认已经实现一个通用方法) |
执行顺序在insert的方法调用executeRows后将先执行对象的PrimaryKeyGenerator.setPrimaryKey然后执行拦截器,所以如果您不需要可以在拦截器里面对其进行从新设置或者清空
如何使用
- 当前对象必须是数据库对象
@Table - 当前属性必须是主键
@Column(primaryKet=true) - 当前属性不可以是生成列
@Column(generateKey=true)不可以generateKey=true - 当前属性添加
@Column(primaryKet=true,primaryKeyGenerator=UUIDPrimaryKeyGenerator.class) - 如果有多主键那么也是一样的用法
spring-boot
`@Component`将对应的`PrimaryKeyGenerator`注入即可控制台
QueryRuntimeContext runtimeContext = easyQuery.getRuntimeContext();
QueryConfiguration configuration = runtimeContext.getQueryConfiguration();
configuration.applyPrimaryKeyGenerator(new MyTestPrimaryKeyGenerator());UUIDPrimaryKeyGenerator
如何实现一个UUID的主键生成器
@Component //如果您是springboot
public class UUIDPrimaryKeyGenerator implements PrimaryKeyGenerator {
@Override
public Serializable getPrimaryKey() {
return UUID.randomUUID().toString().replaceAll("-","");
}
// /**
// * 如果需要判断之前是否有值
// * @param entity
// * @param columnMetadata
// */
// @Override
// public void setPrimaryKey(Object entity, ColumnMetadata columnMetadata) {
// Object oldValue = columnMetadata.getGetterCaller().apply(entity);
// if(oldValue == null)
// {
// PrimaryKeyGenerator.super.setPrimaryKey(entity,columnMetadata);
// }
// }
}
@Data
@Table("t_test")
public class UUIDPrimaryKey {
@Column(primaryKey = true,primaryKeyGenerator = UUIDPrimaryKeyGenerator.class)
private String id;
}雪花id
//初始化
Snowflake snowflake = IdUtil.createSnowflake(workerId,dataCenterId)
@Component //如果您是springboot
public class SnowflakePrimaryKeyGenerator implements PrimaryKeyGenerator {
@Override
public Serializable getPrimaryKey() {
return String.valueOf(snowflake.nextId());//因为long类型在js中会出现精度丢失
}
// /**
// * 如果需要判断之前是否有值
// * @param entity
// * @param columnMetadata
// */
// @Override
// public void setPrimaryKey(Object entity, ColumnMetadata columnMetadata) {
// Object oldValue = columnMetadata.getGetterCaller().apply(entity);
// if(oldValue == ull)
// {
// PrimaryKeyGenerator.super.setPrimaryKey(entity,columnMetadata);
// }
// }
}
@Data
@Table("t_test")
public class SnowflakePrimaryKey {
@Column(primaryKey = true,primaryKeyGenerator = SnowflakePrimaryKeyGenerator.class)
private String id;
}相关搜索
自定义主键 雪花id 自定义id