거인의 코딩일지
[JPA] deleteAll(), deleteAllInBatch(), deleteInBatch() 개념과 차이점 본문
728x90
deleteAll() 이란??
- CrudRepository에 정의된 메서드이며, SimpleJpaRepository에 재정의 되어 있다.
- 요청 데이터로 전달한 모든 엔티티를 삭제할 수 있다.
- 내부적으로 엔티티들을 하나씩 꺼내어 delete() 를 사용하고 있음
- id 갯수 만큼 모두 for 문을 돌며 delete 쿼리문을 수행함
deleteAllInBatch() 란??
- SimpleJpaRepository에 재정의되어 있는 deleteAllInBatch()는 applyAndBind()를 사용하여 쿼리를 끝낸다.
- 이것을 사용하게 되면 인자로 List<>를 entities로 넘겨주기 때문에 if 조건문을 넘어가고 applyAndBind가 실행된다.
- EntityManager의 createQuery()로 쿼리를 준비하여 직접 excuteUpdate()를 호출하여 한번의 쿼리로 여러개의 삭제를 진행하는 것이다.
deleteAll()과 deleteAllInBatch() 의 차이점?
- deleteAll() 은 한건씩 삭제되는 것에 비해 deleteAllInBatch() 는 where 조건에서 or 를 붙여서 한번에 삭제하게 된다.
- 삭제하는 것들이 많을 수록 성능 차이가 발생한다.
- deleteAll()과 deleteAllInBatch()는 인자로 아무것도 넘겨주지 않으면 그 테이블 데이터를 전체 삭제하겠다는 의미
deleteInBatch() 란?
- deleteAllInBatch() 에서 조건을 두어 삭제할 수 있는 구문이다.
- argument를 주어도 for문을 전부돌며 select해오지 않음.
- entity에 값이 있던지 없던지 바로 delete쿼리를 날린다.
결론!!!
- deleteAll, deleteInBatch, deleteAllInBatch의 차이는 실제로 for문을 전부 돌며 select를 해오느냐, iterable로 하나하나 확인하며 지우느냐, 아니면 쿼리한번으로 모두 지우느냐 차이이다.
728x90
'코딩 > JAVA' 카테고리의 다른 글
[JAVA] String.join() 메서드란???? (0) | 2023.10.31 |
---|---|
[JAVA] charAt() 함수란?? 기능??? (2) | 2023.10.27 |
[JPA] 기본키 생성 전략 과 차이 (0) | 2023.10.07 |
[Spring boot] Swagger API 연동하기 (0) | 2023.10.06 |
[Spring] 다양한 의존성 주입 방법 (0) | 2023.09.27 |