[Java] Lombok λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν JDBC νλ‘κ·Έλλ°
[ Lombok μ΄λ? ]
@μ΄λ Έν μ΄μ κΈ°λ°μΌλ‘ μ½λλ₯Ό μλμμ± ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬μ΄λ€. Lombokμ μ΄μ©νλ©΄ Model ν΄λμ€μ getter,setter λ± λ€μν
λ©μλλ€μ μμ±νμ§ μμλ μλμμ± μμΌμ£ΌκΈ° λλ¬Έμ μ½λκ° κ°κ²°νκ³ λ¨μνλλ μ₯μ μ΄ μλ€.
[ Lombok μ¬μ© μμ ]
Lombok μ¬μ© β
βοΈ Lombokμ μ¬μ©νμ§ μμΌλ©΄ Getter, Setter λ©μλλ₯Ό μλμ κ°μ΄ μμ±ν΄μΌ νλ€.(μ½λκ° κΈΈμ΄μ§λ€)
public class TodoDTO {
private Long tno;
private String title;
private LocalDate dueDate;
private boolean finished;
public Long getTno() {
return tno;
}
...μλ΅...
public boolean isFinished() {
return finished;
}
public void setFinished(boolean finished) {
this.finished = finished;
}
}
Lombok μ¬μ© β
βοΈ Lombokμ μ¬μ©νλ©΄ @Getter , @Setter μ΄λ Έν μ΄μ μ μ μΈν΄μ£Όλ©΄ μλμ κ°μ΄ κ°κ²°ν μ½λ μμ±μ΄ κ°λ₯νλ€.
βοΈ μ½λ λ€μ΄μ΄νΈ ν¨κ³Ό
@Getter
@Setter
public class TodoDTO {
private Long tno;
private String title;
private LocalDate dueDate;
private boolean finished;
}
[ Lombokμ μ₯μ ]
- μ΄λ Έν μ΄μ κΈ°λ°μ μ½λ μλ μμ±μ ν΅ν μμ°μ± ν₯μ
- λ°λ³΅λλ μ½λ λ€μ΄μ΄νΈλ₯Ό ν΅ν κ°λ μ± λ° μ μ§λ³΄μμ± ν₯μ
- Getter, Setter μΈμ λΉλ ν¨ν΄μ΄λ λ‘κ·Έ μμ± λ± λ€μν λ°©λ©΄μΌλ‘ νμ© κ°λ₯
[ μμ£Ό μ¬μ©λλ Lombok μ΄λ Έν μ΄μ ]
@NorgsConstructor | νλΌλ―Έν°κ° μλ κΈ°λ³Έ μμ±μ μμ± |
@AllArgsConstructor | λͺ¨λ νλ κ°μ νλΌλ―Έν°λ‘ λ°λ μμ±μ μμ± |
@RequiredArgsConstructor | final μ΄λ @NonNull νλ κ°λ§ νλΌλ―Έν°λ‘ λ°λ μμ±μ μμ± |
@EqualsAndHashCode | equalsμ hashcodeλ₯Ό μλμΌλ‘ μμ±ν΄μ£Όλ μ΄λ Έν μ΄μ |
@Data | Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCodeλ₯Ό νλ²μ μ€μ ν΄μ£Όλ μ΄λ Έν μ΄μ |
@Builder | μλμΌλ‘ ν΄λΉ ν΄λμ€μ λΉλ μΆκ° |
@Cleanup | close()μ²λ¦¬ μ½λλ₯Ό μλμΌλ‘ μ»΄νμΌ μμ μ μμ±, try ~ catch λ¬Έμ΄ νμνμ§ μλ κ°κ²°ν μ½λ μ§μ |
@Getter | μλμΌλ‘ ν΄λΉ ν΄λμ€μ getter μΆκ° |
@Setter | μλμΌλ‘ ν΄λΉ ν΄λμ€μ setter μΆκ° |
@Builder μ΄λ Έν μ΄μ
@Builderλ κ°μ²΄λ₯Ό μμ±ν λ μ μ°νκ² κ°μ μ€μ ν μ μλλ‘ λμμ€λ€. μ΄κ±Έ λΉλ ν¨ν΄μ΄λΌκ³ νλ€.
κΈ°μ‘΄ λ°©μ(μμ±μ μ¬μ©) β
βοΈ μλλ builder μ΄λ Έν μ΄μ μ μ¬μ©νμ§ μκ³ κΈ°μ‘΄μ λ°©μλλ‘ μμ±μλ₯Ό μ¬μ©νλ λ°©λ²μ΄λ€.
βοΈ λ§€κ°λ³μμ μμλ₯Ό κΌ μ§μΌμΌνλ μ κ³Ό λͺ¨λ κ°μ ν λ²μ λ£μ΄μΌ νλ€
TodoVO vo = new TodoVO(tno, title, dueDate, finished);
λΉλ ν¨ν΄ μ¬μ© β
βοΈ λΉλ ν¨ν΄μ μ¬μ©νλ©΄ νμν νλλ§ μ νμ μΌλ‘ μ€μ ν μ μκ³ κ°λ μ±μ΄ μ’λ€.
βοΈ λν μλ‘μ΄ νλκ° μΆκ°λλλΌλ μ½κ² μμ ν μ μμ΄ μ μ§λ³΄μμ μ©μ΄νλ€.
TodoVO vo = TodoVO.builder()
.tno(resultSet.getLong("tno"))
.title(resultSet.getString("title"))
.dueDate(resultSet.getDate("dueDate").toLocalDate())
.finished(resultSet.getBoolean("finished"))
.build();
λΉλ ν¨ν΄μ μ¬μ©νλ €λ©΄ @Builder μ΄λ Έν μ΄μ μ μ¬μ©νκ±°λ, μ§μ λΉλ ν΄λμ€λ₯Ό λ§λ€μ΄μ μ¬μ©νλ€.
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class TodoVO {
private Long tno;
private String title;
private LocalDate dueDate;
private boolean finished;
}
@Cleanup μ΄λ Έν μ΄μ
@cleanup μ μλμΌλ‘ 리μμ€λ₯Ό close() ν΄μ£Όλ μν μ νλ€.
κΈ°μ‘΄ λ°©μ β
βοΈ κΈ°μ‘΄ λ°©μμμλ finally λΈλ‘μμ close()λ₯Ό μλμΌλ‘ νΈμΆν΄μΌ νλ€.
βοΈ try-catch λ¬Έμ μ¬λ¬ λ² μ¬μ©ν΄μΌ ν΄μ μ½λκ° κΈΈμ΄μ§κ³ κ°λ μ±μ΄ λ¨μ΄μ§λ€.
public String getTime(){
String now = null;
try(Connection connection = ConnectionUtil.INSTANCE.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("select now()");
ResultSet resultSet = preparedStatement.executeQuery();
){
resultSet.next();
now = resultSet.getString(1);
} catch (Exception e){
e.printStackTrace();
}
return now;
}
@cleanup μ¬μ© β
βοΈ μλμΌλ‘ close()λ₯Ό νΈμΆνκ³ , try-finally μμ΄λ μ½λ μμ±μ΄ κ°λ₯νλ€.
βοΈ κ°λ μ±μ΄ μ’μμ§κ³ μ½λκ° κ°κ²°ν΄μ§λ€.
public String getTime2() throws Exception {
@Cleanup Connection connection = ConnectionUtil.INSTANCE.getConnection();
@Cleanup PreparedStatement preparedStatement = connection.prepareStatement("select now()");
@Cleanup ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
String now = resultSet.getString(1);
return now;
}
π μ 리
β JDBC νλ‘κ·Έλλ° κ³Όμ μμ 리μμ€λ₯Ό μμ νκ² μ 리νλλ° λμμ μ€λ€
β κ°λ μ±μ΄ μ’μμ§κ³ μ½λκ° κ°κ²°ν΄μ§λ€
β νλκ° λ§κ±°λ μ νμ μΌλ‘ κ°μ λ£κ³ μΆμ λ μ μ©νλ€