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 요청과 응답을 어떻게 넘겨받고 리턴하느냐, 즉 외부 세계와 통신하는 규약을 정의함.
반응형