Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 그리디 알고리즘
- 현금흐름표
- 금리인상
- 기업분석
- javascript
- XLF
- 다형성
- 금리인하
- 잉여현금흐름
- 객체지향
- StringBuffer
- 오버라이딩
- 알고리즘
- 백준
- 미국주식
- 프로그래머스
- 무디스
- 인플레이션
- 주린이
- 배당성장
- object
- 자바
- mco
- S&P500
- 제태크
- FCF
- 주식
- Java
- etf
- 접근제어자
Archives
- Today
- Total
오늘의하루
JPA의 의미 및 기본 사용 방법 본문
JPA란?
Java Persistence API의 줄임말이며 자바 ORM 기술 표준을 의미한다.
ORM이란?
Object-Relational-Mapping으로 객체 관계 매핑을 의미한다.
- 객체는 객체대로 관계형 DB는 관계형 DB대로 설계
- ORM 프레임워크가 중간에서 매핑을 해준다.
JPA를 사용하는 이유
1. SQL 중심적인 개발에서 객체 중심으로 개발이 가능하다.
2. 생산성이 높아진다.
3. 유지보수에 용이하다.
4. 패러다임의 불일치를 해결할 수 있다.
5. 성능
6. 데이터 접근 추상화와 벤더 독립성
JPA 설정
/META-INF/persistence.xml 파일을 만들어줘야한다.
<?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="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" />
<!-- 옵션 -->
<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>
- javax.persistence는 JPA 표준 속성을 의미한다.
- 이는 구현체(현재 hibernate)를 변경해도 그대로 사용가능하다.
- hibernate는 Hibernate 속성을 의미한다.
- hibernate.dialect는 방언을 의미한다.
- 이는 각각의 데이터 베이스가 제공하는 SQL 문법과 함수가 다르기 때문에 이를 각 상황에 맞춰서 매핑해주기 위해 설정하는것이다.
- 예시로 OracleDialect, MySQLDialect 등이 있다.
JPA의 구동 방식
1. /META-INF/persistence.xml에서 설정한 정보를 조회 한다.
2. Persistence 객체를 만든다.
3. Persistence 객체를 사용하여 EntityManagerFactory 객체를 생성한다.
- EntityManagerFactory는 하나만 생성하여 애플리케이션 전체에서 공유한다.
4. EntityManagerFactory로 EntityManager 객체를 만들어서 사용한다.
- EntityManager는 쓰레드간 공유를 해서는 안된다.
JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 한다.
JPA 소스 코드
DTO
@Entity // JPA에서 사용하는 객체라는걸 알려주기 위한 어노테이션
// Table Name은 기본적으로 Class Name으로 지정된다.
// 변경하고 싶다면 아래와 같이 지정할 수 있다.
// @Table(name = "Member")
public class Member {
@Id // Primary key를 알려주기 위한 어노테이션
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
JPA 사용 코드
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unit Name");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin(); // 트랜젝션 시작
try{
// Insert Code
Member member = new Member();
member.setId(1L);
member.setName("JPA1");
// Select Code
Member findMember = em.find(Member.class, 1L);
// Delete Code
Member findMember = em.find(Member.class, 1L);
em.remove(findMember);
// Update Code
Member findMember = em.find(Member.class, 1L);
findMember.setName("Hello JAP");
// JPQL 맛보기
List<Member> result = em.createQuery("select m from Member as m")
.setFirstResult(1)
.setMaxResults(8)
.getResultList();
for(Member m : result){
Sysetem.out.println(m.getName());
}
tx.commit();
}catch(Exception e){
tx.rollback();
}finally{
em.close();
}
emf.close();
'Spring > JPA' 카테고리의 다른 글
JPA 연관 관계 매핑 - start (1) | 2024.01.14 |
---|---|
JPA 기본키 매핑 (1) | 2024.01.12 |
JPA 엔티티 매핑 (0) | 2024.01.02 |
JPA에서 batch_size를 지정하는 이유는? (0) | 2024.01.02 |
JPA의 영속성 관리 (0) | 2023.12.31 |
Comments