在springboot环境下,使用sql server数据库和jdk 1.8版本时,我们对比了三种批量插入数据的方式。以下是对这三种方法的详细分析和结论:
对于少量数据的插入,建议使用反复执行单条插入语句的方式,因为这种方法简单易用。对于大量数据的插入,推荐使用批处理执行的方式。在我的测试环境中,插入20条左右的数据时,两种方法的耗时都在百毫秒级别,但批处理方式在处理大量数据时表现更好。无论何时,都不建议使用XML拼接SQL的方式。
这种方法的实现非常简单,适合少量数据的插入。使用tk.Mapper插件时,代码量极少,仅需以下几行代码:
@Transactional
public void add1(List<item> itemList) {
itemList.forEach(itemMapper::insertSelective);
}优点:
缺点:
这种方法涉及到大段的XML和SQL语句,需要手动拼接SQL语句,容易出错且工作效率低。此外,在插入大量数据时,可能会因为SQL语句过长而报错。
<insert>
INSERT INTO tb_item VALUES
<foreach>
(newId(),#{item.uniqueCode},#{item.projectId},#{item.name},#{item.type},#{item.packageUnique},
#{item.isPackage},#{item.factoryId},#{item.projectName},#{item.spec},#{item.length},#{item.weight},
#{item.material},#{item.setupPosition},#{item.areaPosition},#{item.bottomHeight},#{item.topHeight},
#{item.serialNumber},#{item.createTime}
</foreach>
</insert>优点:
缺点:
批处理执行适合大量数据的插入,效率高且实现相对简单。
@Service
public class ItemService {
@Autowired
private ItemMapper itemMapper;
@Autowired
private SqlSessionFactory sqlSessionFactory;
// 批处理
@Transactional
public void add(List<item> itemList) {
SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
ItemMapper mapper = session.getMapper(ItemMapper.class);
for (int i = 0; i < itemList.size(); i++) {
mapper.insertSelective(itemList.get(i));
if (i % 1000 == 0) {
session.commit();
}
}
session.commit();
session.close();
}
}优点:
缺点:
在测试中,插入10条和25条数据时,三种方法的耗时都在百毫秒级别,但XML拼接SQL的方式在插入500条和1000条数据时报错,提示SQL语句过长。
通过以上对比和分析,可以根据具体需求选择最适合的插入方式。

以上就是MyBatis 批量插入的 3 种方式!还有谁不会?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号