SpringBoot로 웹 프로젝트를 진행 중 Default값을 하나하나 넣자니 굳이 이럴 필요가 있을까 해서 자동으로 Default 값을 넣어주는 방법을 모색했다.
Default 값으로 자동으로 넣어주는 방법은
@DynamicInsert
@ColumnDefault
위의 어노테이션을 사용하면 해결이 된다!!!
Default값을 적용하기 위해서는 이 어노테이션을 써야한다. Insert 시 지정된 Default값을 적용시킨다.
ColumnDefault는 Default값 설정을 할 때 사용한다.
Example)
package com.example.demo.model.client;
import lombok.*;
import javax.persistence.*;
import java.util.Date;
import com.example.demo.model.item.OwnerInfo;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
@DynamicInsert //@DynamicInsert사용
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity(name="Client")
public class Client {
@Id
@Column(name = "client_index")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer clientIndex;
@Column(name = "client_id")
private String clientId;
@Column
private String password;
@Column
private String email;
@Column(name = "phone_number")
private String phoneNumber;
@Column(name = "client_name")
private String clientName;
@Column
private String nickname;
@Column(name = "client_photo")
@ColumnDefault("client.png") //@ColumnDefault사용
private String clientPhoto;
}
package com.example.demo.model.client;
import com.example.demo.model.contract.ReviewWrite;
import lombok.Data;
import org.springframework.security.crypto.password.PasswordEncoder;
import javax.xml.bind.annotation.XmlType;
import java.sql.Date;
@Data
public class SignupRequestDTO {
private String clientId;
private String clientName;
private String password;
private String nickname;
private String email;
private Date birthdate;
private String phoneNumber;
public Client toEntity(PasswordEncoder passwordEncoder) {
Client client = new Client();
client.setClientId(clientId);
client.setPassword(passwordEncoder.encode(password));
client.setEmail(email);
client.setPhoneNumber(phoneNumber);
client.setClientName(clientName);
client.setNickname(nickname);
client.setBirthdate(birthdate);
return client;
}
}
-> SignupRequestDTO에서 굳이 client.setClientPhoto()를 쓸 필요가 없다!!!!!!
지금은 Default값을 회원가입 시에만 사용하고 있지만 Default값을 많이 사용하는 경우에 코드를 줄일 수 있어서 유용할 것 같다. 👍 😄