Spring/웹 개발 101

2.2.6 퍼시스턴스 레이어 : 스프링 데이터 JPA

cosmohoo 2022. 4. 11. 01:09
반응형

◎ DBC 드라이버 : 자바에서 데이터베이스에 연결할 수 있도록 도와주는 라이브러리 

* 테이블 생성, 테이블에 엔트리 추가, 수정, 삭제 등이 웹서비스의 일부로 동작할 수 있기 도와주는 중간매개체

◎ ORM : 데이터베이스 연결 / SQL쿼리 준비 / 쿼리 실행과 같은 일련의 작업을 뜻함

◎DAO(Data Access Object) : ORM 작업을 집중적으로 도와주는 클래스 

◎JPA : 자바에서 데이터베이스 접근, 저장, 관리에 필요한 스펙(Specification)

	implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // 스프링 데이터 JPA를 사용하기 위한 라이브러

 

 

 

 

스프링 실행 로그

 

package com.example.demo.model;

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

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;


@Builder
@AllArgsConstructor
@Data
@NoArgsConstructor
@Entity
@Table(name="Todo")
public class TodoEntity {

		@Id
		@GeneratedValue(generator="system-uuid") //ID자동으로 생성, generator는 어떤 방식으로 ID를 생성할지 지정가능.
		@GenericGenerator(name="system-uuid", strategy="uuid")
		private String id;  //object의 ID
		private String userId; // 이 오브젝트를 생성한 사용자의 아이 
		private String title; // Todo타이틀(예: 운동하기) 
		
		private boolean done; //true - todo를 완료한 경우(checked))
}

 

package com.example.demo.persistence;


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.model.TodoEntity;

public interface TodoRepository extends JpaRepository<TodoEntity, String> {

}

 

package com.example.demo.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.demo.model.TodoEntity;
import com.example.demo.persistence.TodoRepository;


@Service
public class TodoService {
	
	@Autowired
	private TodoRepository repository;
	
	
	public String testService() {
		//TodoEntity 생성
		TodoEntity entity = TodoEntity.builder().title("My first todo item").build();
		//TodoEntity 저장
		repository.save(entity);
		//TodoEntity 검색
	TodoEntity savedEntity = repository.findById(entity.getId()).get();
	return savedEntity.getTitle();
	}

}

실행화면

 

 

그렇다면 기본적인 쿼리가 아닌 쿼리는 어떻게 작성할까? 

 

 

package com.example.demo.persistence;


import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.example.demo.model.TodoEntity;

public interface TodoRepository extends JpaRepository<TodoEntity, String> {
	
	
	//?1는 메서드의 매개변수의 순서 위치다. 
	@Query("select * from Todo where t.userId = ?1")
	List<TodoEntity> findByUserId(String userId);
}

 

 


총정리 

 

  • 퍼시스턴스 레이어 : 데이터베이스와 통신하며 필요한 쿼리를 보내고 해석해 엔티티 오브젝트로 변환해주는 역할
  • 서비스 레이어        : HTTP나 데이터베이스 같은 외부 컴포넌트로부터 추상화돼 우리가 온전히 비즈니스 로직에만 집중할 수 있도록 해줌
  • 컨트롤러 레이어    : 주로 HTTP 요청과 응답을 어떻게 넘겨받고 리턴하느냐, 즉 외부 세계와 통신하는 규약을 정의함.  
반응형