Spring/Introduction to Spring

jpa

민철킹 2021. 2. 22. 22:38

JPA

 

  • JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
  • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다.
  • JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
  • ORM기술로써, Object(객체) Relational(관계형 DB)를 Mapping한다는 의미이다.

 

 


 

* JPA라이브러리 추가(build.gradle)

  • jdbc까지 다 포함하고 있음.

 

 

* 스프링 부트에 JPA 설정 추가(application.properties)

  • show-sql : JPA가 생성하는 SQL문장 출력
  • ddl-auto : JPA는 테이블을 자동으로 생성하는 기능을 제공하는데, none를 사용하면 해당 기능을 끈다.
    • 우리는 테이블을 이미 만들어 놓았기 때문에 기능을 끔
    • create를 사용하면 엔터티 정보를 바탕으로 테이블도 직접 생성해줌.

 

* Mapping 시키기

 

  • @Entity : jpa가 관리하는 entity가 된다.
  • @Id : PK매핑(Primary Key)
  • @GeneratedValue(strategy = GenerationType.IDENTITY) : id값을 DB에서 자동으로 생성해준다는 의미
  • @Column 애노테이션을 통해 컬럼과도 매핑할 수 있다.
    • 이를 통해 쿼리문 생성

 

 

* JPA리포지토리 만들기

# EntityManager

  • 앞서 우리가 설정한 라이브러리를 통해 spring-boot가 자동으로 EntityManager를 만들어준다.
  • 우리는 만들어져있는 것을 injection받으면 됨.
  • 내부적으로 datasource를 들고 있기 때문에 DB와 통신하는 것들을 처리해준다.

 

- save

  • persist ==> 영속하다.
  • EntityManager객체 em을 통해 persist메소드 사용
  • member를 DB에 저장
  • EntityManager가 persist메소드를 통해 insert문을 자동으로 만들어 DB에 넣어준다.

 

- find

  • find메소드를 사용해서 id값으로 회원 정보 찾음.
  • null(매칭되는 회원정보 없음)값이 담길 수도 있기 때문에 Optional로 return시킴

 

- findByAll

  • JPQL 쿼리언어를 사용
    • Table대상으로 SQL문을 적는게 아니라 엔티티(객체)를 대상으로 SQL문을 적음.
    • from Member로 부터 Member자체를 조회 

 

- findByName

  • 마찬가지로 JPQL로 SQL문 만들기
  • findByName의 파라미터로 들어온 name을 쿼리문의 파라미터로 넣어줌.

 

 

JPA기술을 Spring에서 감싸서 제공하는 기술 ==> SpringDataJPA

==> 이것을 사용하면 위의 JPQL도 우리가 짜지 않아도 된다.

 

 

JPA를 쓸 때 주의해야 할 점

  • 항상 트랜잭션안에서 실행되어야 한다.
  • 스프링은 해당 클래스의 메서드를 실행할 때 트랜잭션을 시작하고, 메서드가 정상 종료되면 트랜잭션을 커밋한다. 만약 런타임 예외가 발생하면 롤백한다

 

 

 

2. DI 주입 및 스프링 빈에 등록

 

 

 

테스트

 

자동으로 insert문과 select문이 실행된 것을 확인 할 수 있다.

 

JPA는 Spring만큼 공부할 것이 많음 ==> 깊이 있게 공부해야 할 필요 O

반응형

'Spring > Introduction to Spring' 카테고리의 다른 글

AOP  (0) 2021.02.24
Spring Data JPA  (0) 2021.02.24
JdbcTemplate  (0) 2021.02.20
스프링 통합 테스트  (0) 2021.02.20
spring DB 접근  (0) 2021.02.19