自动生成用户名 :模版 游客+随机8位字符
方案1:
定义一个用户名生成规则,包括用户名的长度、字符集和组成规则。
生成随机字符串作为用户名。
检查生成的用户名是否已存在,如果存在则重新生成。
将生成的用户名保存到数据库或其他持久化存储中。
https://blog.51cto.com/u_16175441/6996703
/**
* @Author:xsr
* @Date:2023/9/23 21:37
* 用户名生成器
*/
@Component
public class usernameGenerator {
public static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//可选字符
public static final int USERNAME_LENGTH = 8;//用户名长度
public static final String USERNAME_PREFIX="游客";//用户名前缀
public static final String USERNAME_COLUMN_IN_DATABASE ="username";//在数据库中用户名的列名
private static final UserMapper userMapper=(UserMapper) SpringContextUtils.getBean(UserMapper.class);
//随机生成字符串
private static String generateRandomString(){
//根据 CHARACTERS ,随机生成length长度的字符串
Random random = new Random();
StringBuilder sb = new StringBuilder(USERNAME_LENGTH);
for (int i = 0; i < usernameGenerator.USERNAME_LENGTH; i++) {
int randomIndex = random.nextInt(CHARACTERS.length());
sb.append(CHARACTERS.charAt(randomIndex));
}
sb.insert(0,USERNAME_PREFIX);
return sb.toString();
}
//该用户名是否存在
private static boolean isUsernameExists(String userName){
QueryWrapper<User> userWrapper = new QueryWrapper<>();
userWrapper.eq(USERNAME_COLUMN_IN_DATABASE,userName);
return userMapper.exists(userWrapper);
}
public static String generateUniqueUsername(){
String s = generateRandomString();
while (isUsernameExists(s)){
s=generateRandomString();
}
return s;
}
}
遇到问题:springboot 普通类怎么使用DAO
/**
* @Author:xsr
* @Date:2023/9/23 22:33
* 全局工具包,可获取springboot管理的bean (不装配)
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {
/**
*spring 上下文对象
*/
private static ApplicationContext applicationContext;
/** setApplicationContext
* 重写setApplicationContext方法,将对象赋值
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtils.applicationContext =applicationContext;
}
public static ApplicationContext getApplicationContext() {
return SpringContextUtils.applicationContext;
}
/** getBean
* 根据名字获取bean
*/
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
/** getBean
* @author xsr
* 根据类获取bean
*/
public static <T> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
}
Autowired自动装配(但不能自动装配static的)
方案3:
配合RandomStringUtils等工具包
https://stackoverflow.com/questions/9581097/how-to-automatically-generate-the-login-id-for-an-new-user-in-java
方案4:
hutool的UUID雪花算法,可以分布式唯一随机UUID(高性能)