스프링부트에서 간단한 jpa 와 mysql연동하는 법을 알아보자
먼저 내가 사용한 스프링부트의 버전은 2.6.2 이고
Mysql 의존성 버전은 8.0.21
Jpa 의존성 버전은 2.4.5 기준으로 작성해봤습니다.
빌드는 gradle로 했습니다.
implementation group: 'mysql', name:
'mysql-connector-java', version: '8.0.21'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.4.5'
주의할 점!
위의 의존성을 추가할 때는 반드시
아래 글의 설정을 모두 마쳐야 어플리케이션을 실행시킬 수 있습니다.
(설정을 하지 않고 의존성만 추가한다면 연결이 안된 상태라 에러가 발생함)
mysql은 이미 설치가 완료됐다는 가정하에 진행하겠습니다.
일단 mysql 에서 연동할 database를 만들어줍니다
저는 testdb 라고 만들었습니다
create database testdb;
commit;
확인해보면 스키마에 기존에 있던 것들과 함께 새로운 testdb 라는 DB가 생성된걸 확인할 수 있습니다.
이러면 일단 DB는 완료입니다.
프로젝트로 가면 됩니다
사용할 디비 이름쪽에는 당연히 추가시켰던 testdb를 넣으면 되고
새로 계정을 만들거나 전에 사용한 계정을 사용해서 username과 password 쪽에 설정을 넣으주면 됩니다.
혹시 모르니 mysql에서 계정을 새로 만들고 모든 권한을 주는 기본 코드도 올리겠습니다
create user '유저이름 넣기'@'%' identified by '유저비번이 들어가야한다';
grant all privileges on *.* To '유저이름넣기'@'%';
설명할게 많지만 설명은 다음 게시 글 에서 하겠습니다 일단 위의 설정처럼 합니다.
주의 아래 server: port: 5000 은 무시해주세요 이번 게시 글과 상관없습니다
spring:
datasource:
driver-class-name:
com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/”사용할 DB 이름”?serverTimezone=Asia/Seoul
username: “DB접속유저 이름”
password: “해당 유저의 비밀번호”
jpa:
open-in-view: true
hibernate:
ddl-auto: create
naming:
physical-strategy:
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
use-new-id-generator-mappings: false
show-sql: false
properties:
hibernate.format_sql: true
설정이 모두 마무리 됐다면 이제 남은 것은
해당 DB를 사용할 일만 남았습니다.
Table을 만들고 삭제할 수 있으며, select, insert, delete, update 모두 가능합니다.
먼저 테이블(Model)을 만든 다음에
테스트로 JPA를 이용한 insert문만 진행해 보겠습니다.
테이블을 만들어보겠습니다 먼저
위의 사진처럼 테스트 테이블을 만들어줍니다
@Data : lombok의 getter setter 자동생성 어노테이션 입니다.
@Bulider : builder 패턴이며 패턴 공부할 때 자세히 다루겠지만 간단하게 설명하면
원하는 값을 클래스 생성자의 입력 변수에 구애 받지 않고 값을 set 해줄 수 있습니다.
@AllArgsConstructor : 모든 필드 값들을 입력는 생성자입니다.
@NoArgsConstructor: 빈 생성자를 만듭니다. (new TestTable();)
@Entity : JPA의 어노테이션 이며 말 그래도 하나의 엔티티를 만들어줍니다. (간단하게 테이블 생성)
import
lombok.AllArgsConstructor;
import
lombok.Builder;
import
lombok.Data;
import
lombok.NoArgsConstructor;
import
javax.persistence.Column;
import
javax.persistence.Entity;
import
javax.persistence.Id;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
public
class TestTable {
@Id
private int id;
@Column
private
String testcolumn;
}
해당 엔티티까지 만들었다면 이제 서버를 실행시켜보면
만들었던 db안에 새로운 testtable이 생성된걸 확인하실 수 있습니다.
아주 간단하게 JPA맛만 조금 보도록 해보자
JPA의 장점 중 하나는 빠르고 간편하다는 장점이 있습니다.
일단 위의 TestTable 엔티티를 관리할 수 있는 JpaRepository를 상속받은 인터페이스가 필요합니다.
첫 번째 인자 값은 관리하고 싶은 엔티티,모델 즉 TestTable이며
두 번째 인자 값은 해당 모델의 @id 값이 어떤 자료형 인지 알려줘야 합니다.
우리는 int 였으니깐 Integer를 넣어줍니다.
왼쪽이 controller 단이고 오른쪽이 Service 단입니다.
Service 단에서 repository 를 자동주입(Autowired) 시킵니다.
클라이언트에서 http://localhost:5000/testinsert 요청을 하면
TestTable 객체가 생성되어서 service -> repository 안의 save(insert랑 똑같습니다.)를 실행시킵니다.
왼쪽 Controll 단은 RestController 입니다. 오른쪽 서비스 단 을 보면 올바르게 Insert 됐을 때 1을 반환하는 것을 확인 할 수 있습니다. 고로 위 사진은 올바르게 insert된 것 입니다.
Workbench로 확인해보면 올바르게 값이 들어간 것을 확인할 수 있습니다.
이상 글을 마치겠습니다.
JPA의 자세한 사용법과 yml의 설정들이 무엇인지 설명은 다음 게시 글에 하겠습니다.