Akashic Records

Spring jdbc Template의 종류와 사용방법 본문

Spring.io

Spring jdbc Template의 종류와 사용방법

Andrew's Akashic Records 2023. 4. 10. 00:59
728x90

Spring JDBC Template은 데이터베이스 연결 및 작업을 간소화하고 코드 중복을 줄이기 위해 설계된 Spring 프레임워크의 일부입니다. JDBC Template은 여러 유용한 클래스와 메서드를 제공합니다.

  • JdbcTemplate: 가장 일반적인 클래스로, 대부분의 JDBC 작업을 수행할 수 있습니다. 주요 기능은 쿼리 실행, 데이터 업데이트 처리 등입니다.
@Autowired
private JdbcTemplate jdbcTemplate;

public List<Person> findAll() {
    String sql = "SELECT * FROM person";
    return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Person.class));
}

public int insertPerson(String firstName, String lastName) {
    String sql = "INSERT INTO person (first_name, last_name) VALUES (?, ?)";
    return jdbcTemplate.update(sql, firstName, lastName);
}

public int updatePerson(int id, String firstName, String lastName) {
    String sql = "UPDATE person SET first_name = ?, last_name = ? WHERE id = ?";
    return jdbcTemplate.update(sql, firstName, lastName, id);
}

public int deletePerson(int id) {
    String sql = "DELETE FROM person WHERE id = ?";
    return jdbcTemplate.update(sql, id);
}

 

  • NamedParameterJdbcTemplate: 이름 기반 파라미터를 사용하여 쿼리를 작성할 수 있는 JdbcTemplate의 확장입니다. 이 클래스는 가독성이 높고, 위치 기반 인수에 대한 혼동을 줄입니다.
@Autowired
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

public int insertPerson(Person person) {
    String sql = "INSERT INTO person (first_name, last_name) VALUES (:firstName, :lastName)";
    Map<String, Object> params = new HashMap<>();
    params.put("firstName", person.getFirstName());
    params.put("lastName", person.getLastName());
    return namedParameterJdbcTemplate.update(sql, params);
}

 

  • SimpleJdbcInsert: 삽입 작업을 단순화하기 위해 설계된 클래스입니다. 테이블 및 열 이름을 자동으로 처리합니다.
@Autowired
private JdbcTemplate jdbcTemplate;

public int insertPerson(Person person) {
    SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(jdbcTemplate)
        .withTableName("person")
        .usingGeneratedKeyColumns("id");
    Map<String, Object> params = new HashMap<>();
    params.put("first_name", person.getFirstName());
    params.put("last_name", person.getLastName());
    Number key = simpleJdbcInsert.executeAndReturnKey(new MapSqlParameterSource(params));
    return key.intValue();
}

 

  • ResultSetExtractor: 결과 집합에서 데이터를 추출하는 사용자 정의 로직을 제공하는 인터페이스입니다.
public List<Person> findAll() {
    String sql = "SELECT * FROM person";
    return jdbcTemplate.query(sql, new ResultSetExtractor<List<Person>>() {
        @Override
        public List<Person> extractData(ResultSet rs) throws SQLException, DataAccessException {
            List<Person> persons = new ArrayList<>();
            while (rs.next()) {
                Person person = new Person();
                person.setId(rs.getInt("id"));
                person.setFirstName(rs.getString("first_name"));
                person.setLastName(rs.getString("last_name"));
                persons.add(person);
            }
            return persons;
        }
    });
}


이러한 클래스들은 각각 다양한 사용 사례를 처리하기 위해 설계되었습니다. 사용 사례에 따라 적절한 클래스와 메서드를 선택하여 사용하시면 됩니다.

  • RowMapper: 각 행을 개별 도메인 객체로 매핑하는 인터페이스입니다. 여러 행의 결과 집합을 처리할 때 유용합니다.
public List<Person> findAll() {
    String sql = "SELECT * FROM person";
    return jdbcTemplate.query(sql, new RowMapper<Person>() {
        @Override
        public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
            Person person = new Person();
            person.setId(rs.getInt("id"));
            person.setFirstName(rs.getString("first_name"));
            person.setLastName(rs.getString("last_name"));
            return person;
        }
    });
}

 

  • RowCallbackHandler: 결과 집합의 각 행에 대한 콜백을 처리하는 인터페이스입니다. 큰 결과 집합을 처리하는 데 효율적입니다.
public void processAll() {
    String sql = "SELECT * FROM person";
    jdbcTemplate.query(sql, new RowCallbackHandler() {
        @Override
        public void processRow(ResultSet rs) throws SQLException {
            // Process each row in the result set
            System.out.println(rs.getString("first_name") + " " + rs.getString("last_name"));
        }
    });
}


이러한 클래스 및 인터페이스를 사용하여 Spring JDBC Template를 사용하여 데이터베이스 작업을 수행할 수 있습니다. 선택한 클래스 및 메서드에 따라 사용법이 달라질 수 있으므로, 사용 사례에 따라 적절한 클래스와 메서드를 선택하십시오.

728x90
Comments