gpt4 book ai didi

java - 使用 Hibernate 更新数据库表的更快方法(Java 8 减少?)

转载 作者:行者123 更新时间:2023-11-29 07:00:14 24 4
gpt4 key购买 nike

我正在开发一个使用 Hibernate 作为 ORM 在 Spring Boot 中开发的监控工具。

我需要比较表中的每一行(已保存的已发送消息行),并查看 MailId (唯一)是否已收到反馈(状态:OPENEDBOUNCEDDELIVERED...)是或否。

我通过从网络文件夹读取 csv 文件来获取反馈。 CSV 解析和读取文件的速度非常快,但是我的数据库的更新非常慢。我的算法不是很有效,因为我循环遍历一个可以包含数十万个对象的列表并在我的表中查找。

这是通过更新“目标”对象(表数据库中的行)来更新我的表的方法

@Override
public void updateTargetObjectFoo() throws CSVProcessingException, FileNotFoundException {
// Here I make a call to performProcessing method which reads files on a folder and parse them to JavaObjects and I map them in a feedBackList of type Foo
List<Foo> feedBackList = performProcessing(env.getProperty("foo_in"), EXPECTED_HEADER_FIELDS_STATUS, Foo.class, ".LETTERS.STATUS.");
for (Foo foo: feedBackList) {
//findByKey does a simple Select in mySql where MailId = foo.getMailId()
Foo persistedFoo = fooDao.findByKey(foo.getMailId());
if (persistedFoo != null) {
persistedFoo.setStatus(foo.getStatus());
persistedFoo.setDnsCode(foo.getDnsCode());
persistedFoo.setReturnDate(foo.getReturnDate());
persistedFoo.setReturnTime(foo.getReturnTime());
//The save account here does an MySql UPDATE on the table
fooDao.saveAccount(foo);
}
}
}

如果我在 Java 端实现此选择/比较和更新操作会怎样?然后重新更新数据库中的整个列表?

会更快吗?

感谢大家的帮助。

最佳答案

Hibernate 并不是特别适合批处理。您最好使用 Spring 的 JdbcTemplate 来进行 jdbc 批处理。

但是,如果您必须通过 Hibernate 执行此操作,这可能会有所帮助:https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/chapters/batch/Batching.html

关于java - 使用 Hibernate 更新数据库表的更快方法(Java 8 减少?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43720553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com