107일차_SpringBoot

서창민·2023년 8월 14일
0

SpringBoot

목록 보기
11/13
post-thumbnail

23.08.14 107일차

SpringBoot

  • @Query 어노테이션
    조금 복잡한 쿼리를 사용하거나
    JOIN된 테이블을 조회할때 사용한다.
## Repository
	// JPQL 쿼리 어노테이션 (위치기반)
	@Query("SELECT b FROM TBL_MEMBER_PSD b WHERE b.GRADE like %?1% ORDER BY b.NO DESC")
	List<TBL_MEMBER_PSD> queryAnnotation1(String str1);

	// JPQL 쿼리 어노테이션 (이름기반)
	@Query("SELECT b FROM TBL_MEMBER_PSD b WHERE b.GRADE like %:str1% ORDER BY b.NO DESC")
	List<TBL_MEMBER_PSD> queryAnnotation2(@Param("str1") String str1);
    
    // JPQL 쿼리 어노테이션 (특점 칼럼만 출력)
	@Query("SELECT b.NO, b.NAME FROM TBL_MEMBER_PSD b WHERE b.GRADE like %:str1% ORDER BY b.NO DESC")
	List<Object[]> queryAnnotation3(@Param("str1") String str1);

이름 기반과 위치기반 특정컬럼만 출력하는 방법으로 나뉜다.
위치기반은 칼럼의 값이 있는 위치의 항목을 보여주며
이름기반은 해당하는 이름이 포함된 칼럼의 값을 보여주고,
특정컬럼은 배열값으로 받아 해당하는 컬럼의 값만 보여주게 된다.

## 인터페이스 
package com.Project0811.k7.project;

public interface MemberPsdVO {
	   String  getNO(); 
	   String  getNAME(); 
}


## Repository
	// JPQL 275 페이지 쿼리 어노테이션 (특점 칼럼만 출력)
	@Query(value="SELECT NO, NAME FROM TBL_MEMBER_PSD WHERE GRADE like '%'||:str1||'%' ORDER BY NO DESC", nativeQuery=true)
	List<MemberPsdVO> queryAnnotation4(@Param("str1") String str1);

추가적으로 특정칼럼을 출력하기 위해선 인터페이스를 추가해서 해당 메소드를 불러와 값을 출력하여 확인할 수 있다.

  • 페이징 정보
## Repository
	// 페이지 정보						
	Page<TBL_MEMBER_PSD> OrderByNODesc(Pageable paging);

## Service
package com.Project0811.k7.project;

import org.springframework.data.domain.Page;

public interface ProjectService {
	 Page<TBL_MEMBER_PSD> psdSelectAll();
}

## ServiceImpl
package com.Project0811.k7.project;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

@Service
public class ProjectServiceImpl<Pageable>	 implements ProjectService{
	
	@Autowired
	PsdRepository pRepo;
	
	@Override
	public Page<TBL_MEMBER_PSD> psdSelectAll() {
    	// 페이지 레코드 범위
		 PageRequest paging = PageRequest.of(0, 5) ;
			return (Page<TBL_MEMBER_PSD>) pRepo.OrderByNODesc(paging);
	}
}

## Controller
package com.Project0811.k7.project;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import jakarta.annotation.PostConstruct;
import jakarta.servlet.ServletContext;

@Controller
public class ProjectController {

	@Autowired
	private ProjectServiceImpl s;
	

	
	@GetMapping("/psdList.do")
	private String psdList(Model  model) { 		
		model.addAttribute("pageInfo",s.psdSelectAll());
		model.addAttribute("li", s.psdSelectAll());

		return "psd/psdList.html";
	}
}

해당 내용처럼 리턴 형을 Page로 사용하여 총 페이지, 현재 페이지, 페이지 범위 등을 확인 할 수 있다.

profile
Back-end Developer Preparation Students

0개의 댓글