스프링/JPA
JPA-설정
coffee.
2023. 8. 29. 14:08
spring lagacy 프로젝트를 생성하고 프로젝트의 이름을 JPA_TEST로 하겠습니다.
이때, 템플릿은 스프링 MVC프로젝트로 합니다.
JPA를 사용하기 위해서는 pom.xml에 다음과 같은 의존성을 주입 해 주어야 합니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.14.Final</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
이 예제에서는 mysql을 사용할 것이라 mysql connector-j 를 추가 해 주었습니다.
클래스의 getter와 setter를 추가할 때 용이한 lombok도 추가 해 주었습니다.
프로젝트의 src/main/resource/META-INF 폴더에 persistence.xml 파일을 생성해 줍니다.
그리고 다음과 같이 작성 합니다.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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_1.xsd">
<persistence-unit name="hello">
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="1234"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa?characterEncoding=UTF-8&serverTimezone=UTC"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
<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>
다음과 같은 설정으로 jpa와 mysql을 연결 할 수 있습니다.
이제 src/main/java에 entity패키지를 만들고 member엔티티를 만듭니다.
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Data
@Entity
@Table
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
}
@Entity는 이 클래스를 엔티티로 지정한다는 의미 입니다.
@Table은 엔티티와 매핑할 테이블을 지정합니다
@Id 는 해당 컬럼을 pk로 설정 합니다.
이제 client클래스를 생성해서 멤버를 db에 추가해 봅시다.
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import com.woo.jpaTest.entity.Member;
public class Test {
public static void main(String[] args) {
EntityManagerFactory emf=Persistence.createEntityManagerFactory("hello");
EntityManager em =emf.createEntityManager();
EntityTransaction tx=em.getTransaction();
tx.begin();
Member member=new Member();
member.setName("Tom");
em.persist(member);
tx.commit();
}
}
다음과 같은 코드를 실행 하면
성공적으로 db에 값이 들어간것을 보실수 있습니다.
여기에서 persist메서드는 db에 값을 저장할때 사용하며 트랜잭션 안에서 동작합니다.