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 |