Language/Java

[JPA] JPA 라이브러리란? 1편, JPA의 기본 구조

Lar 2023. 5. 22. 00:25
반응형

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

 

[MyBatis] MyBatis 란? 마이바티스 사용법

MyBatis 마이바티스 마이바티스는 자바 언어를 위한 오픈 소스 데이터 매퍼 프레임워크이다. 데이터 매퍼는 데이터베이스와 어플리케이션간의 상호작용을 담당하는 계층으로, 데이터베이스의 데

skylarcoding.tistory.com

 

 

반응형