Spring

[Spring Boot] JPA - MySql 연결

hyunsb 2023. 3. 2. 23:44

의존성 추가하기

build.gradle에 mysql-connecter를 추가하고 빌드하여 의존성을 주입합니다.

dependencies {
   runtimeOnly 'com.mysql:mysql-connector-j'
}

 

연결 설정 추가하기

application.properties에 mysql DB 서버 연결에 대한 설정값을 추가합니다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:{포트번호}/{스키마 명}?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username={사용자 이름}
spring.datasource.password={패스워드}

// DDL 자동 생성 설정
// 테이블 생성 이후 update로 변경 해주셔야 합니다.
// spring.jpa.hibernate.ddl-auto=update
// 변경하지 않을 시 서버를 실행할 때마다 테이블이 삭제되고 재생성 됩니다.
spring.jpa.hibernate.ddl-auto=create

// 터미널에 SQL문 보이게 하는 설정
spring.jpa.properties.hibernate.show_sql=true

// DB 테이블에 컬럼명을 카멜케이스로 저장하는 설정
#spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

 

JPA 시작하기

JPA (@Java Persistence API)는 자바 언어를 위한 ORM(Object Relational Mapping) 기술입니다. ORM은 관계형 데이터베이스와 객체지향 프로그래밍 언어 사이의 데이터를 변환해주는 기술입니다.

JPA에서 @Entity 어노테이션은 해당 클래스가 JPA에서 관리하는 엔티티임을 나타냅니다. 이 어노테이션이 적용된 클래스는 데이터베이스에서 테이블로 매핑됩니다.

예를 들어, User 클래스가 있다면, 다음과 같이 @Entity 어노테이션을 적용할 수 있습니다.

@Entity
public class User {
  // ...
}

이제 JPA는 User 클래스가 데이터베이스 테이블과 매핑되어야 함을 알고, 해당 테이블의 이름과 컬럼 정보를 자동으로 생성합니다.

@Entity 어노테이션은 JPA에서 엔티티로 사용될 클래스임을 나타내는 것 외에도, 해당 클래스가 데이터베이스에서 매핑될 테이블 이름을 지정하는 등의 기능을 수행할 수 있습니다. 예를 들어, @Table(name = "users")와 같이 @Entity 어노테이션과 함께 테이블 이름을 명시할 수 있습니다. 또한, @Id 어노테이션을 사용하여 해당 클래스의 주키(primary key)를 지정할 수도 있습니다.

@Id 어노테이션을 사용하여 클래스의 주키를 지정할 때, JPA는 해당 클래스의 필드 중 하나를 식별자(identifier)로 사용한다는 것을 나타냅니다. 이를테면, User 클래스에서 id 필드를 주키로 사용할 경우, 다음과 같이 작성할 수 있습니다.

@Entity
@Table(name = "users")
public class User {
  @Id
  private Long id;

  // ...
}

JPA는 이제 id 필드를 데이터베이스 테이블의 주키로 매핑합니다. 특별한 경우가 아니라면, 주키로 사용되는 필드는 반드시 @Id 어노테이션을 명시해주어야 합니다.

JPA에서는 주키 필드 외에도, @Column 어노테이션을 사용하여 데이터베이스 테이블의 컬럼 정보를 지정할 수 있습니다. 이를테면, User 클래스에서 name 필드를 VARCHAR(255) 타입으로 매핑하고 싶은 경우, 다음과 같이 작성할 수 있습니다.

@Entity
@Table(name = "users")
public class User {
  @Id
  private Long id;

  @Column(name = "name", nullable = false, length = 255)
  private String name;

  // ...
}

JPA는 이제 name 필드를 VARCHAR(255) 타입의 name 컬럼으로 매핑합니다. nullable 속성은 name 필드가 null 값을 가질 수 없음을 나타내며, length 속성은 name 컬럼의 최대 길이를 255로 지정합니다.