SpringBoot
## 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로 사용하여 총 페이지, 현재 페이지, 페이지 범위 등을 확인 할 수 있다.