관리 메뉴

개발하는 동그리

[Main Project] @Convert : booleanToString 본문

스테이츠 코드(백엔드)/Main Project

[Main Project] @Convert : booleanToString

개발하는 동그리 2022. 9. 29. 09:55
반응형
@Convert 는 boolean 타입의 true / false 에 따라 내가 원하는 String값 ( 성공 / 실패 ) 와 같이 DB에 저장할 수 있게 도와준다. 

 

DogCard Entity Class



import com.fasterxml.jackson.annotation.JsonBackReference;
import com.team012.server.utils.Converter.BooleanToDoneOrNotConvert;
import com.team012.server.utils.Converter.BooleanToGiveOrNotConvert;
import com.team012.server.utils.Converter.BooleanToHaveOrNotConvert;
import com.team012.server.utils.Converter.BooleanToInsideOrNotConvert;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
public class DogCard {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // @Lob
    @Column(name = "photo_img_url")
    private String photoImgUrl;

    @Column(name = "dog_name")
    private String dogName;

    @Column(name = "type") // 강아지 종
    private String type;

    @Column(name = "gender")
    private String gender;

    @Column(name = "age")
    private Integer age;

    @Column(name = "weight")
    private Double weight;

    // 간식급여 여부
    @Convert (converter = BooleanToGiveOrNotConvert.class)
    @Column(name = "snack_method")
    private boolean snackMethod;

    // 입질, 짖음 여부
    @Convert (converter = BooleanToHaveOrNotConvert.class)
    @Column(name = "bark")
    private boolean bark;

    // 중성화 여부
    @Convert (converter = BooleanToDoneOrNotConvert.class)
    @Column(name = "surgery")
    private boolean surgery;

    // 실외 / 실내배변 여부
    @Convert (converter = BooleanToInsideOrNotConvert.class)
    @Column(name = "bowel_trained")
    private boolean bowelTrained;


    @Convert (converter = BooleanToHaveOrNotConvert.class)
    @Column(name = "etc")
    private boolean etc;

    // 강아지 큐카드는 한명의 회원이 가질 수 있다.
    @ManyToOne // 회원 삭제시 강아지 큐카드도 삭제
    @JoinColumn(name = "users_id")
    @JsonBackReference
    private Users users;
}

 

AttributeConver Interface

public interface AttributeConvert <X,Y>{

    public Y convertToDatabaseColumn (X attribute);
    public X convertToEntityAttribute (Y dbData);
}

 

Convert Class ( true -> 급여 / false -> 미급여 )

@Converter
@Slf4j
public class BooleanToGiveOrNotConvert implements AttributeConverter<Boolean,String> {

    @Override
    public String convertToDatabaseColumn(Boolean attribute) {
        log.info("{}" , attribute);
        return (attribute) ? "급여" : "미급여";
    }

    @Override
    public Boolean convertToEntityAttribute(String dbData) {
        return "급여".equals(dbData);
    }
}

 

Convert Class ( true -> 완료 / false -> 미완료 )

@Converter
@Slf4j
public class BooleanToDoneOrNotConvert implements AttributeConverter<Boolean,String> {

    @Override
    public String convertToDatabaseColumn(Boolean attribute) {
        log.info("{}" , attribute);
        return (attribute) ? "완료" : "미완료";
    }

    @Override
    public Boolean convertToEntityAttribute(String dbData) {
        return "완료".equals(dbData);
    }
}

 

위와 같이 각 필드 변수에 @Convert를 추가해서 각각 다른 Convert를 생성해서 적용시킬 수 있고,
Domain Class 전체에 @Convert를 추가하면 Domain Class 내에 존재하는 모든 Boolean Type에도 적용시킬 수 있다.

반응형