Spring - JPA

iseon_u·2022년 6월 18일
0

Spring

목록 보기
12/33
post-thumbnail

JPA


  • 기존의 반복적인 코드와 기본적인 SQL 도 JPA 가 직접 만들어서 실행
  • SQL과 데이터 중심의 설계에서 객체 중심의 설계로 전환
  • 개발 생산성 증가
  • Java 진영의 표준 인터페이스
  • JPA는 인터페이스만 제공
  • JPA 인터페이스의 구현체
    • Hibernate

ORM Object Relation Mapping

  • 객체와 RDBMS의 테이블을 매핑
  • 매핑은 어노테이션으로 작동

@Entity 어노테이션

@Entity
public class Member {}
  • 해당 클래스는 JPA가 관리하는 엔티티

@Id 어노테이션

@Id
private Long id;
  • PK 매핑

@GenerateValue(strategy = GenerationType.IDENTITY)

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

Identity 전략

  • 쿼리에 id 값을 넣는게 아니라 DB 에 값을 넣으면 DB 가 자동으로 id 값 생성

@Column(name=””)

@Column(name="level", nullable = false)
private String level = "0";
  • DB 에 있는 컬럼 명과 해당 iv를 매핑

EntityManager

public class JpaMemberRepository implements MemberRepository{
    private final EntityManager em;

    public JpaMemberRepository(EntityManager em) {
        this.em = em;
    }
  • 스프링 부트가 자동으로 DB와 연결된 EntityManager 생성
  • 만들어진 EntityManager를 주입 받는다.

JPQL 쿼리 언어

@Override
    public List<Member> findAll() {
        return em.createQuery("select m from Member m", Member.class)
                .getResultList();
    }
  • 테이블 대상이 아닌 엔티티 (객체) 대상으로 날리는 쿼리

JPA 주의점

  • 항상 트랜잭션이 있어야 한다.
  • 모든 데이터 변경이 트랜잭션안에서 실행 되어야 한다.

SpringConfig

@Configuration
public class SpringConfig {

		private EntityManager em;

		@Autowired
		public SpringConfig(EntityManager em) {
				this.em = em;
		}

		@Bean
		public MemberService memberService() { return new MemberService(memberRepository()); }

		@Bean
		public MemberRepository memberRepository() {
				return new JpaMemberRepository(em);
		}
}

		
profile
🧑🏻‍💻 Hello World!

0개의 댓글