DAO 역할을 해주는 UserRepository라는 이름의 Interface를 하나 생성해줍니다.
User를 컨트롤할 UserController도 하나 생성해줍니다.
web 패키지를 만들어 안에 넣어주었습니다. (web 패키지에 controller 만드는게 규칙)
데이터를 접근할 수 있는 방법은 많은데 UserRepository가 어떤 방식으로 데이터를 가져오던 자바 오브젝트로 변경해줍니다.
JpaRepository를 상속받아줍니다. <컨트롤할 오브젝트, 기본 키의 변수형> 을 넣어줍니다.
@Repository는 IoC 컨테이너에 등록되는 annotation입니다. JpaRepository에 등록되어 있어 굳이 달지 않아도 되지만 구분하기 쉽게 달아줍니다.
UserController 클래스에 @RestController annotation을 달아주세요.
DI를 위해 UserRepository 객체 생성후 생성자를 만들어줍니다.
데이터를 저장하기 위해서는 데이터를 보내야하기 때문에 PostMapping을 해줍니다.
jsp라면 경로를 /user/insert 와 같은 형식으로 했겠지만 여기서는 메서드가 각각 나눠져 있기 때문에 /user 만으로도 주소가 충분합니다.
postman에서 body 데이터에 x-www-form-urlencoded 타입으로 데이터를 보냅니다.
HeidiSQL에서 확인해보면 user테이블에 데이터가 잘 저장된 것을 볼 수 있습니다.
application.yml 파일로 가서 ddl-auto 값을 none으로 해줍니다. create로 한다면 테이블이 서버가 실행될 때마다 다시 생성되기 때문에 none으로 해줌으로써 다른 변화를 주지 않도록 해줍니다.
UserController 클래스에 저장한 데이터를 불러오는 메서드를 생성합니다. 저장된 데이터를 select 하는 것이기 때문에 GetMapping을 합니다.
입력한 값들이 잘 나옵니다.
만약 아이디 값으로 하나의 데이터 행을 불러오려면 어떻게 해야 할까요?
이렇게 주소에서 아이디를 입력하는 부분을 따로 추출해내야 합니다.
하지만 Spring에서는
GetMapping을 통해서 /user/아이디값에 접근합니다.
@PathVariable annotation이 {}안의 값을 매개변수 id 값으로 받아줍니다.
userRepository에 있는 findById() 메서드를 사용해서 데이터를 불러옵니다.
findById()메서드는 userRepository에서 상속받은 JpaRepository에 들어있는 메서드이기때문에 따로 만들어줄 필요가 없습니다.
findById()는 반환값이 Optional이기 때문에 우선 .get()을 통해서 무조건 데이터가 있다는 가정하에 입력합니다.
브라우저에서 해당 주소로 요청을 보내면
id가 3인 데이터의 행을 잘 출력합니다.
만약 데이터베이스에 저장되지 않은 id 값을 요청하면 어떻게 될까요?
500번 오류가 납니다.
이번에는 userid를 이용해서 데이터를 불러와봅니다.
여기서 주소를 id를 이용해서 데이터를 불러오는 것과 같이 /user/{userid}이렇게 해버리면 충돌이 일어날 수도 있으니 주소를 구체적으로 설정해줍니다.
userRepository에는 userid를 가지고 데이터를 불러오는 메서드가 없으므로 UserRepository에 만들어줍니다.
직접 만든 메서드임을 표시하기 위에 앞에 m을 붙여 메서드 명을 정합니다.
@Query annotation을 통해서 입력받은 userid에 해당하는 데이터를 SELECT 해줍니다.
이때 nativeQuery = true 부분은 필수 입니다.
웹 브라우저를 통해서 요청을 해보면
데이터가 잘 출력되는 것을 볼 수 있습니다.
'웹개발 > Springboot' 카테고리의 다른 글
DB 데이터 활용하기 - 로그인 기능 (0) | 2021.06.30 |
---|---|
STS툴에 MariaDB 연동하기 (0) | 2021.06.28 |
EL 표현식 (0) | 2021.06.27 |
댓글