본문 바로가기
Kotlin for Beginners

JPA 연동하기

by Andrew's Akashic Records 2023. 6. 2.
728x90

Java Persistence API (JPA)는 Java에서 데이터베이스를 다루기 위한 인터페이스를 제공합니다. Spring Boot와 함께 사용되며, JPA의 구현체로는 Hibernate, EclipseLink 등이 있습니다. 이 예제에서는 Spring Boot와 Hibernate를 사용하여 간단한 데이터베이스 작업을 수행하는 방법을 보여드립니다.

 

먼저, 필요한 의존성을 추가합니다. Gradle을 사용하는 경우, build.gradle.kts 파일에 다음 항목을 추가해야 합니다.

implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("com.h2database:h2")

 

다음으로, 엔티티 클래스를 정의합니다. @Entity 어노테이션이 붙은 클래스는 JPA가 관리하는 테이블의 한 행을 나타냅니다. 아래는 User라는 이름의 엔티티를 정의하는 예시입니다.

import javax.persistence.Entity
import javax.persistence.GeneratedValue
import javax.persistence.GenerationType
import javax.persistence.Id

@Entity
data class User(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = null,
var name: String,
var email: String
)

 

그 다음, User 엔티티에 대한 Repository를 정의합니다. JpaRepository 인터페이스를 상속받는 인터페이스를 생성하면, Spring Data JPA가 자동으로 구현체를 생성해줍니다.

import org.springframework.data.jpa.repository.JpaRepository

interface UserRepository : JpaRepository<User, Long> {
fun findByName(name: String): List<User>
}

 

마지막으로, UserRepository를 사용하여 데이터베이스에 접근하는 예시입니다.

import org.springframework.boot.CommandLineRunner
import org.springframework.stereotype.Component

@Component
class DatabaseInitializer(private val userRepository: UserRepository) : CommandLineRunner {
override fun run(vararg args: String?) {
    val user = User(name = "John Doe", email = "john.doe@example.com")
    userRepository.save(user)

    val users = userRepository.findByName("John Doe")
    users.forEach { println("Found user: $it") }
}
}

위의 코드는 Spring Boot 애플리케이션 시작 시 DatabaseInitializerrun 메서드를 실행합니다. "John Doe"라는 이름과 이메일 주소를 가진 사용자를 생성하여 저장하고, 그 사용자를 검색하여 출력합니다.

 

이러한 방식으로, JPA와 Spring Data를 사용하면 복잡한 SQL 쿼리 없이도 데이터베이스 작업을 수행할 수 있습니다. 복잡한 쿼리가 필요한 경우에도 Spring Data JPA는 @Query 어노테이션을 이용한 커스텀 쿼리를 지원합니다.

728x90