2018년 4월 24일 화요일

패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 21일차(JPA, Resource, Thymeleaf)

  • Spring Boot Resource
    • Gradle에서 dependencies에 추가한 webjars 파일은 META-INF에 있다.
    • 해당 폴더의 파일을 사용하려면 WebMvcconfigurer 를 구현하고 addResourceHandlers를 구현한다.
  • JPA
    • oneToMany
      • 양방향관계
        • 1 : N -> N을 가진 테이블에 FK가 있다고 생각하면 편하다
        • Many쪽이 주인공이다.
        • 단방향일때는 oneToMany일때 one관계쪽다가 Many쪽의 Join컬럼을 적어준다. 키를 먼저 알지 못하기 때문에 insert, insert, update가 일어난다.
        • 양방향 맵핑일때는 one관계쪽에는 @OneToMany 애노테이션에 mappedBy 옵션(Many쪽에 선언한 필드를 적는다)을 ,Many쪽에 @JoinColumn을 적는다. 키를 알기 때문에 insert, insert가 일어난다. 양방향으로 참조할 수 있도록 헬퍼 메소드를 만들어줘야한다. 성능적으로 단방향으로 구현하는 것보다 나을 수 있다. 서로 참조하지 않으면 무한 루프나 이상한 값이 들어갈 수 있다.
        • @OneToMany에 mappedBy 옵션을 주고 @JoinColumn 컬럼을 주면 @JoinColumn 을 선언한 곳에 FK가 생긴다.
        • 이 방법으로 모든 관계를 구현할 수 있다.
      • 단방향 관계
        • one관계를 가진 엔티티에 @JoinColumn을 선언한다.
    • OneToOne
      • 양방향 관계
        • 객체지향 관점으로는 어느쪽이 주인공(@JoinColumn)이 되든 상관이없다.  @JoinColumn을 추가한곳에 N 관계를 맺게 나중에 변경할 수 있다.
    • ManyToMany(양방향 관계)
      • 테이블 관점에서는 N:N는 존재하지 않는다. N : N은 1:N, N :1 관계로 변경해야한다.
      • @ManyToMany, @JoinTable을 사용한다. 엔티티는 2개이지만 3개의 테이블을 만들어 준다.(이방법은 비추천)
      • 1:N, N:1로 구현하자
  • Thymeleaf layout 
    • ThymeleafAutoConfiguration 클래스의 내용을 보면 해당 라이브러리가 있을 경우에만 Layout을 지정할수 있다. gradle을 예로들면 다음과 같이 추가해야한다. 
    • 
      compile group: 'nz.net.ultraq.thymeleaf', name: 'thymeleaf-layout-dialect', version: '2.3.0' 
      
      @Configuration
      @ConditionalOnClass(name = "nz.net.ultraq.thymeleaf.LayoutDialect")
      protected static class ThymeleafWebLayoutConfiguration {
      
       @Bean
       @ConditionalOnMissingBean
       public LayoutDialect layoutDialect() {
        return new LayoutDialect();
       }
      
      } 
Share:

0 개의 댓글:

댓글 쓰기