[Springboot] 11 게시글 조회하기 (게시글 목록)

김호정's avatar
Aug 19, 2024
[Springboot] 11 게시글 조회하기 (게시글 목록)
 
 
Model 은 응답되는 데이터!
템플릿 엔진을 사용하면 html 에 Model 을 넣어서 전달 할 수 있다.
 
view(화면) - Controller - Repository 이런 순서대로 만들어도 되지만 복잡해진다
그러니 Repository 부터 만들어서 select 쿼리 잘 되는지 먼저 확인하자
 
 
notion image
jakarta.persistence Query 쿼리 선택
 
 
notion image
쿼리뒤에 클래스 작성해주면 JPA 가 Object Mapping 해준다.
 
 
notion image
 
결과가 여러개 나오면 getResultList()
결과가 1개만 나오는거면 getSingleResult()
 
notion image
package shop.mtcoding.blog.board; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Repository // @Repository를 붙이면 스프링이 new를 해서 IoC(컬렉션 List자료형 같은거)에 저장한다. - inversion of container public class BoardRepository { @Autowired // IoC에 있는 객체를 찾아온다. private EntityManager em; public List<Board> findAll() { Query query = em.createNativeQuery("select * from board_tb order by id desc", Board.class); // board 클래스로 매핑해서 받는다. => Object Mapping // 하이버네이트는 오브젝트 매핑뿐만 아니라 오브젝트 릴레이션 매핑도 해준다(매우 편리함) // @Entity 로 관리되는 애들만 매핑이 된다. List<Board> boardList = query.getResultList(); return boardList; //datasource를 쓰고 있기 때문에, close 안해줘도 된다. } // insert 하기 @Transactional // 변경요청할 때는 transactional을 붙여줘야한다. public void save(String title, String content) { Query query = em.createNativeQuery("insert into board_tb(title, content, created_at) values(?,?,now())"); query.setParameter(1, title); // position = ?의 순서 query.setParameter(2, content); query.executeUpdate(); } // transational이 끝나기전에는 이 데이터가 안보인다. }
 
Datasource 가 내장되어있기 때문에 close 안해줘도 된다!
 
insert , delete, update 할 때만 @ Transactional 을 매서드 위에 붙여준다.
지금 하는건 조회 select 이니까 안붙여줘도 Ok.
 
 
BoardRepositoryTest 에 findAll 매서드 테스트용으로 만들어준다.
notion image
 
notion image
 
select 잘 되는거 콘솔에서 확인할 수 있다.
 
notion image
 
만약 위처럼 쿼리를 잘못적었으면 ⇒ 콘솔에 SQL 에러난다
 
 
notion image
5개의 데이터가 잘 들어가 있음을 배열의 크기로 확인할 수 있다.
 
notion image
 
나는 위에 콘솔에 한국어가 잘 나왔지만,
뚫뀁꽉 처럼 이상한 한국어가 나온다면 아래 설정 해주기!
 
 
인텔리제이에서 한글이 깨지면 settings → gradle → 아래 두 가지 IntelliJ IDEA 로 바꿔준다.
notion image
 
 
 
Share article

keepgoing