Spring Boot JPA,타임리프

상품 목록

작성자
vita
작성일
2023-11-15 23:01
조회
147

먼저 상품목록 출력 기능입니다.

상품 목록의 전반적인 흐름은 아래와 같습니다.


주소창에 http://localhost 라고 입력하면 상품목록이 출력됩니다.

모든 요청은 항상 Controller를 경유하게 됩니다.

ProductController 는 ProductRepository 에게 자료를 요청합니다.

ProductRepository 는 sql 명령어를 생성하여 실행 결과를 Controller에 되돌려줍니다.

Controller는 그 자료를 저장하여 list.html 페이지에 보내 출력시킵니다.


[해설]



@Controller

public class ProductController



@Controller 어노테이션이 붙은 클래스는 Spring Framework에서 관리하는 bean입니다.  bean은 Java 클래스의 객체를 의미합니다.  웹애플리케이션이 시작될 때 @Controller 어노테이션이 붙은 클래스가 자동으로 실행되고 메모리에 로딩됩니다.




@Autowired

ProductRepository productRepository;



@Autowired 어노테이션은 ProductRepository 객체를 productRepository 참조변수에 연결시켜주는 역할을 합니다.  이것을 어려운 용어로 의존관계 주입이라고 합니다.


아래와 같은 코드는 참조변수만 있고 실제로 가리키는 내용이 없으므로 아무 일도 할 수 없는 변수입니다.



ProductRepository productRepository;



우변에 ProductRepository 객체가 생성되어 있어야 참조변수를 통해 method를 호출할 수 있습니다.



ProductRepository productRepository=new ProductRepository();



하지만 ProductRepository는 인터페이스이므로 new로 생성을 할 수 없습니다.

스프링 프레임워크의 내부적인 처리에 의해서버가 시작될 때 ProductRepository의 인스턴스가 만들어지고 메모리에 로딩이 된 상태입니다.


Controller의 return은 실제값을 리턴하는 것이 아니라 jsp 페이지 또는 다른 url로 이동하는 기능입니다.  

여기서의 redirect는 다른 주소로 이동을 시키는 명령어입니다.  

이 코드는 다시 Controller의 / 를 호출하게 됩니다.


@RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST })


@RequestMapping 


url과 method를 연결시켜주는 어노테이션입니다.


value="url pattern"

 

여기서는 value="/" 이므로 http://localhost/ 를 요청했을 때를 의미합니다.

사용자가 http://localhost 라고 입력하면 public ModelAndView list() method가 호출됩니다.


method = { RequestMethod.GET, RequestMethod.POST }


get 방식 또는 post 방식으로 모두 호출할 경우 실행됩니다.




public ModelAndView list(@RequestParam(defaultValue = "") String productName, ModelAndView mav) {



ModelAndView는 Model + View의 기능을 가지는 클래스입니다. Model에 자료를 저장한 후 지정된 View로 이동하는 기능을 제공합니다.


@RequestParam(defaultValue = "")


html form에서 전달된 데이터를 변수에 매핑시켜 주는 어노테이션입니다.


form에서 태그의 name이 a 라면

<input ... name="a">

컨트롤러에서는 

@RequestParam String a


이런 식으로 양쪽의 이름을 같게 해주면 데이터가 전달됩니다.



mav.setViewName("list");



이동할 View의 이름을 지정합니다.  list.html 페이지로 이동을 하게 됩니다.   

 


if (productName.equals("")) {
 


 }



전달된 상품이름이 빈값이면 전체 상품목록을 모델에 저장합니다.


mav.addObject("list", productRepository.findAll(Sort.by(Sort.Direction.ASC, "productName")));


mva.addObject(key, value) 구조로 되어 있습니다.  변수명은 list, 값은 상품목록 리스트입니다.


findAll() 함수는 모든 레코드를 조회하는 함수입니다.


Sort.by(Sort.Direction.ASC, "productName") 는 상품이름 기준 오름차순으로 정렬하라는 의미입니다.


else {
 

    mav.addObject("list", productRepository.findByProductNameContaining(productName,
Sort.by(Sort.Direction.ASC, "productName")));

}


상품이름이 빈값이 아니면 해당되는 상품목록을 찾아서 저장합니다.

findByProductNameContaining() 함수는 상품이름이 포함된 레코드들을 찾는 함수입니다.



return mav;



ModelAndView 객체를 리턴합니다.  지정된 list.html 로 이동하여 상품목록이 출력됩니다.    


[실행 결과]


프로젝트에서 우클릭을 하고 Run As > spring boot app을 클릭하면 웹서버가 시작됩니다.

또는 com.example.product 패키지의 JpaApplication.java 클래스를 우클릭한 후 Run As > Spring Boot App 메뉴를 클릭합니다.




스프링 부트가 성공적으로 실행되었습니다.

Console에 에러가 없으면 정상적으로 실행된 것입니다.

Tomcat 서비스가 80번 포트에서 실행중임을 알 수 있습니다.


웹브라우저를 실행하신 후 주소창에 http://localhost를 입력하면 상품목록을 볼 수 있습니다.

아직은 아무 상품도 등록된 것이 없습니다.

상품 등록 기능까지 만든 후에 아래와 같은 화면을 볼 수 있습니다.







상품명에 상품이름을 입력하고 [조회] 버튼을 누르면 해당되는 상품목록을 검색하여 화면에 출력합니다.





전체 0

전체 19
번호 제목 작성자 작성일 추천 조회
19
상품 삭제
vita | 2023.11.15 | 추천 0 | 조회 132
vita 2023.11.15 0 132
18
상품 수정
vita | 2023.11.15 | 추천 0 | 조회 112
vita 2023.11.15 0 112
17
상품 상세
vita | 2023.11.15 | 추천 0 | 조회 125
vita 2023.11.15 0 125
16
상품 등록
vita | 2023.11.15 | 추천 0 | 조회 105
vita 2023.11.15 0 105
15
상품 목록
vita | 2023.11.15 | 추천 0 | 조회 147
vita 2023.11.15 0 147
14
14. detail.html
vita | 2023.11.15 | 추천 0 | 조회 119
vita 2023.11.15 0 119
13
13. write.html
vita | 2023.11.15 | 추천 0 | 조회 135
vita 2023.11.15 0 135
12
12. list.html
vita | 2023.11.15 | 추천 0 | 조회 130
vita 2023.11.15 0 130
11
11. error.html
vita | 2023.11.15 | 추천 0 | 조회 123
vita 2023.11.15 0 123
10
10. main.css
vita | 2023.11.15 | 추천 0 | 조회 119
vita 2023.11.15 0 119
Scroll to Top