본문 바로가기

Spring Boot

(8)
스프링부트 조회수 기능 추가하기 @Query 1. 조회수 기능 추가하기 1-1 Repository public interface BoardRepository extends JpaRepository { @Modifying @Query("update Board p set p.view = p.view + 1 where p.id = :id") int updateView(Long id); } 레파지토리에 쿼리문을 작성해주었다 여기서 눈에 띄는 건 @Modifying인데, 저 어노테이션을 왜 썼냐 하면.. @Query 어노테이션으로 작성된 변경, 삭제 쿼리 메서드를 사용할 때 필요하다 즉, 조회 쿼리를 제외하고, 데이터 변경이 일어나는 INSERT, UPDATE, DELETE에서 사용된다 예제 코드에서는 UPDATE를 사용했기에 붙여줬다 1-2 Service..
스프링부트 검색, 페이징처리 하기 Pageable - 2 - 드디어 모든 기능 구현 끝났다 ㅜㅜㅜ gonyda.tistory.com/15 스프링부트 검색, 페이징처리 하기 Pageable 오늘은 검색 기능과 페이징 처리에 대해서 포스팅해보겠다 90프로 정도 완성했는데 완성 못한 게 있다 각 페이지에 대한 부분을 동적으로 바꾸고 싶은데 어떻게 해야 할지 모르겠다ㅜㅜ 이건 천 gonyda.tistory.com 저번 글에 이어서 구현한 기능들을 포스팅하겠다 이번 포스팅에서 설명할 기능들은 1. pagination에 따른 동적 URL (feat.Mustache) 2. 마지막 페이지 일시 'Next' 버튼 비활성화 번외. List와 Page 1. pagination에 따른 동적 URL (feat.Mustache) 먼저 코드부터 보자 1-1 Mustache {{>layout..
스프링부트 검색, 페이징처리 하기 Pageable 오늘은 검색 기능과 페이징 처리에 대해서 포스팅해보겠다 90프로 정도 완성했는데 완성 못한 게 있다 각 페이지에 대한 부분을 동적으로 바꾸고 싶은데 어떻게 해야 할지 모르겠다ㅜㅜ 이건 천천히 다시 찾아보고, 오늘은 일단 구현한 기능들을 얘기해보겠다 까먹기 전에 기록! 1. 검색 2. 페이징 처리 3. 검색 페이지에서 페이징 이 세 가지를 다룰 예정이다 3번의 같은 경우는 검색을 하면 검색 결과가 많을 경우에 대한 페이징 처리이다 그럼 바로 시작 1. 검색 1-1 Repository public interface BoardRepository extends JpaRepository { List findByTitleContaining(String keyword); } JpaRepository에서 메서드명의 B..
스프링부트에서 REST API 테스트코드 작성하기 오늘은 테스트 코드에 대해서 끄적여볼까 한다 이 역시 나를 위한 포스팅이다. 까먹기 전에 기록해놔야지 package com.example.study.api; import com.example.study.dto.BoardDto; import com.example.study.entity.Board; import com.example.study.repository.BoardRepository; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test..
게시판 게시글 정렬 하는법 까먹기 전에 언능 기록해야지 코드들은 현재 공부 중인 프로젝트에서 가져왔음 1. Repository public interface ArticleRepository extends JpaRepository @Query("SELECT p FROM Article p ORDER BY p.id DESC") List findAllDesc(); } Repository에 해당 쿼리문을 작성한다 정렬하는데 OREDER BY를 사용했다 예제 코드에서는 Article이라는 테이블에서 id를 내림차순을 한걸 확인할 수 있다 그리고 메서드를 정의해준다 2. Service @Transactional public List findAllDesc(List articles) { return articleRepository.findAllD..
[스프링부트 JPA] 연관관계 매핑 연관관계 매핑 엔티티들은 대부분 서로 관계를 맺고 있다 예를 들어 게시글 엔티티와 댓글 엔티티가 있을 때, 게시글은 여러 개의 댓글을 가질 수 있다 이렇게 엔티티들이 서로 어떤 연관관계가 있는지 파악하는것은 매우 중요하다 연관관계 매핑이란 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미한다 JPA에서는 JDBC(Mybatis)를 사용했을 때와 달리 연관관계에 있는 상대 테이블의 PK를 멤버변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조한다 JPA와 Mybatis의 차이 // Mybatis private Integer post; // JPA private Post post; 위에 예제는 댓글 엔티티가 게시글 엔티티를 참조하는 모습이다 Mybatis는 관계에 있는 테이블의 PK를 멤버 변수로 갖지만,..
자바 빌더 패턴에 대해서 + @Builder 빌더 패턴에는 크게 두가지가 있다 1. 이펙티브 자바의 빌더패턴 - GoF의 빌더 패턴보다 좀 더 코딩 위주의 활용법을 설명한다. - 코드 읽기/유지보수가 편해지므로 빌더 패턴을 쓰라고 한다. - GoF가 책을 썼을 때에는 상대적으로 덜 중요했던 객체 일관성, 변경 불가능성 등의 특징을 설명한다. 2. GoF의 빌더 패턴 - 객체의 생성 알고리즘과 조립 방법을 분리하는 것이 목적이다. 두 책의 관점이 다르고, 이펙티브 자바(2001년)가 GoF의 디자인 패턴(1994년)보다 나중에 나왔기 때문인 것 같다 나는 이펙티브 자바의 빌더 패턴만 다뤄 보겠다 Effective Java의 빌더 패턴 생성자가 많을 때는 Builder 패턴 적용을 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 이펙티브 자바에서 ..
JPA - Hibernate - Spring Data JPA 차이점 JPA JPA는 기술 명세이다 JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다 여기서 중요하기 여겨야 할 부분은, JPA는 말 그대로 인터페이스라는 점이다. JPA는 특정 기능을 하는 라이브러리가 아니다 마치 일반적인 백엔드 API가 클라이언트가 어떻게 서버를 사용해야 하는지를 정의한 것처럼, JPA 역시 자바 애플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 한 방법일 뿐이다 JPA는 단순히 명세서 이기 때문에 구현이 없다. JPA를 정의한 javax.persistence패키지의 대부분은 interface, enum, Exception, 그리고 각종 어노테이션으로 이루어져 있다 예를 들어, J..