JPA는 MyBatis 와 비슷한 역할을 하는 라이브러리로, 자바에서 데이터베이스와의 상호 작용을 추상화하는 API이다. JPA는 객체-관계 매핑(Object-Relational Mapping, ORM)을 지원하며, 개발자가 객체 지향적인 방식으로 데이터베이스를 다룰 수 있게 도와준다.
JPA 에서는 이름이 중요하다. JPA 자체에서 데이터 베이스를 생성하기 때문에 대소문자등을 코드 전체에서 똑같이 사용하도록 해야한다. 특히, 데이터 베이스의 이름이 생성될 때 대문자는 하나의 문자로 인식하므로 주의하여야 한다.
ex) MyProduct -> my_product
Myproduct -> myproduct
JPA Pom.xml 추가하기
Pom.xml에서 아래의 문장을 추가한다.
* spring.jpa.database=oracle //데이터 베이스
* spring.jpa.show-sql=true // JPA의 값을 보여줄 것인지 아닌지 선택
#jpa
spring.jpa.generate-ddl=true
spring.jpa.database=oracle
spring.jpa.show-sql=true
JPA_VO & DTO 추가하기
JPA에서 VO(value object)는 값을 담는 객체이며(테이블), DTO(data transfer object)는 데이터를 이동시키는 객체이다. JPA에서 사용되는 VO는 테이블을 생성하는 것이고, DTO는 기존에 우리가 사용하던 VO라고 보면된다.
이 둘을 분리하게 된 이유는 이전에서 계속 실습했다시피, 테이블과 VO의 컬럼이 다른 경우도 있기 때문이다. 이전에는 VO 하나로 사용했고, 기본적으로 프로그램이 동작하는데 큰 문제는 없지만 결과적으로는 여러가지 문제점이 발생한다고 한다. (이해는 잘 못했는데, 아무튼 같이 사용하면 안좋아서 따로 분리해서 코딩하는 추세라고 한다. 유행을 따라가도록 하자.)
※ DTO에서는 @Entity 어노테이션을 붙이지 않는다. 테이블 정의를 위한 어노테이션이기 때문이다.
@Entity //테이블 정의 (MyProduct라는 테이블 만들어줌)
public class MyProduct {
@Id //primary key를 나타냄 - num
private int num;
private String name;
private int price;
private int amount;
}
JPA_DAO
DAO는 JpaRepository를 인용하고 <테이블명, Primary key> 값을 입력해준다. 인터페이스로 생성해주는 것 잊지말기. 파라메터가 primary key인 것들은 DAO에 따로 추가하지 않고 바로 Service 에 추가해도 된다. 만약 primary key 값이 파라메터에 들어가지 않는다면, DAO에 추가해야한다. 다음 포스팅에서 JPA 어노테이션에 대해 다루고자 한다.
public interface MemberDao extends JpaRepository<테이블, ID> {
}
⬇️ MyBatis 설명 보러가기
https://skylarcoding.tistory.com/107