2023. 12. 31. 12:59ㆍSpringBoot+JPA
[SpringBoot 구조] Repository 설명 및 정의 / 어노테이션
[SpringBoot 구조] Entity 설명 및 정의 / 어노테이션 더보기 [목차] - Entity 정의 - Entity 구조 - Entity에 사용되는 어노테이션 종류 Entity 정의 자바 어플리케이션에서 관계형 데이터베이스의 데이터를 객
dalhyehye.tistory.com
Repository
검색어를 받아서 서비스에서 처리 후,결과를 페이지에 전달
1) Repository에 필요한 메소드를 생성
2) Service에서 해당 Repository를 수행 할 메소드 생성
3) Controller에서 Service의 메소드를 지정
기본 제공 : save, delete, findAll, findById, count
findBy~ : 1개의 결과물 조회. 조건에 맞는 모든 결과물 조회
오름차순(ASC), 내림차순(DESC)
자동으로 %가 붙는 경우
모든 결과물을 id기준 내림차순
findAllByOrderByIdDesc
Repository 선언
목록 정렬 처리 (기본키를 이용해서 정렬)
오름차순(ASC), 내림차순(DESC)
findBy~ : 1개의 결과물 조회. 조건에 맞는 모든 결과물 조회
Select * From Board Order By id desc;
List<BoardEntity> findAllByOrderByIdDesc();
모든 결과물을 id기준 내림차순
Service 선언
전체 목록을 내림차순으로 조회
public List<BoardDTO> listOrder() throws Exception {
List<BoardEntity> boardEntityList = boardRepository.findAllByOrderByIdDesc();
List<BoardDTO> boardDTOList = Arrays.asList(modelMapper.map(boardEntityList, BoardDTO[].class));
return boardDTOList;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listOrder();
model.addAttribute("lists", lists);
return "/board/list"; }
제목을 검색해서 조회
findAllBySubject
Repository 선언
제목을 검색해서 조회
검색할 값을 subject로 받아서 Subject필드에서 동일한 값을 조회
Select * From Board where subject = :subject
List<BoardEntity> findAllBySubject (String subject);
Service 선언
검색어를 통해서 해당 제목을 조회 (정확히 일치해야 검색 됨)
public List<BoardDTO> listSubjectSearch (String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubject(search);
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectSearch(search);
model.addAttribute("lists", lists);
return "/board/list";
}
앞에 문자열이 포함되어 있는(StartsWith 문자열%)
findAllBySubjectStartsWith
Repository 선언
앞에 문자열이 포함되어 있는 제목을 조회
StartsWith는 앞에 문자열이 포함되어 있는 경우 %문자열
Select * From Board where subject = %:subject
List<BoardEntity> findAllBySubjectStartsWith (String subject);
Service 선언
데이터베이스 명령에서 like는 포함되어 있는 문자열 검색
앞에 문자열이 포함되어 있는 제목을 조회
public List<BoardDTO> listSubjectStart(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubjectStartsWith(search);
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectStart(search);
model.addAttribute("lists", lists);
return "/board/list";
}
뒤에 문자열이 포함되어 있는( EndsWith 문자열%)
findAllBySubjectEndsWith
Repository 선언
뒤에 문자열이 포함되어 있는 제목을 조회
EndsWith는 뒤에 문자열이 포함되어 있는 경우 문자열%
Select * From Board where subject = :subject%
List<BoardEntity> findAllBySubjectEndsWith(String subject);
Service 선언
뒤에 앞에 문자열이 포함되어 있는 제목을 조회
public List<BoardDTO> listSubjectEnd(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubjectEndsWith(search);
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectEnd(search);
model.addAttribute("lists", lists);
return "/board/list";
}
문자열이 포함된 제목을 조회
findAllBySubjectContains
Repository 선언
문자열이 포함된 제목을 조회
Contains는 문자열이 포함되어 있는 경우 %문자열%
Select * From Board where subject = %:subject%
List<BoardEntity> findAllBySubjectContains(String subject);
Service 선언
앞뒤에 문자열이 포함되어 있는 제목을 조회
public List<BoardDTO> listSubjectContains(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubjectContains(search);
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectContains(search);
model.addAttribute("lists", lists);
return "/board/list";
}
수동으로 %추가 해줘야 하는 경우
문자열의 위치를 수동으로 지정해서 제목을 조회
findAllBySubjectLike
Repository 선언
문자열의 위치를 수동으로 지정해서 제목을 조회
Like는 %을 추가해서 문자열의 위치를 지정 --> %문자열%, %문자열, 문자열%
List<BoardEntity> findAllBySubjectLike(String subject);
Service 선언
수동으로 문자열이 포함되어 있는 제목을 조회
public List<BoardDTO> listSubjectLike(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubjectLike("%"+search+"%");
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result; }
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectLike(search);
model.addAttribute("lists", lists);
return "/board/list";
}
질의어를 임의로 작성해서 제목을 조회
findAllBySubjectSql
@Query("SELECT u FROM BoardEntity u WHERE u.subject like :subject")
Query("Select 별칭명 From 테이블명 별칭명 where 별칭명.필드명 = ...)
u(boardentity의 모든 필드) from boardEntity u(앞으로 boardEntity를 u로 호칭)
u.subject(boardentity의 subject 필드) : subject(받은 변수명)
Repository 선언
질의어를 임의로 작성해서 제목을 조회
대문자는 문법
@Query("SELECT u FROM BoardEntity u WHERE u.subject like :subject")
List<BoardEntity> findAllBySubjectSql(String subject);
Service 선언
Query를 이용한 제목을 조회
public List<BoardDTO> listSubjectSql(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubjectSql("%"+search+"%");
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result; }
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectSql(search);
model.addAttribute("lists", lists);
return "/board/list";
}
필드명과 전달받은 변수명이 다른 경우
findAllBySubjectSqlNo
@Query("SELECT u FROM BoardEntity u WHERE u.subject like :subject")
Repository 선언
필드명과 전달받은 변수명이 다른 경우
@Param("subject") String name : name을 subject변수로 사용
@Query("SELECT u FROM BoardEntity u WHERE u.subject like :subject")
List<BoardEntity> findAllBySubjectSqlNo(@Param("subject") String name);
Service 선언
서로 다른 변수를 연결하여 제목을 조회
public List<BoardDTO> listSubjectSqlNo(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllBySubjectSqlNo("%"+search+"%");
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result; }
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listSubjectSqlNo(search);
model.addAttribute("lists", lists);
return "/board/list";
}
2개의 필드를 이용해서 조회 (제목과 작성자)
findAllByField
@Query("SELECT u FROM BoardEntity u WHERE u.subject like :subject OR u.writer like:writer")
Repository 선언
2개의 필드를 이용해서 조회 (제목과 작성자)
JPA에서 Query를 이용할 때는 메소드 규칙은 필요 없음
@Query("SELECT u FROM BoardEntity u WHERE u.subject like :subject OR u.writer like:writer")
List<BoardEntity> findAllByField(String subject, String writer);
Service 선언
2개 이상의 필드로 조회
public List<BoardDTO> listManyField(String search) throws Exception {
List<BoardEntity> list = boardRepository.findAllByField("%"+search+"%", "%"+search+"%");
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result; }
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listManyField(search);
model.addAttribute("lists", lists);
return "/board/list";
}
번호 10보다 작은 자료만 조회
findAllByIdLessThan
이하(LessThan)Equal / 미만(LessThan)
Repository 선언
번호 10보다 작은 자료만 조회
List<BoardEntity> findAllByIdLessThan(int id);
Service 선언
아이디가 10보다 작은 게시물 조회
public List<BoardDTO> listLessThan(int id) throws Exception {
List<BoardEntity> list = boardRepository.findAllByIdLessThan(id);
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listLessThan(10);
model.addAttribute("lists", lists);
return "/board/list";
}
조회수가 20 이상 자료만 조회
findAllByIViewcountGreaterThanEqual
이상(GreaterThanEqual) / 초과(GreaterThan)
Repository 선언
조회수가 20이상인 자료만 조회
List<BoardEntity> findAllByViewcountGreaterThanEqual(int viewcount);
Service 선언
조회수가 20이상인 자료만 조회
public List<BoardDTO> listGreaterThanEqual(int viewcount) throws Exception {
List<BoardEntity> list = boardRepository.findAllByViewcountGreaterThanEqual(viewcount);
List<BoardDTO> result = Arrays.asList(modelMapper.map(list, BoardDTO[].class));
return result;
}
Controller 선언
@PostMapping("/selectlist")
public String selectProc(String search, Model model) throws Exception {
List<BoardDTO> lists = boardService.listGreaterThanEqual(70);
model.addAttribute("lists", lists);
return "/board/list";
}
📌 참고 사이트
JPA Query Methods :: Spring Data JPA
By default, Spring Data JPA uses position-based parameter binding, as described in all the preceding examples. This makes query methods a little error-prone when refactoring regarding the parameter position. To solve this issue, you can use @Param annotati
docs.spring.io
'SpringBoot+JPA' 카테고리의 다른 글
[Java+SpringBoot+JPA] DML 정의 및 종류 / SELECT, INSERT, UPDATE, DELETE (0) | 2024.01.07 |
---|---|
[Java+SpringBoot+JPA]Restful API 정의 및 종류 / REST 및 API 정의 (0) | 2024.01.05 |
[JPA] jpa정의 / 사용이유 / 작성방법 (0) | 2023.12.31 |
[SpringBoot] Model 인터페이스 / 데이터전달 / 사용방법 (1) | 2023.12.31 |
[SpringBoot 구조] Controller 설명 및 정의 / 어노테이션 (0) | 2023.12.31 |