springboot (11) 썸네일형 리스트형 스프링부트 조회수 기능 추가하기 @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.. Spring Boot 게시판 만들기 [3] 게시글 조회, 수정, 삭제 1. 게시글 목록 1-1 HTML src/main/resources/static/css/board.css table { border-collapse: collapse; } table, th, td { border: 1px solid black; } 게시글 목록의 테이블을 꾸며주는 css 다음은 게시글 리스트 페이지이다 src/main/resources/templates/board/list.html 글쓰기 번호 글제목 작성자 작성일 - 앞에서 작성한 board.css를 불러오는 코드 - css, js, img 같은 정적 자원들을 src/main/resourses/static 경로에 저장하면 스프링 부트가 인식하게 된다 - thymeleaf에서 반복문을 사용하는 부분이다 - 컨트롤러가 넘겨주는 변수는 ${}.. Spring Boot 게시판 만들기 [2] 게시글 추가하기 이번 편을 시작하기 전에 현재 프로젝트를 깃허브에 연동해보자 이 글을 보고 오면 좋을 것 같다 이번 편에서는 이렇게 다룰 예정이다 1. 게시글 추가하기 2. TimeZone 설정하기 그럼 바로 시작하자 1. HTML 1-1 헤더와 푸터 templates/common/header.html 헤더 입니다. templates/common/footer.html 푸터입니다. 모든 페이지에 존재하는 헤더와 푸터 1-2 게시글 리스트 페이지 templates/board/list.html 글쓰기 Thymeleaf 문법을 볼 수 있다. xmls:th="http://www.w2.org/1999/xhtml" - XHTML 문서를 위한 XML 네임스페이스를 명시하는 것으로, 생략해도 정상작동한다 - 인텔리제이에서 Thymele.. Spring Boot 게시판 만들기 [1] 개발환경 구축하기 아직 공부한지도 얼마 되지 않았고, 혼자서 뭐를 만들 역량이 되지는 않는 거 같다 그래도 뭐든 만들어보는 게 중요하다 생각해서 다른 분들이 써준 훌륭한 글들을 참고하면서 게시판 만들기를 진행해 볼까 한다 나는 이 분의 글을 참고하며 공부를 할 생각이다 사실 그냥 따라 하기다 열심히 공부하겠습니당 나의 개발 환경 - IntelliJ - Java 8 - SpringBoot 2.1.8 - Gradle 6.4.1 - MySQL 5.7 라이브러리 - JPA - Thymeleaf - Lombok - LiveReload - DevTools 이번 편에서는 이렇게 다룰 예정이다 1. 프로젝트 생성 후 스프링 부트 버전 변경 2. Lombok 플러그인 설치 및 설정 3. MySQL 설치 4. HelloWorld 출력 5... 이전 1 다음