728x90
더보기
Day82. 230825
QnA게시판 질문 등록
QuestionController>
package com.mycom.app.question.controller;
import com.mycom.app.question.entity.Question;
import com.mycom.app.question.repository.QuestionRepository;
import com.mycom.app.question.service.QuestionService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RequestMapping("/question")
@RequiredArgsConstructor
@Controller
public class QuestionController {
private final QuestionService questionService;
/*질문등록폼 보여줘 요청
요청방식 get
요청주소 http://localhost:포트/question/add
모델
view temlpates/question_detail.html */
@GetMapping("/add")
public String add(){
return "question_form";
}
/*질문등록 처리 요청
요청방식 post
요청주소 http://localhost:포트/question/add
모델
view temlpates/question_detail.html */
@PostMapping("/add")
public String questionAdd(@RequestParam String subject,@RequestParam String content){
//1.파라미터받기
//2.비지니스로직
//3.MOdel
//4.View
return "redirect:/question/list"; //(질문목록조회요청을 통한)질문목록페이지로 이동
}
/*질문상세조회
*/
@GetMapping("/detail/{id}")
public String detail(@PathVariable("id") Integer id,Model model){
//1.파라미터받기
//2.비지니스로직수행
Question question = questionService.getQuestion(id);
//3.Model
model.addAttribute("question",question);
//4.View
return "question_detail"; //templates폴더하위 .html
}
//질문목록조회
@GetMapping("/list")
public String questionList(Model model){
List<Question> questionList = this.questionService.getList();
model.addAttribute("questionList",questionList);
return "question_list"; //templates폴더하위 question_list문서
}
}
QuestionService>
package com.mycom.app.question.service;
import com.mycom.app.exception.DataNotFoundException;
import com.mycom.app.question.entity.Question;
import com.mycom.app.question.repository.QuestionRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
@RequiredArgsConstructor
@Service
public class QuestionService {
private final QuestionRepository questionRepository;
//질문등록처리
public void add(String subject,String content){
Question question = new Question();
question.setSubject(subject);
question.setContent(content);
question.setCreateDate(LocalDateTime.now());
questionRepository.save(question);
}
//질문상세조회
public Question getQuestion(Integer id){
Optional<Question> question = questionRepository.findById(id);
if(question.isPresent()){
return question.get();
}else{
throw new DataNotFoundException("Question not Found");
}
}
//질문목록조회
public List<Question> getList(){
List<Question> questionList = questionRepository.findAll();
System.out.println(questionList.size());
return questionList;
}
}
QuestionRepository>
package com.mycom.app.question.repository;
import com.mycom.app.question.entity.Question;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
//Repository는 Entity에 의하여 생성된 db에 접근하여 작업하는 여러 메서드들로 구성된 interface이다.
//=>CRUD
//JpaRepository인터페이스를 상속하고 있다.
//<Repository의 대상이 되는 Entity타입,Entity타입의 PK타입>
//여기에서는 <Question,Integer> Repository의 대상이 되는 Question의 PK는 Integer
public interface QuestionRepository extends JpaRepository<Question,Integer> {
//subject(제목)으로 Question가져오기
Question findBySubject(String subject);
//제목=? and 내용=?에 해당하는 Question 조회
/*예문 : List<User> findByEmailAddressAndLastname(String emailAddress, String lastname);
select u from User u where u.emailAddress = ?1 and u.lastname = ?2*/
Question findBySubjectAndContent(String subject,String content);
//질문제목에 검색키워드가 포함된 Question Entity 조회
/* … where x.firstname like %?%
Like 연산자 예문
findByFirstnameLike … where x.firstname like ?1
*NotLike 연산자 예문
findByFirstnameNotLike … where x.firstname not like ?1 */
List<Question> findBySubjectLike(String subject);
}
question_form>
<html layout:decorate="~{layout}">
<div layout:fragment="content" class="container">
<h5 class="my-3 border-bottom pb-2">질문등록</h5>
<form id="questionForm" th:action="@{/question/add}" method="post">
<div class="mb-3">
<label for="subject" class="form-label">제목</label>
<input type="text" name="subject" id="subject" class="form-control"/>
</div>
<div class="mb-3">
<label for="content" class="form-label">내용</label>
<textarea name="content" id="content" class="form-control" rows="8"></textarea>
</div>
<input type="submit" value="질문등록(처리)" class="btn btn-primary my-2"/>
</form>
</div>
</html>
728x90
'개발 수업 > Spring Boot' 카테고리의 다른 글
[SpringBoot] index, redirect (0) | 2023.08.28 |
---|---|
[SpringBoot] Thymeleaf(타임리프) 사용(유효성검사, 네비게이션바) (0) | 2023.08.28 |
[SpringBoot] 게시판 상세조회 댓글 수/댓글 출력 (0) | 2023.08.27 |
[SpringBoot] 부트스트랩5 적용 (0) | 2023.08.24 |
[SpringBoot] thymeleaf 타입별 사용법/thymeleaf 템플릿 기능 (0) | 2023.08.24 |