의존성 추가하기
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로 지정합니다.
'Spring' 카테고리의 다른 글
Spring Interceptor vs Servlet Filter (1) | 2024.03.05 |
---|---|
SLF4J 와 Log Level 간단 정리 (0) | 2024.03.03 |
[Spring Boot] ThymeLeaf 템플릿 사용 (0) | 2023.03.02 |
[Spring Security] 스프링 시큐리티 시작하기 (0) | 2023.03.02 |
[Spring Security] authorize가 인식 안되는 상황 (0) | 2023.03.02 |