티스토리 뷰

우선, Spring 프로젝트에서 JPA를 사용하려면, 해당 프로젝트의 Project Facets에서 JPA를 다음과 같이 추가해야 한다.

 

위와 같이 추가를 해주면, src/main/resources/META-INF 폴더에 persistence.xml 설정 파일이 생성된다.

 

이후 pom.xml 에서 hibernate의 dependency를 추가한다.

 

◎pom.xml

<!-- Hibernate -->
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>5.1.0.Final</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>${org.springframework-version}</version>
</dependency>

이제, JPA Entity 파일을 생성하자.

 

◎TodoEntity.java

package com.choonham.tdl.dto;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


@Entity
@Table(name = "todolist")
public class TodoEntity implements Serializable {

	
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue
	private String sequence;
	
	private String id;
	private String name; 
	private String title;
	
	@Temporal(TemporalType.DATE)
	private Date regdate;
	private String type;
	
	public TodoEntity() {
		super();
	}

	// getter&setter 생략
	
   
}

이제 마찬가지로 persistence.xml 파일을 작성해준다.

 

◎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="to_do_list_springMVC">
  <class>com.choonham.tdl.dto.TodoEntity</class>

  <properties>
    <!--  필수 속성 -->
    <property name="javax.persistence.jdbc.driver" value ="oracle.jdbc.driver.OracleDriver"></property>
    <property name="javax.persistence.jdbc.user" value ="choonham"></property>
    <property name="javax.persistence.jdbc.password" value ="6725"></property>
    <property name="javax.persistence.jdbc.url" value ="jdbc:oracle:thin:@127.0.0.1:1521:XE"></property>
    <property name="hibernate.dialect" value ="org.hibernate.dialect.Oracle12cDialect"></property>

    <!-- sql 구문을 콘솔창에 나타낸다. -->
    <property name = "hibernate.show_sql" value ="true"/>

    <!-- sql 구문을 가독성이 좋게 들여쓰기한다. -->
    <property name = "hibernate.format_sql" value ="true"/>

    <!-- sql 내 주석도 함께 내보낸다. -->
    <property name = "hibernate.use_sql_comments" value ="true"/>

    <!-- 새로운 키 생성 전략을 사용한다. -->
    <property name = "hibernate.id.new_generator_mappings" value ="true"/>

    <!--  ddl을 자동 커밋한다. -->
    <property name = "hibernate.hbm2ddl.auto" value ="create"/>

  </properties>

  </persistence-unit>
</persistence>

다음으로, Spring 설정 파일에서 JPA 연동에 대한 설정을 작성해야한다. 

 

◎root-context.xml

<!--  JPA 연동 -->
<bean id = "jpaVenderAdapter" 
	class ="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>

<bean id = "entityManagerFactory"
	class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource"></property>
  <property name="jpaVendorAdapter" ref="jpaVendorAdapter"></property>
</bean>

 

또한 기존 Spring 프로젝트와는 달리 DB 연동을 Spring JDBC가 아닌 JPA를 사용하여 연동하기 때문에 Transaction 또한 JPA에서 제공하는 Transaction Manager를 사용해야 한다.

 

◎root-context.xml

<!--  JPA 연동 -->
<bean id = "jpaVenderAdapter" 
	class ="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>

<bean id = "entityManagerFactory"
  class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource"></property>
  <property name="jpaVendorAdapter" ref="jpaVendorAdapter"></property>
</bean>

<!--  Transaction Registration -->	
<bean id = "transactionManager" class = "org.springframework.orm.jpa.JpaTransactionManager">
  <property name = "entityManagerFactory" ref = "entityManagerFactory"/>
</bean>

마지막으로 실제 기능을 수행할 DAO를 작성해준다.

 

◎DAO

package com.choonham.tdl.repository;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

import com.choonham.tdl.dto.TodoEntity;

@Repository
public class TodoDAO {

	@PersistenceContext
	private EntityManager em;
	
	public void insertTodo(TodoEntity vo) {
		em.persist(vo);
	}
	
	public void updateTodo(TodoEntity vo) {
		em.merge(vo);
	}
	
	public void deleteTodo(TodoEntity vo) {
		em.remove(vo);
	}
	
	public TodoEntity getTodo(TodoEntity vo) {
		return (TodoEntity) em.find(TodoEntity.class, vo.getSequence());
	}
	
	public List<TodoEntity> getTodoList(){
		return em.createQuery("from todolist t order by t.sequence desc").getResultList();
	}

	public TodoDAO() {
		
	}

}

 

이제 해당 메서드를 사용하는 Controller 부분을 수정해주면 마무리가 된다.

(이 부분은 자주 반복됐던 부분이니 따로 설명은 추가하지 않겠다.)

'WEB > JPA' 카테고리의 다른 글

[JPA] JPA 시작하기  (0) 2021.07.05
Comments