1️⃣ Problem-Driven


https://github.com/cho-log/spring-learning-test/tree/main/spring-jdbc-1를 통해 JdbcTemplate 기초문법을 연습해보던 중, batchUpdate()에 대해 언급만 되어있고 예시코드는 나와있지 않아서 궁금증이 생겼다.

2️⃣ i+1


학습 범위: Jdbc.batchInsert()는 어떤 상황에서 사용하고 간단한 사용 방법을 알아본다.

3️⃣ Output


가설:

  1. batchUpdate라는 단어로 비추어봤을 때 한번에 여러 삽입/수정/삭제 쿼리 문을 실행해야 할 때 사용하는 것으로 추측된다.

  2. 매개변수로 여러 sql을 넣을 수도 있는 것을 보니 삽입을 하다가 삭제를 하는것도 가능해 보인다.

    image.png

해보기:

  1. 한번에 여러 개 삽입하기 ⭕️

    public void batchUpdate(List<Customer> customers) {
          String sql = "insert into customers(first_name, last_name) values (?, ?)";
    
          List<Object[]> batchArgs = new ArrayList<>();
          for (Customer customer : customers) {
              batchArgs.add(new Object[]{customer.getFirstName(), customer.getLastName()});
          }
          jdbcTemplate.batchUpdate(sql, batchArgs);
      }
    

    테스트 코드: ✅

    @Test
    public void batchUpdate() throws Exception {
        // given
        Customer customer1 = new Customer("Emma", "Stone");
        Customer customer2 = new Customer("Daniel", "Radcliffe");
        Customer customer3 = new Customer("Scarlett", "Johansson");
    
        // when
        updatingDAO.batchUpdate(List.of(customer1, customer2, customer3));
    
        // then
        int count = queryingDAO.count();
        assertThat(count).isEqualTo(7); // 기존에 4개가 저장되어 있었음
    }
    
  2. 삽입이랑 삭제 동시에 하기 ❌

    public void insertAndDelete(Customer insertCustomer, Long deleteId) {
        String insertSql = "insert into customers(first_name, last_name) values (?, ?)";
        String deleteSql = "delete from customers where id = ?";
        jdbcTemplate.batchUpdate(insertSql, deleteSql);
    }
    

    파라미터를 넣을 방법이 없다. 따라서 틀린 가설이다.

4️⃣ Input


AI 검증: