inblog logo
|
moohyun
    스프링부트

    스트림 익명블로그 V2 (JPA변경) (1)

    화낼거양's avatar
    화낼거양
    Nov 20, 2024
    스트림 익명블로그 V2 (JPA변경) (1)
    Contents
    완성된 전체 코드
     
     
    💡
    기존의 nativeQuery로 작성했던 Repository 내용들을 모두 JPA(Java Persistence API)를 사용한 예제로 변경하는 내용입니다.
     

    findAll 메서드

    public List<Board> findAll() { return em.createQuery("select b from Board b order by b.id desc", Board.class).getResultList(); }
     
    설명:
    1. JPQL 쿼리 작성: "select b from Board b order by b.id desc"라는 JPQL 쿼리를 작성합니다. 이는 Board 엔티티의 모든 레코드를 id 내림차순으로 정렬하여 선택합니다.
    1. 쿼리 실행: createQuery 메서드를 호출하여 위의 JPQL 쿼리를 실행할 준비를 합니다. Board.class를 통해 반환 타입이 Board 객체임을 지정합니다.
    1. 결과 반환: getResultList 메서드를 호출하여 쿼리의 결과를 List<Board> 형식으로 반환합니다.
     
     

    알아두면 좋은 정보 :

     
    • 쿼리 파싱:
      • JPQL 쿼리가 파싱되어 데이터베이스의 SQL 쿼리로 변환됩니다. 예를 들어, 다음과 같은 SQL 쿼리로 변환될 수 있습니다:
      • select b from Board b order by b.id desc >>>> SELECT * FROM Board ORDER BY id DESC;
         
    • 데이터베이스에서 조회:
      • 변환된 SQL 쿼리가 데이터베이스에서 실행되어 Board 테이블의 모든 레코드를 id 내림차순으로 정렬하여 조회합니다.
    • 엔티티 매핑:
      • 조회된 레코드가 Board 엔티티 객체에 매핑됩니다. JPA는 데이터베이스에서 가져온 결과를 자동으로 엔티티 객체로 변환합니다. (동기화)
     
     
     

    findById 메서드

    // 고유키로 조회하는 경우 find 메소드만 사용해도 찾을 수 있다. public Optional<Board> findById(int id) { // null 처리를 연습하기 위해 해당 예제만 Optional 처리를 하였음 return Optional.ofNullable(em.find(Board.class, id)); }
     
    설명:
    1. 엔티티 조회: em.find(Board.class, id)를 사용하여 id로 Board 엔티티를 조회합니다.
    1. Optional 사용: Optional.ofNullable을 사용하여 null이 반환될 수 있는 결과를 감싸서 반환합니다.
     

    save 메서드

    public void save(Board board) { // 비영속 em.persist(board); // 동기화 완료 (영속화됨) }
     
    설명:
    1. 엔티티 영속화: em.persist(board)를 호출하여 board 엔티티를 영속성 컨텍스트에 저장합니다.
     

    delete 메서드

    public void delete(int id) { em.createQuery("delete from Board b where id = :id") .setParameter("id", id) .executeUpdate(); }
     
    설명:
    1. JPQL 쿼리 작성: "delete from Board b where id = :id"라는 JPQL 쿼리를 작성합니다. 이는 id에 해당하는 Board 엔티티를 삭제하는 쿼리입니다.
    1. 파라미터 설정: setParameter("id", id)를 사용하여 쿼리의 id 파라미터를 설정합니다.
    1. 쿼리 실행: executeUpdate 메서드를 호출하여 쿼리를 실행합니다.
     
     
     
     

    update 메서드

     
    해당 메서드는 Repository 클래스에서 필요하지 않기 때문에 삭제하였습니다.
     
     
     
     

    완성된 전체 코드

     
    @RequiredArgsConstructor // final이 붙어있는 변수의 생성자를 만들어준다 @Repository public class BoardRepository { // JPA는 EntityManager로 DB에 접근한다. (자바에서 DBConnection) private final EntityManager em; public List<Board> findAll() { return em.createQuery("select b from Board b order by b.id desc", Board.class) .getResultList(); } // 고유키로 조회하는 경우 find 메소드만 사용해도 찾을 수 있다. public Optional<Board> findById(int id) { // null 처리를 하기 위해 Optional 처리를 하였음 return Optional.ofNullable(em.find(Board.class, id)); } public void save(Board board) { // 비영속 em.persist(board); // 동기화 완료 (영속화됨) } public void delete(int id) { em.createQuery("delete from Board b where id = :id") .setParameter("id", id) .executeUpdate(); } // update는 작성하지 않아도 된다. }
     
    Share article
    Contents
    완성된 전체 코드

    moohyun

    RSS·Powered by Inblog