ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2.2.6 퍼시스턴스 레이어 : 스프링 데이터 JPA
    Spring/웹 개발 101 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 요청과 응답을 어떻게 넘겨받고 리턴하느냐, 즉 외부 세계와 통신하는 규약을 정의함.  
    반응형

    댓글

Designed by Who.