項目框架是springdatajpa ,使用的數據庫持久層接口直接繼承JpaRepository;
public interface IdapBaseDeviceRepository extends JpaRepository<IdapBaseDevice,Integer>{
}
業務層需要操作持久化數據時,直接注入該接口,就可以調用接口。。其中有一部分是接口中定義的方法,也有一些複雜的sql需要自己寫sql或者JPQL語句來實現。。
問題出現在這。。。
使用注入 @Autowired private IdapBaseDeviceRepository idapBaseDeviceRepository ;時。。
該接口有自有方法deleteAll()方法;
如果直接使用該自有方法時,可以實現刪除的業務。。表中10000條數據時,刪除可能要用到1-2分鐘。。
感到很耗時。。。遂使用自己寫的delete from table;sql來實現,只需要0.05毫秒左右;;
於是乎,在該IdapBaseDeviceRepository 中寫sql
@Transactional
@Modify
@Query(value = "delete from table_name",nativeQuery = true)
int deleteAllData();
就是這麼簡單的代碼,在項目中執行,也只用了0.262秒。。10000條數據。。。
很是困惑。。。
而且把showsql顯示後,發現刪除的時候是一條一條記錄刪除的。。。蛋疼
另:
一個表中兩個字段,一個是業務字段,我將其設置爲主鍵(有意義的唯一的業務數據)。另一個字段就是很簡單的常量了。。;
創建數據庫實體類的時候,兩個字段都給了。。。save(list)的時,竟然還在生成主鍵值。。。一條一條,賊慢。。。煩躁
數據庫:mysql jpa 實體類主鍵的主鍵就是@Id。。