java jpa saveall方法优化_JPA批量保存saveAll的问题
今天使用了JPA的saveAll方法批量保存一千多条数据的问题,但是发现日志打印却是一条一条的insert语句。
查看saveAll的源码,发现里面是使用了一个for循环然后一条条的执行save方法....
好吧,手动写一个批量执行的方法
@Component
public class DbUtils {
private static EntityManager entityManager;
public static final int BATCH_SIZE = 1000;
public static EntityManager getEntityManager() {
if (entityManager == null) {
entityManager = SpringUtils.getBean(EntityManager.class);
}
return entityManager;
}
public static void setEntityManager(EntityManager entityManager) {
//DbUtils.entityManager = entityManager;
}
public static void batchExecute(String sql, List params, Integer batchSize){
if (batchSize == null) {
batchSize = BATCH_SIZE;
}
if(params.size() == 0){
return;
}
Connection conn = null;
Session session = null;
PreparedStatement stmt = null;
try {
session = (Session) getEntityManager().getDelegate();
SessionFactoryImpl sf = (SessionFactoryImpl)session.getSessionFactory();
conn = sf.getJdbcServices().getBootstrapJdbcConnectionAccess().obtainConnection();
stmt = conn.prepareStatement(sql);
conn.setAutoCommit(false);
int index = 0;
for (Object[] objects : params) {
for(int i=0 ; i
stmt.setObject(i+1, objects[i]);
}
stmt.addBatch();
index++;
if (index % batchSize == 0){
stmt.executeBatch();
stmt.clearBatch();
}
}
if (index % batchSize != 0){
stmt.executeBatch();
stmt.clearBatch();
}
conn.commit();
}catch (Exception e){
throw new RuntimeException(e.getMessage());
}finally {
try {
stmt.close();
conn.close();
}catch (SQLException e){
throw new RuntimeException(e.getMessage());
}
}
}
}
java jpa saveall方法优化_JPA批量保存saveAll的问题相关推荐
- java jpa saveall方法优化_JPA批量插入(saveAll)
有时候要从第三方导入数据,一般量都比较大,除了方法用异步线程@Async之外,如果每条记录都调用一次save显然对数据库压力很大.可以使用JPA的批量保存方法saveAll(Iterable enti ...
- java jpa saveall方法优化_关于JPA saveAll()的一个小坑
LBruce 你好: 其实想要解决 saveAll 批量插入慢的问题,我们需要两个步骤的操作.第一个步骤是非常简单的,因为 JPA 支持批量插入,所以,你可以设置一个批次执行多少条数据写入.例如,我们 ...
- java jpa性能_[Java Performance] 数据库性能最佳实践 - JPA和读写优化
数据库性能最佳实践 当应用须要连接数据库时.那么应用的性能就可能收到数据库性能的影响. 比方当数据库的I/O能力存在限制,或者因缺失了索引而导致运行的SQL语句须要对整张表进行遍历.对于这些问题.只相 ...
- jpa批量保存,事务没提交_在事务外自动保存托管JPA实体
jpa批量保存,事务没提交 Spring中的存储库和事务并存. Spring中的所有数据库访问都应在事务内运行,并且通常在某个地方使用@Transactional来强制执行此操作. 但是,这并不总是必 ...
- 第四天学习Java的笔记(方法入门,编译器优化)
第三章 方法入门 方法:就是将一个功能抽取出来,将代码单独定义在一个大括号内,形成一个单独的功能.当我们需要这个功能的时候,就可以去调用,这样即实现了代码的复用性,也解决了代码冗余的现象. Demo1 ...
- word存为html图片有两个,如何批量保存Word图片?另存为Word多个图片的方法
如何批量保存Word图片?很多用户在发送Word文档的时候都没有附上原图的习惯,导致接收方需要使用Word文档中的图片的时候还需要一个个另存为下载,当然,这是不明智的行为,如果你曾经历过这些,一定想知 ...
- 微信公众号文章批量保存到本地的方法
其他不多说,直接入主题,目前比较常见的保存微信文章的方法有以下几种,简要分析如下: 1. 手动保存 微信登陆电脑客户端,用自带浏览器打开微信公众号文章,然后选择,复制,粘贴到Word里,进行保存. 这 ...
- java网页保存pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法
JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2017-02-27 09:58:50 | 160 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客 ...
- java 网页保存为pdf文件怎么打开方式_js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法...
js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2020-8-12| 复制链接 借助iText这个Java库,我们可以将HTML文件保存为图片文件进而转换成P ...
最新文章
- CentOS7 network
- 你也可以玩转Skype -- 基于Skype API开发外壳程序入门
- 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记三
- 本地安全沙箱最快解决办法
- Substring Removal
- 淘宝跨域获取Cookie分析
- C++20 即将于年底发布,C++ 23 提上日程!
- Debouncing circuit(消抖电路)
- LINUX重新编译BIN固件,固件编译
- wpsa3版面怎么变成a4、排版不变_怎么把wpsa3转变成a4
- 5G消息富媒体最新形态
- 综合布线系统 (布线系统的一种)
- 【系统分析师之路】系统分析师必知必会(需求分析篇)
- 然后是几点--编程题
- ecstore2.0数据库词典
- 身边策神 振江 刘盛义等等
- android root权限破解分析
- 停车场编码C语言,停车场系统部分C语言代码
- 回车和换行,以及不同软件对敲回车键的操作
- 法国 计算机 英语ppt,介绍法国的ppt(英语).ppt