티스토리 뷰
우선, 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
최근에 올라온 글
최근에 달린 댓글
TAG
- javascript
- redux
- redux-thunk
- 이탈리안 레스토랑
- Promise
- Async
- 파니노구스토
- react-native
- 맛집
- 인천 구월동 맛집
- await
- react
- 정보보안기사 #실기 #정리
- 인천 구월동 이탈리안 맛집
- AsyncStorage
- Total
- Today
- Yesterday