본문 바로가기
개발/JPA

[JPA] DELETE 하기(Delete , DeleteById , DeleteAll)

by 코딩하는 흰둥이 2024. 11. 12.

JPA 에서 Repository 를 통한 기본 Delete 는

Delete, DeleteById , DeleteAll 가 있다

 

 

 

Delete() - Entity 를 객체로 받아서 삭제
@Repository
public interface BoardRepository extends JpaRepository<BoardVo , Long> {
}

JpaRepository 를 상속받는다

 

 

 

@RestController
@RequestMapping("/api/*")
public class BoardController {

    @Autowired
    private BoardRepository boardRepository;
    
        @PostMapping("/boardDelete")
    public void boardDelete() throws Exception {

        // 임의의 데이터를 생성
        BoardVo vo = new BoardVo();
        vo.setNo(180L);
        vo.setTitle("삭제용");
        vo.setContents("삭제 내용");
        vo.setWriter("흰둥이");

        // Entity 를 생성
        boardRepository.save(vo);

        // 저장된 Entity 를 조회
        Optional<BoardVo> findData1 = boardRepository.findById(180L);
        System.out.println("저장된 Entity : " + findData1.get());

        // Entity 를 객체로 삭제
        boardRepository.delete(vo);

        // 삭제된 Entity 를 조회
        Optional<BoardVo> findData2 = boardRepository.findById(180L);
        // 데이터가 삭제 확인
        if(!findData2.isPresent()){
            System.out.println("180 데이터 유무 " + findData2.isPresent());
        }

    }
}

 

 

 

데이터 Insert

 

 

 

데이터가 삭제되었다

 

 

 

 

DeleteById - Id(PK) 로 삭제
@Repository
public interface BoardRepository extends JpaRepository<BoardVo , Long> {
}

JpaRepository 를 상속받는다

 

 

@RestController
@RequestMapping("/api/*")
public class BoardController {

    @Autowired
    private BoardRepository boardRepository;
    
    @PostMapping("/boardDeleteById")
    public void boardDeleteById() throws Exception {

        // 임의의 데이터를 생성
        BoardVo vo = new BoardVo();
        vo.setNo(180L);
        vo.setTitle("삭제용");
        vo.setContents("삭제 내용");
        vo.setWriter("흰둥이");

        // Entity 를 생성
        boardRepository.save(vo);

        // 저장된 Entity 를 조회
        Optional<BoardVo> findData1 = boardRepository.findById(180L);
        System.out.println("저장된 Entity : " + findData1.get());

        // 삭제하려는 대상의 PK ID 사용
        boardRepository.deleteById(180L);

        // 삭제된 Entity 를 조회
        Optional<BoardVo> findData2 = boardRepository.findById(180L);
        // 데이터가 삭제 확인
        if(!findData2.isPresent()){
            System.out.println("180 데이터 유무 " + findData2.isPresent());
        }

    }

}

 

 

 

데이터 Insert

 

 

 

데이터가 삭제되었다

 

 

 

 

 

DeleteAll(Iterable<? extends T> entities) - 여러 Entity 를 객체로 받아서 삭제  
@Repository
public interface BoardRepository extends JpaRepository<BoardVo , Long> {
    // 삭제 확인용
    Long countByNoIn(List<Long> count);

}

JpaRepository 를 상속받는다

countByNoIn 은 JPA 명명규칙에 맞춘 메서드이다

No 라는 컬럼을 In 절로 조회하였을 때의 개수를 반환한다

 

 

 

@RestController
@RequestMapping("/api/*")
public class BoardController {

    @Autowired
    private BoardRepository boardRepository;

    @PostMapping("/boardDeleteAll")
    public void boardDeleteAll() throws Exception {

        // 데이터를 담을 변수
        List<BoardVo> list = new ArrayList<>();

        // 저장된 데이터의 개수 확인용 변수
        List<Long> count = new ArrayList<>();

        // 임의의 20개의 데이터 생성
        for (int i = 0; i < 20; i++) {
            BoardVo vo = new BoardVo();
            vo.setNo(180L + i);
            vo.setTitle(i + " 번째 삭제용");
            vo.setContents(i + " 번째 삭제용");
            vo.setWriter("흰둥이"+i);

            list.add(vo);
            count.add(vo.getNo());
        }
        // 한번에 저장
        boardRepository.saveAll(list);

        // 저장된 Entity 개수 확인
        Long addCount = boardRepository.countByNoIn(count);
        System.out.println("저장된 개수 : " + addCount);

        // 삭제하려는 대상의 List Entity
        boardRepository.deleteAll(list);

        // 삭제된 Entity 를 조회
        Long addCount2 = boardRepository.countByNoIn(count);
        System.out.println("저장된 데이터 : " + addCount2 + " 개 남았습니다.");

    }

}

 

 

데이터 20개 Insert

 

 

 

데이터가 삭제되었다

 

 

 

 

 

DeleteAll() - 테이블의 모든 데이터 삭제
@Repository
public interface BoardRepository extends JpaRepository<BoardVo , Long> {
}

JpaRepository 를 상속받는다

 

 

 

@RestController
@RequestMapping("/api/*")
public class BoardController {

    @Autowired
    private BoardRepository boardRepository;


    @PostMapping("/boardDeleteAll")
    public void boardDeleteAll() throws Exception {

        // 현재 저장된 Entity 개수 확인
        Long totalCount = boardRepository.count();
        System.out.println("총 저장된 데이터 개수 : " + totalCount);

        // 삭제하려는 대상의 Repository
        boardRepository.deleteAll();

        // 삭제된 Entity 를 조회
        Long totalCount2 = boardRepository.count();
        System.out.println("저장된 데이터 : " + totalCount2 + " 개 남았습니다.");

    }

}

 

 

 

 

저장되어 있는 데이터 179 개

 

 

 

모든 데이터가 삭제되었다

 

 

 


 

Delete()Entity 를 객체로 받아서 단건을 삭제

- repository.delete(엔티티클래스)

 

DeleteById()PK 컬럼 데이터를 이용하여 단건을 삭제

- repository.deleteById(삭제하려는 데이터 PK 값)

 

DeleteAll()여러 Entity 를 객체로 받아서 복수를 삭제하거나 테이블의 전체 데이터를 삭제

- repository.deleteAll(List< 엔티티클래스> entites)

- repository.deleteAll()

댓글