query()
- SELECT쿼리문 날릴 경우에 사용
- 쿼리문의 결과값이 여러개일 경우에 사용 → 결과가List에 담김
// 쿼리문에 변수값이 없는 경우
public List<Customer> findAllCustomers() {
    String sql = "select id, first_name, last_name from customers";
    return jdbcTemplate.query(
            sql,
            (resultSet, rowNum) ->
                    new Customer(
                            resultSet.getString("first_name"),
                            resultSet.getString("last_name")
                    )
            );
}
// 쿼리문에 변수값이 있는 경우
public List<Customer> findCustomerByFirstName(String firstName) {
    String sql = "select id, first_name, last_name from customers where first_name = ?";
    return jdbcTemplate.query(
            sql,
            (resultSet, rowNum) ->
                    new Customer(
                            resultSet.getString("first_name"),
                            resultSet.getString("last_name")
                    ),
            firstName
            );
}
queryForObject()
- SELECT쿼리문을 날릴 경우에 사용
- 쿼리문의 결과값이 한 개일 경우에 사용 → 반환되는 객체의 타입을 지정
- 반환값이 하나 인 것을 고정하여 값이 존재하지 않을 경우 예외 발생
// 쿼리문에 변수값이 없는 경우
public int count() {
    String sql = "select count(*) from customers";
    return jdbcTemplate.queryForObject(sql, Integer.class);
}
// 쿼리문에 변수값이 있는 경우
public String getLastName(Long id) {
    String sql = "select last_name from customers where id = ?";
    return jdbcTemplate.queryForObject(sql, String.class, id);
}
// 결과값을 객체로 만들 경우
public Customer findCustomerById(Long id) {
    String sql = "select id, first_name, last_name from customers where id = ?";
    return jdbcTemplate.queryForObject(
            sql,
            (resultSet, rowNum) ->
                    new Customer(
                            resultSet.getString("first_name"),
                            resultSet.getString("last_name")
                    ),
            id);
}
https://bepoz-study-diary.tistory.com/355