imk*_*epo 4 java mysql sql spring spring-data-jpa
我目前使用标准的jparepository方法repository.deleteAll()在添加新信息之前清理表。该表包含8300行,每行5列。目前将它们全部删除大约需要80秒,而使用标准repository.saveAll(list)将它们放入则需要1-3秒。有更有效的方法吗?在SQL中使用DELETE FROM表手动删除数据需要0.1秒。使用MySQL数据库。从删除日志中放入数据 日志。
deleteAll获取所有实体,然后一个一个地删除:
// Code from SimpleJpaRepository
@Transactional
public void deleteAll() {
for (T element : findAll()) {
delete(element);
}
}
Run Code Online (Sandbox Code Playgroud)
我建议您在仓库中创建自己的删除方法,例如:
@Modifying
@Transactional
@Query("delete from MyEntity m")
void deleteAllWithQuery();
Run Code Online (Sandbox Code Playgroud)
这将仅创建一个SQL DELETE语句。
例如,在您的服务界面中:
在您的服务界面中:
public interface MyTableInterface {
//...
void truncateMyTable();
}
Run Code Online (Sandbox Code Playgroud)
在您的服务实现中(使用@AutowiredmyTableRepository):
public class MyTableImpl implements MyTableService {
// other methods, @Autowiring, etc
@Override
@Transactional
public void truncateMyTable() {
myTableRepository.truncateMyTable();
}
}
Run Code Online (Sandbox Code Playgroud)
在您的存储库中;
public interface MyTableRepository extends JpaRepository<MyTable, Long> {
//....
@Modifying
@Query(
value = "truncate table myTable",
nativeQuery = true
)
void truncateMyTable();
}
Run Code Online (Sandbox Code Playgroud)
编辑:还请注意@Transactional服务的实现层,而不是将其放置在DAO /存储库层上
| 归档时间: |
|
| 查看次数: |
4172 次 |
| 最近记录: |