JPA를 사용하여 테이블을 만드는 것을 연습을 하면서 POST, GET 방식으로 DB의 값을 넣고 브라우저에서 확인하는 것을 연습하였다.
gym : 헬스장 정보
pass : 회원권 종류
gym_pass : 헬스장 이용권 정보
owner : 판매자
owner_qna : 판매자 QNA
POST와 GET 매핑을 중점을 두고 연습하였으므로 테이블구조와 설계부분은 다음에 자세히 다루도록 하겠다.
owner (판매자) 컨트롤러를 간단히 테스트해보고자 postman으로 post 방식으로 조회가 되는지 확인해보았다.
http://localhost:9990/owner/join 조회하기
x-www-form-urlencoded 는 key=value&key=value 형태로 데이터를 전송한다.
이클립스에서 확인해보면 값이 제대로 전달된 것을 확인할 수 있다.
앞서 join () 메서드는 파라미터 형태로 값을 받았지만 object 형태로도 받을 수 있기 때문에 컨트롤러를 수정해보도록 하겠다.
Repository 만들기
전에 배웠던 스프링, 스프링 부트에서 했던 것들을 보면 이렇게 하면 빈으로 등록이 되나? 라고 의문이 들었었다. 즉 스프링 ioc 에서 객체를 가지고 있나요? 라는 뜻이며 인젝션을 통해 DI 를 할수 있었다. @Repository 어노테이션을 붙혀서 스프링이 컴포넌트 스캔을 할 때 OwnerRepository를 메모리에 올렸었다.
그런데 위의 코드처럼 사용을 하게 되면 자동으로 빈이 등록된다. 스프링 데이터 JPA 를 간단한 CRUD 기능을 공통으로 처리하는 JpaRepository 인터페이스를 제공한다. 그리고 이 인터페이스를 상속받는다. 그리고 제네릭에 엔티티 클래스와 엔티티 클래스가 사용하는 식별자 타입을 지정한다.
간단히 JpaRepository 인터페이스를 상속받으면 사용할 수 있는 주요 메서드를 보면
save(S): 새로운 엔티티는 저장하고 이미 엔티티는 수정한다.
delete(T): 엔티티 하나를 조회한다. 내부에서 EntityManager.remove()를 호출한다.
findOne(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find()를 호출한다.
getOne(ID): 엔티티를 프록스로 조회한다. 내부에서 EntityManager.getReference()를 호출한다.
findAll(): 모든 엔티티를 조회한다. 정렬(Sort)이나 페이징조건을 파라미터로 제공할 수 있다.
@Autowired 를 통해서 ownerRepository를 주입을 하고 save(owner)를 통해 저장한다.
테스트를 해보도록 하겠다.
1. Postman
2. 이클립스
3. DB
데이터베이스에 값이 잘 전달된 것을 확인할 수 있다.
GET방식으로 DB에 저장된 값을 브라우저에서 확인해보기
만약 DB에서 값이 없는데 호출을 하려고 하면 null을 return 하게 된다. 이런 문제를 해결하기 위해 Optional로 owner 객체를 감싸서 null이 아닌지 판단해서 return 을 하게 하였다.
{ownerNo} 주소로 파라미터를 전달 받을 수 있다.
http://localhost:9990/owner/12311222로 검색을 해보면 아래와 같이 json으로 나타난다. MessageConverter라 응답시 자동작동한다. 만약 object를 리턴하게 되면 MessageConverter가 Jackson 라이브러리를 호출하여
owner 오브젝트를 json으로 변환해서 브라우저에 넘겨준다.
'Springboot' 카테고리의 다른 글
[MSA] 1. Spring cloud Anrifragile & 아키텍처 (0) | 2023.12.22 |
---|---|
DTO 사용 방법 (0) | 2022.05.03 |
[Charter6] Controller 파라미터 (0) | 2021.11.21 |
MVC, 템플릿 엔진 (0) | 2021.09.24 |
JPA 란? (0) | 2021.07.27 |