背景:
给了我一个需求,由于某些问题原因,需要给属性和数据添加一个code字段,这是给我发的消息
这两个要求其实是同一个需求,就是在创建对象的时候塞入一个unique的code嘛,听起来很简单吧,但是实现起来其实还是有点意思的。
实现方法:
我们用第一个需求举例解决方法吧
1、利用数据库自增属性(推荐)
这种方法最为推荐,这种方式最容易控制唯一性,并且可以保证生成的是4为纯数字
实现步骤:
1.单独创建一张单表
CREATE TABLE unique_codes (id INT AUTO_INCREMENT PRIMARY KEY,code VARCHAR(8) NOT NULL UNIQUE
);
2.在Java中定义出这个类
定义出实体类pojo,mapper,service
这部分代码就不写了,我用的mybatisPlus,但是只要是能和数据库交互能够insert数据就行。
3.在service层写生成方法
这样根据数据库id生成的code就可以保证四位数字且保证唯一了。
@Service
public class UniqueCodeService {@Autowiredprivate UniqueCodeMapper uniqueCodeMapper;@Transactionalpublic String generateUniqueCode() {UniqueCode uniqueCode = new UniqueCode();uniqueCode = uniqueCodeMapper.save(uniqueCode);String code = "SXBM" + String.format("%04d", uniqueCode.getId());uniqueCode.setCode(code);uniqueCodeMapper.save(uniqueCode);return code;}
}
2、使用set集合
思路:这个方法就是首先我们需要使用Java的Random类生成一个四位数的随机数,然后我们需要检查这个随机数是否已经存在于之前生成的随机数中,如果已经存在,则重新生成直到生成一个唯一的随机数。
import java.util.HashSet;
import java.util.Random;
import java.util.Set;public class UniqueRandomNumberGenerator {private static final int MIN = 1000; // 四位数的最小值private static final int MAX = 9999; // 四位数的最大值private Set<Integer> generatedNumbers = new HashSet<>();private Random random = new Random();public int generateUniqueRandomNumber() {while (true) {int randomNumber = random.nextInt((MAX - MIN) + 1) + MIN; // 生成1000到9999之间的随机数if (!generatedNumbers.contains(randomNumber)) {generatedNumbers.add(randomNumber);return randomNumber;}}}public static void main(String[] args) {UniqueRandomNumberGenerator generator = new UniqueRandomNumberGenerator();// 生成10个唯一的四位随机数for (int i = 0; i < 10; i++) {int uniqueRandomNumber = generator.generateUniqueRandomNumber();System.out.println("Generated Unique Random Number: " + uniqueRandomNumber);}}
}
代码解释
- 常量定义:
MIN
和MAX
分别定义了四位数的最小值和最大值。
- 成员变量:
generatedNumbers
:这是一个Set
,用于存储所有已经生成的四位随机数。random
:这是一个Random
对象,用于生成随机数。
generateUniqueRandomNumber
方法:- 使用
while(true)
循环不断生成新的四位随机数,直到生成一个不在generatedNumbers
集合中的随机数。 - 使用
Set
的contains
方法来检查随机数是否已经存在。 - 如果生成的随机数是唯一的,则将其添加到
generatedNumbers
集合,并返回该随机数。
- 使用
main
方法:- 创建
UniqueRandomNumberGenerator
对象。 - 循环调用
generateUniqueRandomNumber
方法生成并打印10个唯一的四位随机数
- 创建