使用Hibernate更新数据库表的更快方法(Java8精简?)
我正在使用Hibernate作为ORM,在springboot中开发一个监视工具 我需要比较表中的每一行(已保存的已发送消息行),查看使用Hibernate更新数据库表的更快方法(Java8精简?),java,mysql,spring,hibernate,java-8,Java,Mysql,Spring,Hibernate,Java 8,我正在使用Hibernate作为ORM,在springboot中开发一个监视工具 我需要比较表中的每一行(已保存的已发送消息行),查看MailId(唯一)是否收到反馈(状态:打开,反弹,传递…)是或否 我通过从网络文件夹中读取csv文件获得反馈。CSV解析和读取文件的速度非常快,但数据库的更新速度非常慢。我的算法不是很有效,因为我循环遍历一个可以包含数十万个对象的列表,并在表中查找 这是通过更新“目标”对象(表数据库中的行)在我的表中进行更新的方法 @覆盖 public void updateT
MailId
(唯一)是否收到反馈(状态:打开
,反弹
,传递
…)是或否
我通过从网络文件夹中读取csv文件获得反馈。CSV解析和读取文件的速度非常快,但数据库的更新速度非常慢。我的算法不是很有效,因为我循环遍历一个可以包含数十万个对象的列表,并在表中查找
这是通过更新“目标”对象(表数据库中的行)在我的表中进行更新的方法
@覆盖
public void updateTargetObjectFoo()引发CSVProcessingException,FileNotFoundException{
//在这里,我调用performProcessing方法,该方法读取文件夹中的文件并将其解析为JavaObject,然后将它们映射到Foo类型的反馈列表中
List feedBackList=performProcessing(env.getProperty(“foo_-in”)、预期的_标题_字段_状态、foo.class、“.lets.STATUS”);
对于(Foo-Foo:feedBackList){
//findByKey在mySql中执行一个简单的选择,其中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());
//这里的save帐户对表进行MySql更新
fooDao.saveAccount(foo);
}
}
}
如果我在Java端实现了这个选择/比较和更新操作,该怎么办?然后重新更新数据库中的整个列表
会更快吗
感谢大家的帮助。Hibernate并不特别适合批处理。 您最好使用Spring的JdbcTemplate进行jdbc批处理
但是,如果必须通过Hibernate执行此操作,这可能会有所帮助:Hibernate并不特别适合批处理。 您最好使用Spring的JdbcTemplate进行jdbc批处理
但是,如果您必须通过Hibernate执行此操作,这可能会有所帮助:您好,非常感谢您的回复和指导。我不限于在这个项目中使用Hibernate。我必须找到一个解决方案,使运营比现在更快。我搜索了SpringJDBCTemplate。你知道我该如何明智地实施这一点吗?通过知道我必须执行一个主操作(10-10万次):根据java对象列表更新数据库表的每一行 网上有很多文档和例子。这里有一个:你好,再次感谢你的回答。我正在重新开发一点我的DAO来实现JDCB模板。我将随时向您通报性能的任何变化。祝你今天愉快谢谢你的指导。使用Spring的JDBC模板将操作时间缩短了4倍!您好,非常感谢您的回复和指导。我不限于在这个项目中使用Hibernate。我必须找到一个解决方案,使运营比现在更快。我搜索了SpringJDBCTemplate。你知道我该如何明智地实施这一点吗?通过知道我必须执行一个主操作(10-10万次):根据java对象列表更新数据库表的每一行 网上有很多文档和例子。这里有一个:你好,再次感谢你的回答。我正在重新开发一点我的DAO来实现JDCB模板。我将随时向您通报性能的任何变化。祝你今天愉快谢谢你的指导。使用Spring的JDBC模板将操作时间缩短了4倍!到目前为止,我在实际项目中看到的“快速方法”是绕过ORM并发送SQL。事实上,我见过一些项目,其中每个数据库操作实际上都是绕过ORM完成的……到目前为止,我在实际项目中看到的“快速方法”是绕过ORM并发送SQL。事实上,我见过的项目中,每个数据库操作实际上都是绕过ORM完成的…
@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);
}
}
}