티스토리 뷰

JPA 게시판/JPA

JPA의 사용방법

cvcvcx9 2023. 4. 5. 12:07

일단 엔티티를 작성한다.

package org.cvcvcx.board.entity;

import lombok.*;

import javax.persistence.*;

@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString(exclude = "writer")
public class Board extends BaseEntity{

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

    private String title;
    private String content;

    @ManyToOne(fetch = FetchType.LAZY)
    private Member writer;

}

위는 지금 프로젝트중인 board 엔티티이다.

@Entity어노테이션을 붙이면 JPA에서 자동으로 테이블을 생성하고, 변수들을 컬럼으로 생성해준다.

각 변수 위에 @Column 어노테이션을 붙이면 각 테이블에 조건을 넣을 수 있다.

(조건이 없으면 @Column어노테이션 생략해도 데이터베이스에 컬럼은 생성된다.)

이후 Repository를 작성한다.

package org.cvcvcx.board.repository;

import org.cvcvcx.board.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Objects;

public interface BoardRepository extends JpaRepository<Board,Long> {

    @Query("SELECT b, w FROM Board b LEFT JOIN b.writer w WHERE b.bno = :bno")
    Object getBoardWithWriter(@Param("bno") Long bno);

    @Query("SELECT b, r FROM Board b LEFT JOIN Reply r ON r.board = b WHERE b.bno = :bno")
    List<Objects[]> getBoardWithReply(@Param("bno") Long bno);

}

위는 지금 JPQL과 같이 JPA를 사용하고 있는 모습으로, BoardRepository가 JpaRepository<Entity,PK> 형식의 클래스를 상속받고 있는 모습을 볼 수 있다.

이것만 해도 기본적인 crud가 가능해진다.


Uploaded by N2T

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함