1
0

fix: 增加雪花ID生成的实现

This commit is contained in:
2025-08-14 16:39:59 +08:00
parent 33e11818c5
commit 222bb1e416
3 changed files with 115 additions and 33 deletions

View File

@@ -59,131 +59,131 @@ public class Query {
private Map<String, Between> between;
private Map<String, Between> notBetween;
public java.util.List<String> getNullEqual() {
public List<String> getNullEqual() {
return nullEqual;
}
public void setNullEqual(java.util.List<String> nullEqual) {
public void setNullEqual(List<String> nullEqual) {
this.nullEqual = nullEqual;
}
public java.util.List<String> getNotNullEqual() {
public List<String> getNotNullEqual() {
return notNullEqual;
}
public void setNotNullEqual(java.util.List<String> notNullEqual) {
public void setNotNullEqual(List<String> notNullEqual) {
this.notNullEqual = notNullEqual;
}
public java.util.List<String> getEmpty() {
public List<String> getEmpty() {
return empty;
}
public void setEmpty(java.util.List<String> empty) {
public void setEmpty(List<String> empty) {
this.empty = empty;
}
public java.util.List<String> getNotEmpty() {
public List<String> getNotEmpty() {
return notEmpty;
}
public void setNotEmpty(java.util.List<String> notEmpty) {
public void setNotEmpty(List<String> notEmpty) {
this.notEmpty = notEmpty;
}
public java.util.Map<String, Object> getEqual() {
public Map<String, Object> getEqual() {
return equal;
}
public void setEqual(java.util.Map<String, Object> equal) {
public void setEqual(Map<String, Object> equal) {
this.equal = equal;
}
public java.util.Map<String, Object> getNotEqual() {
public Map<String, Object> getNotEqual() {
return notEqual;
}
public void setNotEqual(java.util.Map<String, Object> notEqual) {
public void setNotEqual(Map<String, Object> notEqual) {
this.notEqual = notEqual;
}
public java.util.Map<String, String> getLike() {
public Map<String, String> getLike() {
return like;
}
public void setLike(java.util.Map<String, String> like) {
public void setLike(Map<String, String> like) {
this.like = like;
}
public java.util.Map<String, String> getNotLike() {
public Map<String, String> getNotLike() {
return notLike;
}
public void setNotLike(java.util.Map<String, String> notLike) {
public void setNotLike(Map<String, String> notLike) {
this.notLike = notLike;
}
public java.util.Map<String, Comparable<Object>> getGreat() {
public Map<String, Comparable<Object>> getGreat() {
return great;
}
public void setGreat(java.util.Map<String, Comparable<Object>> great) {
public void setGreat(Map<String, Comparable<Object>> great) {
this.great = great;
}
public java.util.Map<String, Comparable<Object>> getLess() {
public Map<String, Comparable<Object>> getLess() {
return less;
}
public void setLess(java.util.Map<String, Comparable<Object>> less) {
public void setLess(Map<String, Comparable<Object>> less) {
this.less = less;
}
public java.util.Map<String, Comparable<Object>> getGreatEqual() {
public Map<String, Comparable<Object>> getGreatEqual() {
return greatEqual;
}
public void setGreatEqual(java.util.Map<String, Comparable<Object>> greatEqual) {
public void setGreatEqual(Map<String, Comparable<Object>> greatEqual) {
this.greatEqual = greatEqual;
}
public java.util.Map<String, Comparable<Object>> getLessEqual() {
public Map<String, Comparable<Object>> getLessEqual() {
return lessEqual;
}
public void setLessEqual(java.util.Map<String, Comparable<Object>> lessEqual) {
public void setLessEqual(Map<String, Comparable<Object>> lessEqual) {
this.lessEqual = lessEqual;
}
public java.util.Map<String, java.util.List<Object>> getIn() {
public Map<String, List<Object>> getIn() {
return in;
}
public void setIn(java.util.Map<String, java.util.List<Object>> in) {
public void setIn(Map<String, List<Object>> in) {
this.in = in;
}
public java.util.Map<String, java.util.List<Object>> getNotIn() {
public Map<String, List<Object>> getNotIn() {
return notIn;
}
public void setNotIn(java.util.Map<String, java.util.List<Object>> notIn) {
public void setNotIn(Map<String, List<Object>> notIn) {
this.notIn = notIn;
}
public java.util.Map<String, com.lanyuanxiaoyao.service.template.controller.Query.Queryable.Between> getBetween() {
public Map<String, Between> getBetween() {
return between;
}
public void setBetween(java.util.Map<String, com.lanyuanxiaoyao.service.template.controller.Query.Queryable.Between> between) {
public void setBetween(Map<String, Between> between) {
this.between = between;
}
public java.util.Map<String, com.lanyuanxiaoyao.service.template.controller.Query.Queryable.Between> getNotBetween() {
public Map<String, Between> getNotBetween() {
return notBetween;
}
public void setNotBetween(java.util.Map<String, com.lanyuanxiaoyao.service.template.controller.Query.Queryable.Between> notBetween) {
public void setNotBetween(Map<String, Between> notBetween) {
this.notBetween = notBetween;
}

View File

@@ -14,7 +14,7 @@ public class IdOnlyEntity {
@Comment("记录唯一标记")
@Id
@GeneratedValue(generator = "snowflake")
@GenericGenerator(name = "snowflake", strategy = "com.lanyuanxiaoyao.service.ai.web.configuration.SnowflakeIdGenerator")
@GenericGenerator(name = "snowflake", strategy = "com.lanyuanxiaoyao.service.template.helper.SnowflakeIdGenerator")
private Long id;
public Long getId() {

View File

@@ -0,0 +1,82 @@
package com.lanyuanxiaoyao.service.template.helper;
import java.io.Serializable;
import java.time.Instant;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
public class SnowflakeIdGenerator implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) {
try {
return Snowflake.next();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static class Snowflake {
/**
* 起始的时间戳
*/
private final static long START_TIMESTAMP = 1;
/**
* 序列号占用的位数
*/
private final static long SEQUENCE_BIT = 11;
/**
* 序列号最大值
*/
private final static long MAX_SEQUENCE_BIT = ~(-1 << SEQUENCE_BIT);
/**
* 时间戳值向左位移
*/
private final static long TIMESTAMP_OFFSET = SEQUENCE_BIT;
/**
* 序列号
*/
private static long sequence = 0;
/**
* 上一次时间戳
*/
private static long lastTimestamp = -1;
public static synchronized long next() {
long currentTimestamp = nowTimestamp();
if (currentTimestamp < lastTimestamp) {
throw new RuntimeException("Clock have moved backwards.");
}
if (currentTimestamp == lastTimestamp) {
// 相同毫秒内, 序列号自增
sequence = (sequence + 1) & MAX_SEQUENCE_BIT;
// 同一毫秒的序列数已经达到最大
if (sequence == 0) {
currentTimestamp = nextTimestamp();
}
} else {
// 不同毫秒内, 序列号置为0
sequence = 0;
}
lastTimestamp = currentTimestamp;
return (currentTimestamp - START_TIMESTAMP) << TIMESTAMP_OFFSET | sequence;
}
private static long nextTimestamp() {
long milli = nowTimestamp();
while (milli <= lastTimestamp) {
milli = nowTimestamp();
}
return milli;
}
private static long nowTimestamp() {
return Instant.now().toEpochMilli();
}
}
}