最近公司要做一个项目,生成报告时每个报告有一个编码,不能重复。解决方案订为提前在数据库插入一百万条数据,每次随机取一个,然后更改状态,标记为已使用。
第一步先在数据库插入百万条不重复的数据。
代码如下
Controller
@RequestMapping("/insetData")
@ResponseBody
public String insetData(){
service.insetData();
return null;
}
ServiceImpl
/**
* 数据库插入一百万条数据
*
* @return
*/
@Override
public void insetData() {
Set<String> set = new HashSet<String>();
RainbowCodeModel model = new RainbowCodeModel();
while (set.size() < 1000000) {
String cardNumber = getCard();//调用生成随机数的方法
set.add(cardNumber);
}
List<String> a = new ArrayList<String>(set);
List<RainbowCodeModel> list = new ArrayList<RainbowCodeModel>();
for (int i = 0; i < a.size(); i++) {
model.setRainbowCode(a.get(i));
list.add(model);
}
mapper.insetData(list);
}
//生成随机数
public static String getCard() {
Random rand = new Random();//生成随机数
String cardNnumer = "";
for (int a = 0; a < 12; a++) {
cardNnumer += rand.nextInt(10);//生成12位数字
}
return "2" + cardNnumer;
}
mapper.xml
<insert id="insetData" parameterType="java.util.List">
INSERT INTO tb_ebs_rainbow_code (rainbow_code)
values
<foreach collection="list&