320x100
반응형
JPA공부함에 있어서 내용은 인프런 김영한님 강의와 책을 참고하여 정리한 것입니다 (필기 및 공부정리용)
https://www.inflearn.com/course/ORM-JPA-Basic#
JPA공부 시작
이전에
JSP
웹을 만드는 것을 공부하면서 DB접근에서 jdbc를 사용하여 개발을 하였는데 너무 반복적인 일만 하고 데이터베이스와 웹을 연결하는 역할 만을 하는 것을 느꼈고 귀찮음이 생겨 찾아보니JPA
를 통해서 더욱 간편하게 개발을 할 수 있다고 알게 되어 공부를 시작 하게 되었다.
JPA란
자바진영의 ORM 기술 표준 명세이다
- ORM: Object Relational Mapping의 약자로 객체와 관계형DB를 매핑 해주는 것
JPA시작
dependency 설정
<dependencies>
<!--JPA 하이버네이트-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!--h2 데이터베이스-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
persistence.xml
JPA를 실행하기 위한 기본 설정파일
<?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"/>
</properties>
</persistence-unit>
</persistence>
Entity manager 생성 과정
- 설정 정보를 상요해서 Entity managerfactory를 생성
- Entity managerfactory로부터 Entity manager생성
- 사용 후 각각 종료
EntityManagerFactory.close()
EntityManager.close()
Entity manager는 Connection과 같이 절대로 공유를 하면 안된다
기존에 JDBC를 사용하면서 DriverManager로부터 connection을 얻고 해당 connection으로 statement를 얻는 것과 비슷하다
데이터 관리
JPA에서는 데이터 변경과정을 transaction이라는 단위 안에서 해야함!!
transaction없이 변경을 하면 예외가 발생한다
table 이름을 지정을 하지 않으면 class명으로 지정
@Entity
: 클래스를 테이블에 매핑한다고 알려줌, 엔티티 클래스 (필수)@Table
: 테이블 정보 알려줌@Id
: primary key에 매핑 필히 해야함 (필수)@Column
: 필드를 칼럼명으로 매핑, 칼럼명이 다르면 사용
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
//transaction 시작
tx.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("memberA");
em.persist(member);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
//transaction 끝
em.close();
}
emf.close();
}
320x100
반응형
'공부기록 > JPA' 카테고리의 다른 글
JPA-프록시 (0) | 2022.01.26 |
---|---|
JPA-고급매핑2 (0) | 2022.01.20 |
JPA 고급매핑1 (0) | 2022.01.20 |
JPA 연관관계 매핑 (0) | 2021.12.29 |
JPA 엔티티 (0) | 2021.12.26 |