1 回答
TA贡献1824条经验 获得超6个赞
Oracle 驱动程序似乎不支持从“多行插入”返回生成的键。
因此,“不修改应用程序代码”可能是不可能的。
仅供参考,如果您切换到“批量插入”,它可能会起作用。
当插入大量行时它也表现得更好。
int batchSize = 1000;
try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
YourMapper mapper = sqlSession.getMapper(YourMapper.class);
int size = serviceCodeList.size();
for (int i = 0; i < size;) {
mapper.insertServiceCode(serviceCodeList.get(i));
i++;
if (i % batchSize == 0 || i == size) {
sqlSession.flushStatements();
sqlSession.clearCache();
}
}
sqlSession.commit();
}
映射器声明很简单。
<insert id="insertServiceCode" useGeneratedKeys="true"
keyColumn="code" keyProperty="code">
insert into service_code (
code,
serv_info_seq_id,
name,
default_key_type,
cre_date,
creator,
description,
state
) values (
service_code_seq.nextval,
#{item.servInfoSeqId},
#{item.name},
#{item.defaultKeyType},
systimestamp,
#{item.creator},
#{item.description},
0
)
</insert>
添加回答
举报