[BoostCourse] 프로젝트 5. 예약관리 시스템: 예약하기 (BE)
- 이전 글
- [부스트코스] 프로젝트 5. 예약관리 시스템: 예약하기 분석 및 설계
- 다음 글
- [부스트코스] 프로젝트5. 예약관리 시스템: 예약하기(FE) 제출 [PASS & Feedback]
BE_PJT E-1. 예약관리 시스템: 예약하기

피드백 요약

하단에 작성된 내용은 기능관련 피드백만
1. Service
- auto seq (key) 기능 사용하기 (ref - link)
SimpleJdbcInsert(docs)
위 사이트에서 SimpleJdbcInsert라는 내용을 살펴보면
1. SimpleJdbcInsert 클래스 선언
2. setDataSource() 메서드에서 new SimpleJdbcInsert() 클래스 생성
3. withTableName("테이블명").usingGenerateKeyColumns("pk명") chaining 메서드를 통해 필요한 값을 주입
4. AutoGenerated Key 사용할 메서드에서 executeAndReturnKey("파라미터") 메서드를 통해 입력된 값에 대한 Auto-generated Key를 얻을 수 있다.
5. 위 사이트의 예시에서 first_name, last_name을 파라미터로 넣는 이유를 몰랐는데 직접 해보면 테이블에 기본값이 없는 필드는 입력을 해주어야 원하는 key 값을 얻을 수 있다.

위 테이블 보면 product_id, display_info_id, reservation_name, reservation_tel, reservation_email, reservation_date 필드에 "기본값이 없음"을 알 수 있다.




위 로그에 132 라는 값을 DB에서 확인

자동증가 132의 값이 리턴되는 것을 알 수 있다.
현재 프로젝트에 적용되어 있는 클래스는 NamedParameterJdbcTemplate이기 때문에 밑의 내용으로 Generated Key를 구현
NamedParameterJdbcTemplate.update 알아보기(docs)
- update 메서드 중 generatedKeyHolder를 파라미터로 사용하는 메서드가 2개 있다.
Issue an update via a prepared statement, binding the given arguments, "returning generated keys".
@Override | |
public int update(String sql, SqlParameterSource paramSource) throws DataAccessException { | |
return getJdbcOperations().update(getPreparedStatementCreator(sql, paramSource)); | |
} | |
@Override | |
public int update(String sql, Map<String, ?> paramMap) throws DataAccessException { | |
return update(sql, new MapSqlParameterSource(paramMap)); | |
} | |
@Override | |
public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder) | |
throws DataAccessException { | |
return update(sql, paramSource, generatedKeyHolder, null); | |
} | |
@Override | |
public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder, String[] keyColumnNames) | |
throws DataAccessException { | |
ParsedSql parsedSql = getParsedSql(sql); | |
String sqlToUse = NamedParameterUtils.substituteNamedParameters(parsedSql, paramSource); | |
Object[] params = NamedParameterUtils.buildValueArray(parsedSql, paramSource, null); | |
List<SqlParameter> declaredParameters = NamedParameterUtils.buildSqlParameterList(parsedSql, paramSource); | |
PreparedStatementCreatorFactory pscf = new PreparedStatementCreatorFactory(sqlToUse, declaredParameters); | |
if (keyColumnNames != null) { | |
pscf.setGeneratedKeysColumnNames(keyColumnNames); | |
} | |
else { | |
pscf.setReturnGeneratedKeys(true); | |
} | |
return getJdbcOperations().update(pscf.newPreparedStatementCreator(params), generatedKeyHolder); | |
} |
public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)

public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder, String[] keyColumnNames)

위 update메서드를 통해 리턴받은 generated key

2. Controller
- 파라미터의 null이나 공백("") 체크에 대한 조건식 처리
apache에서 제공하는 라이브러리 사용
if (StringUtils.isNotEmpt(reservationEmail)) { | |
.... | |
} |
Maven Library
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> | |
<dependency> | |
<groupId>org.apache.commons</groupId> | |
<artifactId>commons-lang3</artifactId> | |
<version>3.0</version> | |
</dependency> |
참고 사이트
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html
이후 수정한 내용
- 기존 세션에 대한 로직을 페이지 요청 컨트롤러에서 모두 처리하여 불필요한 코드를 줄여보았다.

'Edu > BoostCourse Web Project' 카테고리의 다른 글
[부스트코스] 프로젝트 6. 예약관리 시스템: 한줄평 등록 (5) | 2020.01.02 |
---|---|
[부스트코스] 프로젝트5. 예약관리 시스템: 예약하기(FE) 제출 [PASS & Feedback] (0) | 2019.12.28 |
[부스트코스] 프로젝트 5. 예약관리 시스템: 예약하기 분석 및 설계 (2) | 2019.07.22 |
[부스트코스] 프로젝트 4. 예약관리 시스템: 상세페이지 (FE) 2차 제출 - [PASS & Feedback] (0) | 2019.02.10 |
[부스트코스] 프로젝트 4. 예약관리 시스템: 상세페이지 (FE) 1차 제출 - [FAIL & Feedback] (0) | 2019.02.01 |