Skip to content

Section 3 #3

Description

@echo-youn

섹션 3 - JPA를 활용해 데이터베이스 연결하기

ORM에 대하여

  • 데이터베이스의 스키마를 어플리케이션의 엔티티로 연결하여 사용 할 수 있도록 함
  • 어플리케이션에서 데이터베이스에 요청할 쿼리를 직접 작성하지 않고 논리적인 비즈니스로직만으로 쿼리를 ORM이 작성해주기 때문에 가독성과 생산성이 증가한다.

자바, 코틀린 클래스 (객체 지향형 프로그램)

JPA를 사용해보기 앞서서 JPA를 사용하기 위해 자바, 코틀린의 클래스의 구조에 대해 짚고 넘어갑시다.

클래스

객체를 정의하는 틀, 설계도면을 클래스라 한다.

구성요소

  • 프로퍼티
  • 메서드
  • 생성자
class 클래스명(
  val property1: String, // 생성자 매개변수와 프로퍼티를 한꺼번에 선언하기
  constructor_param1, // 생성자 매개변수
) {
  var property2: String? = null // 프로퍼티

  fun method1() { // 메서드
     // do somthing
  }

  constructor(): this("") // 생성자, 코틀린에서는 secondary constructor 라 부름
}

예시

class Student(
  val name: String,
  val gender: String,
  val age: Int,
  mobile: String
) {
  var mobileNumber: String = mobile

  var intelligence: Int = 0

  fun walk() {
    println("성큼 성큼")
  }

  fun study(hour: Int) {
    intelligence += hour
   println("지능 포인트: $intelligence")
  }

  fun laugh() {
    if (gender == "MALE") {
        println("하하")
    } else {
       println("호호")
    }
  }

  fun run(meters: Int) {
    println("${"".repeat(meters)}")
  }
}

JPA 의존성 추가

  1. build.gradle.kts 파일에 아래 추가
plugins {
// ...
kotlin("plugin.jpa") version "1.9.22"
// ...
}

dependencies {
 // ...
implementation("org.springframework.boot:spring-boot-starter-data-jpa") // JPA
runtimeOnly("org.mariadb.jdbc:mariadb-java-client") // Database 연결

// ...
}
  • JPA는 인터페이스로 실제 구현체는 기본적으로 hibernate-orm을 사용한다.

Entity 정의하기

  • application.yml
spring.jpa.hibernate.ddl-auto: validate
spring.jpa.open-in-view: false
spring.jpa.show-sql: true
spring.jpa.hibernate.naming.implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.datasource.url: jdbc:mariadb://tmdwo07278.cafe24.com:3306/tmdwo07278
spring.datasource.username: tmdwo07278
spring.datasource.password: 
@Entity // 파라미터 무엇이 있는지 봐보자
class Student () {}

Repository 정의해 의존성 주입하기

interface StudentRepository: JPA<Student, Long> {}
class StudentService(
  private val studentRepository: StudentRepository // DI
) {}

JPA Query 작성해보기

https://docs.spring.io/spring-data/jpa/reference/jpa/query-methods.html#jpa.query-methods.query-creation

메서드 네이밍으로 쿼리를 작성해보자

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions