오늘은 Jpa를 이용해 Spring boot에서 데이터베이스를 연결해 사용하는 법을 알아보겠다.
Spring boot에 데이터베이스를 연결하는 방법은 다음과 같다.
우선 Jpa와 이번 글에서 사용할 Mysql을 프로젝트에서 사용하기위해 추가해준다 방법은 다음과 같다.
build.gradle에 사용할 라이브러리를 추가해주는 것이다.
다음으로 사용할 데이터베이스를 연결하고 설정한다.
위의 예시에서 application.properties에 다음과 같이 입력한다.
데이터베이스가 위치한 경로와 아이디, 비밀번호를 입력한다.
예시 중 sring.jpa.hibernate.ddl-auto는 프로젝트가 동작할때 변경되거나 생성되는 테이블을 제어할 수 있다.
sring.jpa.hibernate.ddl-auto의 설정값은 여러가지가 있는데 다음과 같다.
create
프로젝트가 동작할때 테이블을 삭제하고 다시 생성한다.
create-drop
프로젝트 종료시 테이블을 삭제 한다.
update
프로젝트가 동작할때 변경된내용이 있다면 테이블에 적용한다.
위의 3개의 설정값 이외에도 존재하지만 지금은 위의 설정값으로 충분하다.
사용방법으로는 위의 예시처럼 sring.jpa.hibernate.ddl-auto=update와 같다.
마지막으로 밑의 3줄은 프로젝트가 동작하는동안 쿼리문이 사용되면 콘솔에 출력 해주거나 쿼리를 보게 좋게 출력해주는 등의 설정이다.
다음으로 Application 클레스에 @EnableJpaAuditing 어노테이션을 추가한다.
@EnableJpaAuditing 어노테이션은 엔티티 객체가 생성이 되거나 변경이 되었을때 자동으로 값을 등록 할 수 있게 해준다.
다음으로 Entity를 설계한다.
Entity 는 간단하게 데이터베이스에 테이블을 생성하는데 테이블의 형식을 지정하고 프로젝트에서 테이블을 CRUD 하는 등 사용할 때 필요하다.
@Table 어노테이션을 사용해 데이터베이스에 테이블을 지정해 줄 수 있다.
이러한 과정을 통해 프로젝트에서 데이터베이스를 사용할 수 있다.
Controller를 기능별로 나눈 것 중 데이터베이스를 다루는 repository에서 예를 들어 사용해 보자
위와같이 JpaRepository 인터페이스를 상속 받고 앞서 생성한 Post형식으로 선언해준다.
예시의 findAllByOrderByCreatedAtDesc() 와 같이 쿼리문을 함수명으로 선언하면 쿼리문의 결과가 조회된다.
findAllByOrderByCreatedAtDesc() 는 해석하면 모든 데이터를 뽑아오는데 Created란 필드로 내림차순 정렬한 결과를 모두 가져오라는 뜻이 된다.
다음으로 Service에서 사용해 보자.
위의 예시 코드는 클라이언트에서 받은 데이터를 앞서 생성한 Post 형 변수에 담아 save() 함수를 통해 post 테이블에 저장 하는것이다.
결과는 다음과 같다.
위와같이 Postman을 사용해 구현한 api에 json 데이터로 보내주면
위의 결과들과 같이 테이블에 정상적으로 데이터가 저장되는 것을 확인 할 수 있다.
마지막으로 findAllByOrderByCreatedAtDesc() 를 사용해보겠다.
위와같이 Service에서 Post형 리스트를 선언하고 findAllByOrderByCreatedAtDesc() 의 결과를 저장한다.
결과는 다음과 같다.
Postman으로 확인하면 createdeAt 의 내림차순으로 테이블의 내용이 모두 출력되는것을 확인 할 수 있다.