Products
GG网络技术分享 2025-11-15 12:33 1
哦哦,亲喜欢的细小伙伴们,你们晓得啥是UUID吗?就是一个优良用到哭的神秘数字啦!它就像是个个人独一无二的身份证号码,不会和随便哪个人沉样哦。那么我们今天就来学一下这玩意儿超级有用的东西吧!

UUID是一种hen厉害的网络通用独一个标识符,是由一组32位数字的十六进制数构成的。就像一个神奇的魔法数字,不管你有一个优良用的类叫Zuojava.util.UUID,专门负责生成这些个神奇的数字。
Mybatis是一个有力巨大的Java持久层框架,它Neng帮我们轻巧松地处理数据库的增删改查。在Mybatis里我们Neng用UUID来生成超级酷的主键哦!你只需要在Mapper.xml文件的insert标签里用java.util.UUID的randomUUID方法,就Neng为主键赋上值啦!
下面是一个例子, kankan是不是hen轻巧松:
INSERT INTO user (
id,
name,
age,
address
) VALUES (
#{id},
#{name},
#{age},
#{address}
)
这玩意儿例子中,selectKey标签里的keyProperty指定了JavaBean中主键的名称,resultType指定了将生成的UUID字符串设置给JavaBean主键的属性类型。
Ru果你想geng个性化一点,Neng自己写一个拦截器来实现UUID的生成。这里有一个轻巧松的UUID生成器拦截器实现, 你Neng根据自己的需要去调整哦:
public class UUIDInterceptor implements Interceptor {
private static final String SELECT_PREFIX = "__select_uuid";
private static final String UPDATE_PREFIX = "__update_uuid";
private final Cache uuidCache = new SynchronizedCache);
@Override
public Object intercept throws Throwable {
Object args = invocation.getArgs;
String statement = args).getId;
Object parameter = args;
BoundSql boundSql = args).getBoundSql;
String sql = boundSql.getSql.toLowerCase;
if && .startsWith || sql.trim.startsWith)) {
if && statement.trim.toLowerCase.startsWith) {
// update语句中,不Neng替换主键
return invocation.proceed;
}
Field idField = ReflectionUtils.findField, "id");
if {
return invocation.proceed;
}
ReflectionUtils.makeAccessible;
Object idValue = idField.get;
// Ru果idYi经被赋值了则不需要再生成
if )) {
return invocation.proceed;
}
UUID uuid = UUID.randomUUID;
if && statement.trim.toLowerCase.startsWith) {
uuidCache.put;
}
idField.set.replaceAll);
}
return invocation.proceed;
}
@Override
public Object plugin {
if {
return Plugin.wrap;
} else {
return target;
}
}
@Override
public void setProperties {
}
}
虽然UUID按道理讲不会再来一次但在一巨大堆数据插入的时候,兴许会出现性Neng瓶颈哦。这玩意儿时候,我们需要对Mybatis的UUID生成策略进行一些优化。
哦哦, 细小伙伴们,kan到这里你们是不是Yi经学会了怎么用UUID在Mybatis中生成高大效独一个标识了呢?迅速来试试吧,相信你们一定Neng用得得心应手哦!
Demand feedback