반응형
JPA 설정하기
-
위치가 정해져 있음.
-
Dialect ?
- 데이터베이스들은 각각 SQL 문법과 함수가 조금씩 다르다.
- 예를 들어 Mysql은 VARCHAR, Oracle은 VARCHAR2
- 페이징 : Mysql은 LIMIT, Oracle은 ROWNUM
- 방언 -> SQL 표준을 지키지 않는 특정 데이터베이스 만의 고유한 기능.
- 데이터베이스들은 각각 SQL 문법과 함수가 조금씩 다르다.
JPA 구동 방식
- 설정정보를 보고 나서, entity manager factory를 만든다.
persistenceUnitName (pom.xml 에서 설정된 게 있음) 인자를 넣어서 createEntityManagerFactory
궁금한 점 : 트랜잭션마다 entity manager 를 새롭게 만들어야 하는 이유가 뭐지?
create table Member(
id bigint not null,
name varchar(255),
primary key (id)
);
- @Entity : em 이 관리할 객체
- 트랜잭션 단위마다? em을 만들어서 수행해야 한다.
- transaction 단위를 이용해서 데이터 변경 단위를 관리해야한다.
- Transaction transaction = em.getTransaction();
- transaction.begin();
- transaction.commit();
- class 이름과 다르게 데이터 베이스에 저장할 테이블 설정 가능
- 필드 명과 칼럼 명이 다를 때도 설정 가능
데이터 베이스에 저장해두었던 정보 변경하기
-
다시 저장을 하지 않아도 setName() 만 호출했는데도 실제 데이터베이스의 값이 변경된다.
-
그렇게 되는 이유
- 트랜잭션 커밋 직전에 변경된게 있다면 entity manager가 update 쿼리 문을 만들어서 날림.
- 트랜잭션 커밋 직전에 변경된게 있다면 entity manager가 update 쿼리 문을 만들어서 날림.
-
주의 할 점
- entity manager factory는 애플리케이션 전체에 하나만 존재해야한다.
- entity manager는 쓰레드 간에 공유하면 안된다.
- JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.
하나만 찾는게 아니라 특정 조건을 만족하는 객체를 모두 찾고 싶다면?
JPQL
-
JPA 가 객체 지향 프로그래밍을 돕는 만큼 그에 맞는 쿼리를 사용한다: JPQL. (객체 지향 쿼리 언어)
-
JPA 를 사용하면 엔티티 객체를 중심으로 개발할 수 있다.
-
문제는 검색 쿼리이다.
- 검색을 할 때도 테이블이 아니라 엔티티 객체를 대상으로 검색한다.
- 결국 검색조건이 포함된 SQL 이 필요한 것이다.
-
JPA는 SQL 을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
-
SQL 과 문법이 유사하고 SELCT, FROM, WHERE, GROUP BY, HAVING, JOIN을 지원한다.
-
JPQL은 데이터베이스 테이블을 대상으로 하는 sql과 다르게 엔티티 객체를 대상으로 쿼리를 작성한다.
-
가장 단순한 조회방법
- entityMamger.find({class} , {id})
-
원하는 조건의 객체를 모두 조회하고 싶다면?
- (내가 원하는 데이터를 최적화해서 가져오는 방법 & 통계 내기)
JPQL 사용 시 장점?
- pagination (5번째부터 8번째까지 가져와라. )
- 각 데이터베이스의 방언에 맞게 쿼리를 만들어줌.
- sql 을 작성하는게 아니라 객체 중심으로 쿼리를 작성해서 사용할 수 있다.
반응형
'개발 > java' 카테고리의 다른 글
Spring 에서 configuration 을 다루는 방법 - @Value vs @ConfigurationProperties (2) | 2024.02.26 |
---|---|
[Spring - JPA] 3. 영속성관리 (1) | 2024.02.18 |
[Spring - JPA] 1. JPA 소개 (1) | 2024.02.03 |
[Spring - DB] 1. JDBC 이해 (2) | 2024.01.07 |
[Spring 기본] 6. 의존관계 자동 주입 (1) | 2024.01.06 |