[E-3-3] 전체 조회 화면
2020. 2. 1. 01:21ㆍProject E/Project E 파트3
반응형
src/main/java
templates/layout
index.mustache
더보기
{{>layout/header}}
<h1>스프링 부트로 시작하는 웹 서비스 Ver 2.0</h1>
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
<a href="/posts/save" role="button" class="btn btn-primary">글 등록</a>
</div>
</div>
<br/>
<!-- 목록 출력 영역 -->
<table class="table table-horizental table-bordered">
<thead class="thead-strong">
<tr>
<th>게시글 번호</th>
<th>제목</th>
<th>작성자</th>
<th>최종수정일</th>
</tr>
</thead>
<tbody id="tbody">
{{#posts}}
<tr>
<td>{{id}}</td>
<td>{{title}}</td>
<td>{{author}}</td>
<td>{{modifiedDate}}</td>
</tr>
{{/posts}}
</tbody>
</table>
</div>
{{>layout/footer}}
src/main/java
com.minokuma.book.springboot
domain/posts
PostsRepository.java 인터페이스
더보기
package com.minokuma.book.springboot.domain.posts;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
public interface PostsRepository extends JpaRepository<Posts,Long> {
@Query("SELECT p FROM Posts p ORDER BY p.id DESC")
List<Posts> findAllDesc();
}
src/main/java
com.minokuma.book.springboot
service/posts
PostsListResponseDto.java
더보기
package com.minokuma.book.springboot.service.posts;
import com.minokuma.book.springboot.domain.posts.Posts;
import lombok.Getter;
import java.time.LocalDateTime;
@Getter
public class PostsListResponseDto {
private Long id;
private String title;
private String author;
private LocalDateTime modifiedDate;
public PostsListResponseDto(Posts entity){
this.id = entity.getId();
this.title = entity.getTitle();
this.author = entity.getAuthor();
this.modifiedDate = entity.getModifiedDate();
}
}
src/main/java
com.minokuma.book.springboot
service/posts
PostsService.java
더보기
package com.minokuma.book.springboot.service.posts;
import com.minokuma.book.springboot.domain.posts.Posts;
import com.minokuma.book.springboot.domain.posts.PostsRepository;
import com.minokuma.book.springboot.web.dto.PostsResponseDto;
import com.minokuma.book.springboot.web.dto.PostsSaveRequestDto;
import com.minokuma.book.springboot.web.dto.PostsUpdateRequestDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@Service
public class PostsService {
private final PostsRepository postsRepository;
@Transactional
public Long save(PostsSaveRequestDto requestDto){
return postsRepository.save(requestDto.toEntity()).getId();
}
@Transactional
public Long update(Long id, PostsUpdateRequestDto requestDto){
Posts posts = postsRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. id=" + id));
posts.update(requestDto.getTitle(), requestDto.getContent());
return id;
}
public PostsResponseDto findById(Long id){
Posts entity = postsRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. id=" + id));
return new PostsResponseDto(entity);
}
@Transactional(readOnly = true)
public List<PostsListResponseDto> findAllDesc(){
return postsRepository.findAllDesc().stream()
.map(PostsListResponseDto::new)
.collect(Collectors.toList());
}
}
src/main/java
com.minokuma.book.springboot
web
IndexController.java
더보기
package com.minokuma.book.springboot.web;
import com.minokuma.book.springboot.service.posts.PostsService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@RequiredArgsConstructor
@Controller
public class IndexController {
private final PostsService postsService;
@GetMapping("/")
public String index(Model model){
model.addAttribute("posts",postsService.findAllDesc());
return "index";
}
@GetMapping("/posts/save")
public String postsSave(){
return "posts-save";
}
}
테스트 결과
반응형
'Project E > Project E 파트3' 카테고리의 다른 글
[E-3-5] 게시글 삭제 (0) | 2020.02.01 |
---|---|
[E-3-4] 게시글 수정 화면 생성 (0) | 2020.02.01 |
[E-3-2] 게시글 등록 화면 (0) | 2020.01.31 |
[E-3-1] 머스태쉬 설치 및 기본 페이지 작성 (0) | 2020.01.31 |