-
JPA - 프로젝트 생성Web/JPA 2024. 1. 11. 10:47
> JPA를 사용하기 위해서는 hibernate-entitymanager 필요함
> persistence.xml파일이 필요 (Spring 없이 순수 자바에서 jpa 활용) > DB연동, 엔티티 매니저 팩토리 생성시 필요
> persistence-unit name에 매니저 팩토리 생성시 불러올 이름 지정
> javax.persistence로 시작하는 속성은 JPA표준 속성이고, hibernate로 시작하는 속성은 하이버네이트 전용 속성이다.
* 어떤 DB접근 기술을 사용하던 커넥션풀과 데이터 소스 등록필수!
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="he"> <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"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties> </persistence-unit> </persistence>
-> dialetc는 DB 방언 부분임
-> JPA는 특정 데이터 베이스에 종속적이지 않고, 어떤 DB를 사용하던 똑같이 서비스하도록 설계됨
-> 따라서 각 DB마다 문법과 함수가 다른것은 어떤 DB를 기준으로 쿼리를 작성하고 해석할 것인지 알려주는 작업이 필요하다
-> 여기서 방언이란 표준이 아닌, 특정 데이터 베이스에만 고유한 기능을 의미
2. JPA 작동 방식
- Persistence가 xml설정정보를 통해 매니저 팩토리 생성 -> 매니저를 통해서 JPA사용 (다른 DB접근 기술들과 유사)
- 트랜잭션마다 엔티티 매니저를 꼭 생성해서 사용해야한다 보통 앤티티 매니저들은 WAS가 내려갈때 같이 없어진다.
- 조회와 같은 작업은 트랜잭션이 없어도 작동하지만, 이외의 작업은 트랜잭션 단위에서 실행해야 반영된다!
3. 간단한 작동 예시
@Entity public class Member{ @Id private Long id; private String name; } //.. { //엔티티 매니저 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("he"); //매니저 얻기 EntityManager em = emf.createEntityManager(); //트랜잭션 얻기 EntityTransaction tx = em.getTransaction(); //정석대로 사용하는 방법 -> jpa 순수 tx.begin(); try{ Member member = new Member(); member.setId(2L); member.setName("HelloB"); em.persist(member); //기존에 등록된 member update Member findmember = em.find(Member.class, 1L); findmember.setName("helloJPA"); tx.commit(); }catch (Exception e){ tx.rollback(); //에러 발생시 롤백 e.printStackTrace(); }finally { //작업 완료후 em반환하기 em.close(); } //다 끝나면 닫아주기 emf.close(); }
> @Entity: JPA가 관리할 객체
> @Id: 데이터베이스 PK와 매핑
> 엔티티 매니저는 쓰레드 사이에서 공유하면 안된다. -> 사용 후 close
> 업데이트는 비교적 간단. 영속성에서 관리해주는 Entity라면 그냥 변경하면 SQL 혹은 Commit시점에 변경감지를 통해 적용
> JPA의 장점은 객체간 그래프 탐색(a.get().get())이 가능하다는 점이다! -> DB를 객체지향스럽게 사용할 수 있다.
4. JPQL
> JPA는 검색시에도 테이블이 아닌 엔티티 객체를 대상으로 섬색
> 모든 데이터를 객체로 변환해서 검색하는 것은 불가능하다! 따라서 SQL도 당연히 필요하다.
> JPQL은 SQL을 추상화해서 객체 지향 쿼리 언어를 제공한다. (엔티티 객체를 대상으로 쿼리를 날린다)
'Web > JPA' 카테고리의 다른 글
JPA (2) - API 개발 시 기본으로 지켜야 할 사항 (0) 2024.01.22 JPA (11) - 다형성 쿼리,엔티티 직접 사용,정적쿼리,벌크연산 (0) 2024.01.12 JPA 활용 (1-3) - 엔티티 설계시 주의점 (0) 2024.01.04 JPA 활용 (1-2) - 도메인 분석 설계 (0) 2024.01.04 JPA 활용 (1) - 프로젝트 환경설정 (1) 2024.01.04