It won't hurt to try
[스프링 입문]22.JPA 본문
스프링 입문 수업에서 밑의 순서대로 구현을 진행하고 있다.
memoryMemberRepository -> Jdbc -> JdbcTemplate -> JPA
JPA를 마지막에 다룬 이유는 뭘까?
JdbcTemplate를 사용했을때 Jdbc를 편리하게 사용할 수 있어서 좋았지만,
sql을 구현해야 하기 때문에 귀찮은 점이 있었다.
sql도 인터페이스에서 자동으로 생성해준다면 생산성이 더 오를텐데 이 점이 아쉬웠다.
JPA는 sql을 자동으로 생성해주고 디비에 접근해서 값을 들고와준다.
아주아주 편하다.
JPA vs Mybatis ?
처음 사이드 프로젝트를 진행했을때 Mybatis를 사용했었다.
불편하지는 않았지만, Mybatis는 결국 sql을 작성해야 했다. xml형식으로,,
전세계적으로 JPA는 Mybatis보다 많이 사용되고 있으며, 한,중,일 이 Mybatis를 못버리고 있다.
JPA란?
간단하게 설명하자면 자바의 표준 인터페이스이다.
구현체로 hibernate등이 있다.구현은 여러 업체들이 했고, 성능이나 구현체의 차이가 있다.
객체와 ORM(Object Relational mapping)이라고 생각하면 쉬운데,
ORM(오브젝트와 관계형데이터의 맵핑)의 구현은 어노테이션으로 한다.
JPA환경구축
<build.gradle>
빌드시 spring-boot-starter-data-jpa를 의존관계로 형성해준다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
<application.properties>
jpa에 관련된 세부설정을 해준다.
# jpa에서 날리는 sql을 볼 수 있게한다.
spring.jpa.show-sql=true
# 자동으로 ddl을 날려준다. 예를들면 member테이블을 생성해준다.
# 테이블을 이미 생성되어있기 때문에 이 기능은 none으로 해준다.
spring.jpa.hibernate.ddl-auto=none
hibernate가 외부 라이브러리에 추가된 것을 확인한다.
hibernate는 쉽게 얘기해서 구현체이다.
jpa는 interface라고 할 수 있고 대부분 hibernate를 통해서 기능들을 구현한다.
또 jpa는 ORM(Object-relational mapping)이다.
※ORM : 객체 관계 매핑은 데이터베이스와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법이다.
지금부터는 오브젝트와 데이터베이스를 맵핑하려고한다.
맵핑은 어노테이션으로 진행한다.
디비에 값을 전달할때 사용하던 Member도메인이다.
<Member.java>
Member클래스에 @Entity를 선언해준다.
@Entity 클래스가 디비에 전송될때 멤버변수를 맵핑하고 sql문을 자동생성한다.
@Id 는 PK를 의미한다.
@GeneratedValue 값이 생성된다. (strategy = GenerationType.IDENTITY) 디비에서 자동으로 생성한다. 다른 방법으로 생성할 수도 있다. 예를 들면 시퀀스 방식 GenerationType.SEQUENCE
@Column(name = "컬럼명") 디비와 엔티티변수명이 다를때 column어노테이션을 통해 맵핑할수도 있다.
<JpaMemberRepository.java>
EntityManager을 인젝션해준다.
jpa에서의 dataSource라고 보면된다.
createQuery : JPQL, entity를 입력한다.
- 쿼리문 안에 파라미터변수는 변수앞에 :를 붙여준다.
그리고 setParameter로 파라미터값을 설정해준다. - getResultList() : 데이터를 리스트로 받는다.
persist : 저장한다.
'JAVA > 스프링 입문' 카테고리의 다른 글
[스프링 입문]21.스프링 JdbcTemplate (0) | 2021.09.05 |
---|---|
[스프링 입문]20.스프링 통합 테스트 (0) | 2021.08.29 |
[스프링 입문]19.순수 JDBC (0) | 2021.08.17 |
[스프링 입문]18.H2 데이터베이스 설치 (0) | 2021.08.14 |
[스프링 입문]17.회원 웹 기능 - 조회 (0) | 2021.08.14 |