1. 코드
1.1. @AllArgsConstructor
@AllArgsConstructor의 사용은 주의하시면 좋습니다. 편리한 기능일수록 그만큼 부작용이 크다는 것을 생각해주시면 좋습니다.
참고: @AllArgsConstructor를 지양해야 하는 이유
1.2. entity
Schedule 클래스와 Writer 클래스는 entity로 볼 수 있으므로 패키지의 이름은 entity가 되어도 좋을 것 같습니다.
1.3. 작성일과 수정일
작성일과 수정일은 테이블 생성시 SQL로 DEFAULT 또는 ON UPDATE 키워드를 이용했으므로 값을 넣지 않아도 되는 컬럼입니다.
JdbcScheduleRepository 클래스의 save()와 update() 메소드에서 두 컬럼을 모두 직접 입력하고 있으므로 한번 확인해 보시면 좋을 것 같습니다.
참고로 JdbcInsert를 이용할 때 특정한 컬럼에만 값을 넣고 싶다면 usingColumns() 메소드를 활용하면 됩니다.
참고: https://velog.io/@pms000723/DB-JdbcTemplate-SimpleJdbcInsert
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("schedule")
.usingGeneratedKeyColumns("schedule_id")
.usingColumns("writer_id", "todo", "password");
1.4. 람다식으로 변환할 수 있는 코드
scheduleRowsJoinMapper() 메소드처럼 RowMapper를 리턴하는 메소드 내용은 아래처럼 람다로 변환할 수 있으니 참고하시면 좋습니다.
private RowMapper<ScheduleAllReadResDto> scheduleRowsJoinMapper() {
return (rs, rowNum) -> new ScheduleAllReadResDto(
rs.getLong("s.schedule_id"),
rs.getLong("s.writer_id"),
rs.getString("w.name"),
rs.getString("s.todo"),
rs.getString("s.edit_date")
);
}
1.5. interface와 구현 클래스
repository 레이어의 모든 클래스들이 ScheduleRepository, JdbcScheduleRepository처럼 인터페이스와 그것을 구현한 클래스로 구성되어 있습니다.
해당 인터페이스를 구현한 구현 클래스가 여러개 나오는 상황을 고려하셨다면 좋은 추상화이고,
반대로 구현 클래스가 1개만 생성되는 경우라면 굳이 인터페이스를 따로 만들지 않으셔도 됩니다.
나중에 배울 JPA를 적용한다면 얘기가 달라지므로 참고만 해주시면 됩니다.
1.6. ResponseEntity
컨트롤러에서 ResponseEntity를 리턴하는 곳도 있고, 아닌 곳도 있습니다. API를 이용하는 입장에서는 일관된 형태로 response를 주는게 좋습니다.
1. 코드
1.1.
@AllArgsConstructor@AllArgsConstructor의 사용은 주의하시면 좋습니다. 편리한 기능일수록 그만큼 부작용이 크다는 것을 생각해주시면 좋습니다.참고: @AllArgsConstructor를 지양해야 하는 이유
1.2. entity
Schedule클래스와Writer클래스는 entity로 볼 수 있으므로 패키지의 이름은entity가 되어도 좋을 것 같습니다.1.3. 작성일과 수정일
작성일과 수정일은 테이블 생성시 SQL로
DEFAULT또는ON UPDATE키워드를 이용했으므로 값을 넣지 않아도 되는 컬럼입니다.JdbcScheduleRepository클래스의save()와update()메소드에서 두 컬럼을 모두 직접 입력하고 있으므로 한번 확인해 보시면 좋을 것 같습니다.참고로
JdbcInsert를 이용할 때 특정한 컬럼에만 값을 넣고 싶다면usingColumns()메소드를 활용하면 됩니다.참고: https://velog.io/@pms000723/DB-JdbcTemplate-SimpleJdbcInsert
1.4. 람다식으로 변환할 수 있는 코드
scheduleRowsJoinMapper()메소드처럼RowMapper를 리턴하는 메소드 내용은 아래처럼 람다로 변환할 수 있으니 참고하시면 좋습니다.1.5. interface와 구현 클래스
repository레이어의 모든 클래스들이ScheduleRepository,JdbcScheduleRepository처럼 인터페이스와 그것을 구현한 클래스로 구성되어 있습니다.해당 인터페이스를 구현한 구현 클래스가 여러개 나오는 상황을 고려하셨다면 좋은 추상화이고,
반대로 구현 클래스가 1개만 생성되는 경우라면 굳이 인터페이스를 따로 만들지 않으셔도 됩니다.
나중에 배울 JPA를 적용한다면 얘기가 달라지므로 참고만 해주시면 됩니다.
1.6.
ResponseEntity컨트롤러에서
ResponseEntity를 리턴하는 곳도 있고, 아닌 곳도 있습니다. API를 이용하는 입장에서는 일관된 형태로 response를 주는게 좋습니다.