Spring/실전! 스프링부트와 JPA 활용1

상품 등록/ 목록 조회/ 수정 구현하기

hyun-1200 2022. 3. 20. 11:11

 

일반적인 웹 애플리케이션 계층 구조 다시한번 상기하기 위해서..! 

Controller -> Service -> Repository -> DB

 

* 개발 순서 : 

1) 엔티티 개발

2) 리포지토리 개발

3) 서비스 개발

4) 테스트

5) 컨트롤러 개발

6) 웹 계층 적용 

1. Domain

- Item.java

- Book.java

 

Item 은 추상화 객체이며,

해당 프로젝트에서만 Book 만 사용하는것으로 개발.

 

2. Repository 

- ItemRepository.java

 

 

 

@Repository : 스프링 빈으로 등록, JPA 예외를 스프링 기반 예외로 예외 변환

@PersistenceContext : 엔티티 메니저( EntityManager ) 주입 

@PersistenceUnit : 엔티티 메니터 팩토리( EntityManagerFactory ) 주입

 

* 기능

1) 저장 : save

2) 단건 조회 : findOne(Long id)

3) 다건 조회 : findAll()

 

 

 

3. Service 

 

1.

ItemRepository 를 주입받는다.  -> private final ItemRepository itemRepository

필드 주입과 생성자 주입 비교 
  • 생성자 주입 방식을 권장 -> why? 변경 불가능한 안전한 객체 생성 가능
  • 생성자가 하나면, @Autowired 를 생략할 수 있다.
  • final 키워드를 추가하면 컴파일 시점에 ItemRepository 를 설정하지 않는 오류를 체크할 수 있다. (보통 기본 생성자를 추가할 때 발견)

 2. 기능

- 먼저 개발한 ItemRepository 를 주입받아 사용한다.

 

1) 등록 : saveItem - Repository.save 사용

2) 단건 조회 : findOne - repository.findOne 사용 

3) 다건 조회 : findItems - Repository.findAll 사용

 

 

3. 웹 계층 & Controller 

 

1. 폼 객체 : bookForm.java 

 

2. 웹계층 : createItemForm.html

 

아래 내용을 주의하여  컨트롤러와 해당 부분을 맞춰줘야 한다.

 

- action: /items/new

- object : form

- method : post 

 

3. 컨트롤러 : ItemController 

* GetMapping ("/items/new") -> 해당 url 조회할때 : GetMapping 

- localhost:8080/item/new 의 입력값을 받으면 아래 내용이 작동한다는 의미.  

- attributeName : form은 html에서 받을 object 명과 동일해야 한다.

- return 값은 동작이 끝나면 어떤 웹 화면으로 갈지를 알려주는 내용. 

 

*PostMapping("/Item/new") -> 해당 url에서 무엇인가를 전송할때 : PostMapping

-  localhost:8080/item/new 화면에서 전송하는(post) 하는 동작이있을때 어떤 작업을 할지 

-  컨트롤러에서는 서비스의 메서드를 사용하여 동작. (Service.saveItem.. ) 

 

 

 

* 상품조회하는 웹 계층 : itemList.html 

-특이점: 수정

하는 부분이 있다.

- /items/{id}/edit 

 

* 컨트롤러에 수정하는 부분 추가.

- {itemId} 가 어떤 값을 의미하는지 @PathVariable 을 사용해서 지정해준다.

- item 값들을 form에 지정해주고 뿌려준다. 

- return : updateItemForm 

 

'Spring > 실전! 스프링부트와 JPA 활용1' 카테고리의 다른 글

웹계층 개발 - Home  (0) 2022.03.18
주문 도메인 개발  (0) 2022.03.16
회원 도메인 개발  (0) 2022.03.09
애플리케이션 아키텍처  (0) 2022.03.08
2.요구사항 분석 설계  (0) 2022.03.08