JPA?

자바 퍼시스턴스(Java Persistence, 이전 이름: 자바 퍼시스턴스 API/Java Persistence API) 또는 자바 지속성 API(Java Persistence API, JPA)는 자바 플랫폼 SE 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다. -위키글-

 

https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%EC%8A%A4

 

자바 퍼시스턴스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 자바 퍼시스턴스(Java Persistence, 이전 이름: 자바 퍼시스턴스 API/Java Persistence API) 또는 자바 지속성 API(Java Persistence API, JPA)는 자바 플랫폼 SE와 자바 플랫폼 EE를

ko.wikipedia.org

 

간단하게 jpa에 위키글을 요약하자면 데이터베이스를 관리하는 api라고 생각하면 됩니다.

그렇다면 jpa에 사용법과 구조에 대해서 정확하게 알아 보도록 하겠습니다.

 

간단한 entity와 해당 repository부터 보겠습니다.

@Entity
class Person {

  @Id @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;
  private String name;

  // getters and setters ommited for brevity
}

interface PersonRepository extends Repository<Person, Long> {

  Person save(Person person);

  Optional<Person> findById(long id);
}

 

메인에서 예제를 확인해보겠습니다.

@SpringBootApplication
public class DemoApplication {

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }

  @Bean
  CommandLineRunner runner(PersonRepository repository) {
    return args -> {

      Person person = new Person();
      person.setName("John");

      repository.save(person);
      Person saved = repository.findById(person.getId()).orElseThrow(NoSuchElementException::new);
    };
  }
}

 

Repsoitory 인스턴스들은 자동적으로 실행됩니다. 

메소드의 @Bean의 파라미터들을 사용할때, annotation이 추가적으로 필요 없이 autowired 하게 됩니다.

기본적으로 repsoitory 는 repsoitory 확장합니다(?)

일반적으로 우리는 api surface  사용자의 application에 노출을 원하는 만큼 고려하여 제안하다(?)

(아마 제가 볼때 Repository 상속받아서 사용하는 그런부분인것 같습니다... 확실히 모르겠네요

(아래 내용은 api surface(api 표면) 즉 api 상호 작용할수 있는 코드부분을 뜻한다고 하네요.

즉 가용할수 있는 api surface부분을 고려하면서 repsoitory를 확장해서 사용하라는 뜻 같네요

틀리면 지적 부탁드립니다.)

 마지막으로 

더욱 복잡한 인터페이스들인 ListCrudRepository, JpaRepository들이 존재합니다.

https://docs.spring.io/spring-data/jpa/reference/jpa/getting-started.html

 

Getting Started :: Spring Data JPA

Let’s start with a simple entity and its corresponding repository: @Entity class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; // getters and setters ommited for brevity } interface PersonRepository ex

docs.spring.io

 

+ Recent posts