세팅 및 기초
pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-hikaricp</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.6</version>
</dependency>
persistance.xml
- 해당 파일은 main/resources/META-INF에 생성해준다.
<?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="jpabegin" transaction-type="RESOURCE_LOCAL">
<!-- 맵핑 클래스 -->
<class>study.jpa.jpa01.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- 필수 속성(DB연결 설정) -->
<property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jakarta.persistence.jdbc.user" value="jpauser"/>
<property name="jakarta.persistence.jdbc.password" value="jpapass"/>
<!-- Docer 이용시에 해당 컨테이너 포트를 직접 확인하고 host와 port를 작성 -->
<property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://0.0.0.0:3306/jpabegin?characterEncoding=UTF-8"/>
<!-- 하이버네이트 사용 시 MySQL 문법을 사용 가능하도록 변경.-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<!-- 커넥션 Pool 설정 -->
<property name="hibernate.hikari.poolName" value="poll"/>
<property name="hibernate.hikari.maximumPoolSize" value="10"/>
<property name="hibernate.hikari.minimumIdle" value="10"/>
<property name="hibernate.hikari.connctionTimeout" value="1000"/>
</properties>
</persistence-unit>
</persistence>
기본기 사용
User.java
@Entity //DB 테이블과 맵핑 대상
@Table(name = "user") //user 테이블과 맵핑
public class User {
@Id //식별자에 대응(변수명과 칼럼의 이름이 같으면 다음과 같이 맵핑이 가능)
private String email; //email 칼럼과 맵핑
private String name; //name 칼럼과 맵핑
@Column(name = "create_date") //create_date 칼럼과 맵핑(변수명과 칼럼의 이름이 다르면 해당 칼럼을 명시해서 사용 가능)
private LocalDateTime createDate;
public User(String mail, String user, LocalDateTime now) {
this.email = mail;
this.name = user;
this.createDate = now;
}
public User() {
}
}
UserSaveMain.java
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import study.jpa.jpa01.User;
import java.time.LocalDateTime;
public class UserSaveMain {
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabegin");
EntityManager entityManager = emf.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
User user = new User("user@user.com", "user", LocalDateTime.now());
entityManager.persist(user); //데이터를 Inser할 때 사용한다.
transaction.commit();
} catch (Exception e){
e.printStackTrace();
transaction.rollback();
}finally {
entityManager.close();
}
emf.close();
}
}
UserGetMain.java
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import study.jpa.jpa01.User;
public class UserGetMain {
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabegin");
EntityManager entityManager = emf.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
User user = entityManager.find(User.class, "user@user.com");
if(user == null){
System.out.println("User 없음");
} else {
System.out.printf("User 있음, email=%s, name=%s, createTime=%s\n", user.getEmail(), user.getName(), user.getCreateDate());
}
transaction.commit();
} catch (Exception e){
e.printStackTrace();
transaction.rollback();
}finally {
entityManager.close();
}
emf.close();
}
}
UserUpdateMain.java
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
import study.jpa.jpa01.User;
public class UserUpdateMain {
public static void main(String[] args){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabegin");
EntityManager entityManager = emf.createEntityManager();
EntityTransaction transaction = entityManager.getTransaction();
try {
transaction.begin();
User user = entityManager.find(User.class, "user@user.com");
if(user == null){
System.out.println("User 없음");
} else {
String newName = "이름" + (System.currentTimeMillis() % 100);
user.setName(newName);
}
transaction.commit();
} catch (Exception e){
e.printStackTrace();
transaction.rollback();
}finally {
entityManager.close();
}
emf.close();
}
}
728x90
반응형
'FrameWorks > JPA' 카테고리의 다른 글
JPA Entity 단위 기본 CRUD처리 (0) | 2023.08.26 |
---|---|
JPA 기본 구조 & 영속성 컨텍스트 (0) | 2023.08.24 |
댓글