-
[SpringBoot] SpringBoot 되새기기 프로젝트 3일차 (2020/05/13)Server/SpringBoot 2020. 5. 13. 15:34
- 롬복은 코드를 단순화시켜 주지만 필수 어노테이션은 아님
- JPA를 사용할 때 DB 데이터 작업 경우 실제 쿼리날리기 보다 Entity 클래스의 수정을 통해 작업 이루어짐
JPA에서 제공하는 어노테이션 몇 가지
-> @Entity - 테이블과 링크될 클래스, 기본값으로 클래스의 카멜케이스 이름을 (_)으로 테이블 이름 매칭
-> @Id - 테이블의 PK, Spring Boot 2.0에서는 GenerationType.IDENTITY 옵션 추가해야 auto_increment가능
-> @Column - 선언하지 않아도 클래스의 필드는 모두 컬럼이 됨 but 사용하는 이유는 기본값 외 추가 옵션있을 때 사용
롬복 라이브러리
-> @NoArgsConstructor - 기본 생성자 자동 추가, public Posts(){} 와 같은 효과
-> @Getter - 클래스 내 모든 필드의 Getter 자동 생성
-> @Builder - 해당 클래스의 빌더 패턴 클래스 생성, 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함
Entity 클래스에서는 절대 Setter 메소드 만들지 않음
why? 해당 클래스의 인스턴스 값들이 언제 어디서 변해야하는지 코드 사응로 구분 못함
따라서. - 명확히 목적과 의도를 나타낼 수 있는 메소드 추가하여 필드 값 변경
그렇다면 setter가 없는 상황에서 어떻게 DB에 값을 삽입할까?
-> 생성자를 통해 최종값을 채우고 DB에 삽입하는 것이 기본구조
-> 값 변경 필요시 public 메소드 호출하여 변경
@Builder통해 제공되는 빌더 클래스
-> 생성 시점에 값을 채워주는 역할은 생성자와 같음
But. 생성자는 지금 채워야 할 필드가 무엇인지 명확히 지정x
-> 빌더는 어떤 필드에 어떤 값을 넣어야 하는지 명확하게 인지 가능
/*예시*/ Example.builder() .a(a) .b(b) .build();
Repository
-> JPA에서 database에 접근하게해줄 interface
-> 인터페이스 생성후 JpaRepository<Entity클래스, PK타입>을 상속하면 기본 CRUD가 자동생성
-> ibatis나 MyBatis에서 Dao라고 불리는 DB Layer 접근자
resources폴더 아래에 application.properties 생성해서 아래 코드 입력하면 콘솔에서 쿼리로그 확인 가능
/* src/main/resources/application.properties */ spring.jpa.show_sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
API 만들 때 필요한 3가지 클래스
Dto - Request 데이터를 받음
Controller - API 요청을 받음
Service - 트랜잭션, 도메인 기능 간의 순서 보장
Domain에서 비즈니스 처리 담당!!!
스프링에서 Bean을 주입받는 방식
-> @Autowired
-> setter
-> 생성자
가장 권장되는 방식 : 생성자 방식
생성자로 Bean 객체를 받도록 하면 @Autowired와 동일한 효과
final이 선언된 모든 필드를 인자값으로 하는 생성자를 @RequestArgsConstructor에서 해결해줌
Entity 클래스를 Request/Response 클래스로 사용해서는 안됨
why? Entity클래스는 DB와 맞닿은 핵심 클래스 , Entity는 자주변경xxxx
Request와 Response용 Dto는 View를 위한 클래스라 자주변경필요
View Layer와 DB Layer 역할 분리를 철저히!!
'Server > SpringBoot' 카테고리의 다른 글
[SpringBoot] SpringBoot 되새기기 프로젝트 4일차 (2020/05/14) (0) 2020.05.14 [SpringBoot] SpringBoot 되새기기 프로젝트 2일차 (2020/05/12) (0) 2020.05.12 [SpringBoot] SpringBoot 되새기기 프로젝트 1일차 (2020/05/11) (0) 2020.05.12 [SpringBoot] MYBATIS MySql LIKE 동적쿼리 에러 (0) 2019.12.10 [Spring Boot] jar 파일 배포하는 법 (0) 2019.11.19