Learn/KH정보교육원

[KH정보교육원 당산] 79일 (Spring Boot - Thymeleaf, BootStrap)

Dahoon06 2021. 7. 9. 13:33
728x90
반응형

 

Thymeleaf

https://june-17.tistory.com/189

 

[Spring Boot] Thymeleaf

Thymeleaf

june-17.tistory.com

 

 


예제 프로젝트)

초기 설정할때의 디펜던시

 

Spring DevTools

Lombok

Spring Web

Thymeleaf

Spring Data JPA

 

프로젝트 생성 후 먼저 Controller 클래스 생성

 

 

 

GuestBookController

@Controller
@RequestMapping("/guestBook")
@Log4j2
public class GuestBookController {

    @GetMapping({"/","/list"})
    public String list(){
        return"/guestBook/list";
    }
}

@Controller => 컨트롤러로 인식시키기 위한 어노테이션

@RequestMapping("/guestBook")

=> URL로 /guestBook 의 값이 넘어오면 해당 컨트롤러 실행

 

@Log4j2 => 테스트 어노테이션 log메서드를 활용하여 콘솔로 찍어볼 수 있다.

 

아래 list 메서드

/ 또는 /list 의 값이 요청되면 guestBook 디렉토리 안에 있는 list.html을 반환 한다.

따라서 llist.html로 이동

 

 

스프링 부터 생성하면 Application 클래스가 하나 있다.

GuestBookPrjApplication

@SpringBootApplication
@EnableJpaAuditing // 새로 추가된 어노테이션
public class GuestBookPrjApplication {

    public static void main(String[] args) {
        SpringApplication.run(GuestBookPrjApplication.class, args);
    }

}

 

BaseEntity 클래스

@MappedSuperclass //해당 클래스는 실제 테이블 생성 방지
@EntityListeners(value ={AuditingEntityListener.class}) // 이벤트 감지 value ={AuditingEntityListener.class
                                                        //JPA 내부에서 엔티티 객체가 생성 / 변경 되는지를 감지
@Getter
abstract class BaseEntity {

    @CreatedDate // JPA에서 엔티티의 생성시간을 처리하고
    @Column(name ="regdate", updatable = false)
    private LocalDateTime regDate;

    @LastModifiedDate // 최종 수정 시간을 자동으로 처리하는 용도
    @Column(name = "moddate")
    private LocalDateTime modDate;

    //이런 어노테이션을 감지 하기위한 GuestBookPrjApplication 쪽에다가
    //@EnableJpaAuditing를 추가 해야한다.
}

아까의 application 클래스에 EnableJpaAuditing 어노테이션을 부여해야

해당 Entity~~~어노테이션이 사용 가능하다.

 

** 추상 클래스이다. public XXXX

 

실제 데이터를 이동을 하는 Entity 클래스

GuestBook 클래스

@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class GuestBook extends BaseEntity {

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

    @Column(length = 100, nullable = false)
    private String title;

    @Column(length = 1500, nullable = false)
    private String content;

    @Column(length = 50, nullable = false)
    private String writer;
}

 

@NoArgsConstructor => 파라미터가 없는 기본 생성자

@AllArgsConstructor => 어노테이션은 모든 필드 값을 파라미터로 받는 생성자

 

 

JPA를 사용하므로 해당 클래스를 데이터 타입으로 갖는 인터페이스 생성

GuestBookRepository.interface

public interface GuestBookRepository extends JpaRepository<GuestBook,Long> {
}

 

 


 

 

 

다음 thmyleaf templates

 

이번 프로젝트도 부트 스트랩 사용

 

 

 

 

 

 

 

 

 

 

 

동적 쿼리를 위한 querydsl 설정

 

gradle에 플러그인 추가

 

상단 plugins에 추가

id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'

디펜던시 추가

testImplementation ('org.springframework.boot:spring-boot-starter-test'){
exclude group: 'org.junit.vintage',module:'junit-vintage-engine'
          }
implementation 'com.querydsl:querydsl-jpa'

task 작성

def querydslDir = "$buildDir/generated/querydsl"

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}

sourceSets {
    main.java.srcDir querydslDir
}

configurations {
    querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

 

 

블로그 참조

https://ict-nroo.tistory.com/117

 

[JPA] Spring Data JPA와 QueryDSL 이해, 실무 경험 공유

Spring Data JPA와 QueryDSL JPA 기반 프로젝트 Spring Data JPA QueryDSL Spring Data JPA 지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결 개발자는 인터페이스만 작성한다 스프링 데이터 JPA가 구현 객체..

ict-nroo.tistory.com

 


728x90
반응형