마지막으로 Delete 에 대한 내용이다.
Delete a Student
// retrieve the student
int id = 1;
Student theStudent = entityManager.find(Student.class, id);
// delete the student
entityManager.remove(theStudent);Delete based on a condition
int numRowsDeleted = entityManager.createQuery(
"DELETE FROM Student WHERE lastName='Smith'"
.executeUpdate();
)여기서 executeUpdate() 에서의 update 에 대한 의미는 Database 에 대한 modify 를 의미한다고 보면된다. numRowsDeleted 는 삭제된 row 의 개수 값을 저장한다.
Delete All Students
int numRowsDelete = entityManager.createQuery(
"DELETE FROM Student"
.executeUpdate();
)다음은 Development Process 이다.
Step 1: Add new method to DAO Interface
import com.lucvs.cruddemo.entity.Student;
public interface StudentDAO {
...
Student delete(Integer id);
}Step 2: Define DAO Implementation
public class StudentDAOImpl implements StudentDAO {
private EntityManager entityManager;
...
@Override
@Transactional
public Student delete(Integer id) {
Student theStudent = entityManager.find(Student.class, id);
entityManager.remove(theStudent);
}
}Step 3: Update Main Application
@SpringBootApplication
public class CruddemoApplication {
public static void main(String[] args) {
SpringApplication.run(CruddemoApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(StudentDAO studentDAO) {
return runner -> {
deleteStudent(studentDAO);
}
}
private void deleteStudent(StudentDAO studentDAO) {
// delete the student
int studentId = 5;
System.out.println("Deleting student id: " + studentId);
studentDAO.delete(studentId);
}
}Delete - Test (delete a student)
우선 test 를 위하여 아래와 같이 몇 개의 object 를 Student table 에 추가하였다.

위의 상태에서 id 가 5 인 object 를 delete 해보자.

성공적으로 id 가 5 인 object 가 delete 된 것을 확인할 수 있다.
Delete - Test (delete all student)
이번에는 모든 object 를 delete 하는 기능을 생성하자.
우선 StudentDAO Interface 에 deleteAll() 을 declare 하고, StudentDAOImpl class 에서 deleteAll() method 를 다음과 같이 define 한다.
@Override
@Transactional
public int deleteAll() {
return entityManager.createQuery("DELETE FROM Student").executeUpdate();
}그리고 Main Application 에서 deleteAllStudents() method 를 다음과 같이 define 한다.
private void deleteAllStudent(StudentDAO studentDAO) {
System.out.println("Deleting all students");
int numRowsDeleted = studentDAO.deleteAll();
System.out.println("Deleted row count: " + numRowsDeleted);
}이제 Application 을 실행하여 test 해보자.

결과적으로 DB Table 이 아주 깔끔하게 delete 된 것을 볼 수 있다.