티스토리 뷰

스프링+JPA/JPA

1, 2. JPA 시작하기

현코로그 2021. 6. 30. 23:41

이전 강의에서 느낀점

JPA는 인터페이스, hibernate는 구현체

db위주로 코드를 짠다면... 하.... 복잡 그자체일 것이다. -> JPA로 객체 중심의 코드를 짜자

 

- ORM

 : Object-relational mapping(객체 관계 매핑)
 - 객체는 객체대로 설계
 - 관계형 데이터베이스는 관계형 데이터베이스대로 설계
 - ORM 프레임워크가 중간에서 매핑
 - 대중적인 언어에는 대부분 ORM 기술이 존재

 

 

내 환경은 이렇게 설정되었다

윈도우10

jdk 11

maven

hibernate 5.3.10.Final

h2: 1.4.200

 

 

persistence.xml

 : JPA에서 사용할 DB에 관련된 정보(db 아이디, 비번, db종류...)과 옵션들

  why? db종류는 왜 필요? 

    - JPA는 특정 DB종류에 종속되지 않으므로, 특정 DB 문법에만 국한되지 않는다. == DB 방언

 

  첫째줄의 persistence-unit name=""으로 사용할 디비의 별칭을 지정

  마지막줄의 <property name="hibernate.dialect" value="">값에 h2 대신 oracle, mysql을 넣으면 그에 맞게 JPA가 쿼리값을 변경해줌

<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

 

 

JPA 구동방식

1. resource/META-INF/persistence.xml 파일에서 설정 정보를 조회한다. 

2.  EntityManagerFactory를 생성(Persistence) 

         _약간 클래스 느낌

         _하나만 생성해서 애플리케이션 전체에서 공유해야

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

3. 수많은 EntityManager 값을 생성해서 사용한다. 

        _객체 느낌

        _1개의 db connection 개념과 유사 

        _쓰레드 간 공유는 x. 사용하고 버려야

EntityManager em = emf.createEntityManager();

*JPA가 매핑정보를 보고 알아서 쿼리를 생성

 

 

 

@Entity

- db 테이블에 매핑되는 클래스

- @Entity로 명시하면, 로딩 시 JPA가 인식해서 관리해줌 

- primary key에 대응하는 값을 알려줄 때는 해당 변수에 @Id를 붙임

 

cf-1) db의 테이블명, 컬럼명과 설정한 클래스, 변수 명이 다를 경우에는 @Table(name="디비 테이블명"), @Column(name="디비 컬럼명")을 붙이면 JPA가 알아서 처리해줌

cf-2) 이 때 import되는 파일의 시작은 javax.persistence.~로 시작해야

 

 

 

 

 

트랜잭션

 - JPA의 모든 데이터 변경(등록, 수정, 삭제)은 각각 한 트랜잭션 안에서 실행되어야 

 - commit후에 디비에 데이터 변경 사항이 반영됨

 - JPA를 통해 가져온 엔티티는 JPA가 관리. 변경된 시점을 확인해서 update 등의 쿼리를 날려줌

        EntityTransaction tx = em.getTransaction(); //트랜잭션 생성
        tx.begin();

    //저장
        try{
            Member member = new Member();
            member.setId(2L);
            member.setName("helloName");
            em.persist(member);

            tx.commit(); //트랜잭션 끝
        }catch (Exception e){
            tx.rollback();
        }finally {
            em.close(); //사용을 다하면 꼭 닫아야!
        }

  저장: .persist(저장할 객체);

  조회: .find(타입, 값);

  수정: 조회한 데이터에서 set~();

            _수정한 후 다시 저장(persist)할 필요 없음. JPA가 자바 컬렉션을 다루는 것처럼 처리해주므로

  삭제: .remove(삭제할 객체);

 

 

 

JPQL

 - JPA는 테이블 대상이 아니라 멤버 객체(엔티티)를 대상으로 쿼리를 짬(=조회)

                                                 -> 테이블 대상으로 한다면 db종류에 종속될 수 밖에 없음

 - 가장 단순한 조회방법

 - 디비에서 데이터를 검색할 때가 문제 

List<Member> result = em.createQuery("select m from Member m", Member.class).getResultList();

 - createQuery("쿼리문", 엔티티 타입);

     _SELECT, FROM, WHERE문 다 가능 

     _쿼리 조회값을 리턴해줌 

     _WHERE대신 .setFirstrResult(idx), .setMaxResult(idx) 등과 같이 대응되는 함수들이 있다

   *https://www.inflearn.com/course/Querydsl-%EC%8B%A4%EC%A0%84#curriculum

 

실전! Querydsl - 인프런 | 강의

Querydsl의 기초부터 실무 활용까지 한번에 해결, 본 강의는 자바 백엔드 개발의 실전 코스를 완성하는 마지막 강의 입니다. 스프링 부트와 JPA 실무 완전 정복 로드맵을 우선 확인해주세요. 로드

www.inflearn.com

 

 

 

 

 

 

이 강의를 들으면서 발생한 에러는 아래(pom.xml)

2021.06.30 - [스프링+JPA/JPA] - [에러] 2. JPA시작하기

 

[에러] 2. JPA시작하기

강의 시작한지 5분도 안되서... 환경설정 에러가 우다다 나타났다 ​ 내 환경은 윈도우10 jdk 11 maven hibernate 5.3.10.Final h2: 1.4.200 에러1. java: error: release version 5 not supported Maven에서는 자..

huyncolog.tistory.com

 

 

 

출처: 인프런, 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편

'스프링+JPA > JPA' 카테고리의 다른 글

[에러] 2. JPA시작하기  (0) 2021.06.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함