본문 바로가기
JPA/ORM 표준 JPA

02. JPA 요소들

by clearinging 2021. 6. 29.
반응형

객체 매핑

Table 구조와 객체

  • mysql table 구조
create table User (
    id varchar(255) not null,
    name varchar(255),
    age integer,
    primary key(id)
);
  • JPA Entity class
@Getter
@Entity
@Table(name="users")
public class User {
    @Id
    private String id;
    private String name;
    private Integer age;
}

JPA Entity Annotation

  1. @Entity
  • class를 table과 mapping 한다고 JPA에서 알려주는 기능
  • @Entity가 붙으면 Entity class라고 부른다
  1. @Table
  • mapping할 DB table정보를 설정
  • name : table명 변경 가능, default : class 소문자 명
  1. @Id
  • pk를 설정
  • 식별자 필드라고 한다
  1. @Column
  • Entity class의 필드 값을 DB 컬럼에 Mapping해준다
  • name을 통해서 column명 수정 가능
  • 이 annotation이 없으면 필드명이 column명이 된다
    • ex) numberOfDay -> number_of_day

DB 방언

  1. 방언의 발생 : DB는 표준이 정해져 있지 않고, 동일한 기능에 대해서 회사마다 코드가 일부분 다름
  2. 방언 예시
  • 데이터 타입 : mysql - varchar, oracle - varchar2
  • 함수명 : mysql - substring(), oracle - substr()
  • paging 처리 : mysql - limit, oracle - rownum
  1. 방언 설정
  • H2 : org.hibernate.dialect.H2Dialect
  • Oracle 10g : org.hibernate.dialect.Oracle10gDialet
  • Mysql : org.hibernate.dialect.MySQL5InnoDBDialect
  1. yml을 통한 설정
spring:
    jpa:
        properties:
            hibernate:
                dialect: org.hibernate.dialect.MySQL5InnoDBDialect

JPA를 통한 개발 구조

  1. 코드의 구조
  • EntityManager 설정
  • Transactioon 관리
  • 비즈니스 로직
public class Main {
    public static void main(String[] args) {
        // EntityFactory 생성
        Entitymanagerfactory emf = Persistence,createEntityManagerFactory("jpa");
        // jpa 는 persistence.xml 파일에 등록된 DB연결 xml 정보의 이름

        // EntityManager 생성
        EntityManager em = emf.createEntityManager();

        // Transaction 생성
        EntityTransaction tx = em.getTransaction();


        try {
            tx.begin();     // 트랜젝션 시작 지점
            businessLogic(); // 비즈니스 로직 실행
            tx.commit(); // transaction commit
        } catch(Exception e) {
            tx.rollback(); // transaction 내에 코드 실패시 rollback
        } finally {
            em.close; // entity manager 종료
        }
        emf.close; // entity factory 종료
    }
}

EntityManger와 EntityManagerFactory

  1. EntityManagerFactory 생성
  • EntityFactory가 생성 되었을때 입력 받은 persistence.xml의 설정 정보를 사용해서 EntityManager 객체 생성
  1. EntityManager
  • Entity를 DB에 등록/수정/삭제/조회를 할 수 있게 한다.
  • Entity Manager는 DB connection과 관련이 있으므로 multi thread끼리 공유하면 안됩니다.

Trasaction 관리와 비즈니스 로직

  1. 트랜젝션 관리
  • 트랜젝션 안에서 데이터 crud가 발생해야 한다.
  • 트랜젝션 외에서 em를 사용하면 예외 발생
  • 오류가 발생하지 않으면 commit을 호출
  • 오류 발생 : rollback함수 호출
  1. 비즈니스 로직
  • em을 통해서 CRUD 로직을 수행
public static void businessLogic() {
    String id = "id1";
    User user = new User(id);
    user.setName("kkh");
    user.setAge(26);

    // 등록
    user = em.persist(user);

    // 수정
    em.setAge(27);

    // 한개의 User 조회
    User findUser = em.find(User.class. id);

    // User 목록 조회
    List<User> users = em.createQuery("SELECT u FROM User u", User.class)
                        .getResultList();

    // 삭제
    em.remove(user);
}
  • 수정시에는 setter 함수를 호출해서 entity 클래스의 필드 값을 변경하면 수정이 일어납니다.
    • update함수는 없습니다.

JPQL

  • 정의 : JPQL(Java Persistence Query Language)이라고 객체, 필드 중심의 SQL문을 의미한다.
  • join과 같은 복잡한 SQL인 경우 사용
  • JPQL은 table의 구조를 전혀 모른다
  • em.createQuery(JPQL, 반환 타입) 을 통해서 쿼리 객체 생성
  • getResultList() 메소드를 통해서실제 쿼리문과 결과 값을 반환
  • 대소문자 구분하지 않음
반응형

'JPA > ORM 표준 JPA' 카테고리의 다른 글

06 연관관계 Mapping 종류  (2) 2021.08.21
05 연관관계  (0) 2021.07.28
04 Entity  (3) 2021.07.08
03. 영속성  (0) 2021.06.30
01. JPA 소개  (0) 2021.05.19