728x90
queryForObejct와 Update의 차이점
실습을 진행하던 도중, 상황마다 queryForObject()와 Update()를 따로 사용한다는 것을 발견했다.
어떤 상황에 두 메소드를 분류하여 사용해야 하는지 궁금하여 찾아보고 공부하게 되었다.
queryForObject
설명을 듣고 보니 해당 메소드명을 얼마나 잘 지었는지 알 수 있었다.
query for object 쿼리를 실행했을 때, Select문을 사용하였을 때 하나의 객체 결괏값이 나올 때 사용하는 메서드였다.
public Hospital findById(int id) throws ClassNotFoundException, SQLException {
String sql = "select * from nation_wide_hospital where id = ?";
return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
}
해당 쿼리를 사용 했을 때, Hospital 객체에 맞게 매핑되어 결괏값을 반환해주었다.
Update
SQL 연산을 통하여 데이터베이스에 INSERT, DELETE, UPDATE 명령을 갱신할 때 사용하는 메서드이다.
SELECT를 제외한 기본적인 명령을 내릴 때 사용하면 되는 메서드이다.
// INSERT
this.jdbcTemplate.update(
sql,
hospital.getId(), hospital.getOpenServiceName(), hospital.getOpenLocalGovernmentCode(),
hospital.getManagementNumber(), hospital.getLicenseDate(), hospital.getBusinessStatus(),
hospital.getBusinessStatusCode(), hospital.getPhone(), hospital.getFullAddress(),
hospital.getRoadNameAddress(), hospital.getHospitalName(), hospital.getBusinessTypeName(),
hospital.getHealthcareProviderCount(), hospital.getPatientRoomCount(), hospital.getTotalNumberOfBeds(),
hospital.getTotalAreaSize()
);
// DELETE
this.jdbcTemplate.update("delete from nation_wide_hospitals");
queryForObject 변경점
토비의 스프링을 토대로 공부를 하다보니, 메서드에 변경사항이 있다는 것을 찾게 되었다.
해당 책대로 따라한다면
this.jdbcTemplate.queryForObject(sql, new object[] {id} , this.hospitalMapper);
위의 순서대로 매개변수를 입력해야 하지만 @Deprecated되어있는 상태였다.
파라미터의 순서가 바뀌었고, 기존에는 Object [] 타입의 변수를 받아 배열에 넣어줬지만 수정 후에는 가변 인자를 받는 방식으로 변경되었다.
this.jdbcTemplate.queryForObject(sql, rowMapper , id);
코드를 깊숙하게
queryForObejct() 메서드를 선택하여 해당 메서드를 제작한 클래스에 들어가서 비교해보았다.
이전 코드
/** @deprecated */
@Deprecated
@Nullable
public <T> T queryForObject(String sql, @Nullable Object[] args, RowMapper<T> rowMapper) throws DataAccessException {
List<T> results = (List)this.query((String)sql, (Object[])args, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper, 1)));
return DataAccessUtils.nullableSingleResult(results);
}
수정된 코드
@Nullable
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException {
List<T> results = (List)this.query((String)sql, (Object[])args, (ResultSetExtractor)(new RowMapperResultSetExtractor(rowMapper, 1)));
return DataAccessUtils.nullableSingleResult(results);
}
반응형
'Server > Java' 카테고리의 다른 글
[JDBC] JDBC와 최신 데이터 접근 기술 (0) | 2022.11.02 |
---|---|
[JDBC] JDBC의 이해 (0) | 2022.11.02 |
[Java 입문] 오버라이딩(Overriding) & 오버로딩(Overloading) (0) | 2022.09.28 |
[Java] JDK, JRE (0) | 2022.09.21 |
[Java] JDK 환경변수 설정 이유 (0) | 2022.09.20 |