본문 바로가기
JAVA/배달웹 프로젝트

2. db BaseEntity 생성 및 Config Json Swagger 등

by PlusUltraCode 2024. 6. 28.

데이터베이스에 id 는 존재한다 매번마다 선언해주면 귀찮기 때문에 BaseEntity를 이용하여 상속해준다



@MappedSuperclass  //참조 안하고 나는 슈퍼클래스입니다~
@Data
@SuperBuilder   //하위클래스가 상위 클래스의 id 를 사용하려면 이걸 써쭤야된다. 
public class BaseEntity {

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

}


account 패키지 안에는/
@Entity
@Table(name ="account")
@Data
@EqualsAndHashCode(callSuper = true) //상위 객체와 비교할꺼냐  
@SuperBuilder
public class AccountEntity extends BaseEntity {


}
신기하게 All No 안썼음..

AccountApiController 을 실행하게 되면 db 모듈은 bean 으로 등록이 안되어 있기 때문에 문제가 생긴다.

우리는 config 를 만들어서 db모듈도 bean 으로 등록해야 된다.

@Configuration
@EntityScan(basePackages = "org.delivery.db")
@EnableJpaRepositories(basePackages ="org.delivery.db")
public class JpaConfig {
}

또한 중요한거!!! @GeneratedValue(strategy = GenerationType.IDENTITY) 이놈은 직접 빌드 해서 값을 넣어주지 않고 자동으로 1씩 증가시켜주는걸 의미함 autoIncrement 라는 듰

이제 Json 자동 config 하는 법 

웹 에서의 config 와 우리가 사용하는 swagger 의 config 필요함

@Configuration
public class ObjectMapperConfig {

    @Bean
    public ObjectMapper objectMapper(){
        var objectMapper = new ObjectMapper();

        objectMapper.registerModule(new Jdk8Module()); //jdk 8버전 이상등록

        objectMapper.registerModule(new JavaTimeModule()); //local date 시리즈

        objectMapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false); // 모르는 json필드 무시

        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); //비어있는 빈들은 무시한다.


        objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);    //날짜 관련 직렬화

      
        objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategies.SnakeCaseStrategy());   //스네이크

        return objectMapper;
    }
}


실제로 오브젝트 메퍼가 없으면 spring 은 디폴트로 만든다. 다만 우리가 이렇게 만들경우 이걸 사용한다