<---------------------java--------------------->
List<Map<String,Object>> dataList = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
int bId = 0;
Map<String, Object> data = new HashMap<String, Object>();
data.put("aId",i);
data.put("bId",bId);
data.put("comment","aaa");
dataList.add(data);
for (int j = 0; j < 50; i++) {
bId++;
data = new HashMap<String, Object>();
data.put("aId",i);
data.put("bId",bId );
data.put("comment","bbb");
dataList.add(data);
}
}
int realInsertCount = 0;
double allCount = dataList.size();
double lines = 1000;
double insertCount = Math.ceil(allCount / lines);
for (int i = 0; i < insertCount; i++) {
int startIndex = i * 1000;
int endIndex = (int) ((i + 1) * 1000 > allCount ? allCount : (i + 1) * 1000);
realInsertCount += testMapper.insertDataList(dataList .subList(startIndex, endIndex));
}
<----------------------mybatis.xml--------------------->
<insert id="insertDataList" parameterType="java.util.List">
insert into TEST_ABC(a_id, b_id, comment)
values
<foreach collection="list" item="model" index="index" separator=",">
(#{model.aId}, #{model.bId}, #{model.comment})
</foreach>
</insert>
<---------------------------table--------------------------->
CREATE TABLE `TEST_ABC` (
`a_id` int(11) NOT NULL,
`b_id` int(11) NOT NULL,
`comment` varchar(300) DEFAULT NULL,
PRIMARY KEY (`a_id`,`b_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
为什么这个代码执行的时候会报Duplicate entry '0-0' for key 'PRIMARY'这个错误呢
虽然报错,但不影响数据的插入(遍历出来的数据的条数与插入后表中的条数相等)
※执行前确认过"TEST_ABC"是个刚创建的空表,没有任何数据※
主键值存在冲突。主键值是不是设置为自动递增的,还是手动插入的。
你是不是一张表中有多个主键
你确认下你启动插入之前数据库是不是已经有0-0这个主键了
你数据库的主键是a_id和b_id组成的,你的第4行和第11行的循环体中插入了a_id和b_id都一样的数据,所以报错,但是不影响最后的整体数据