일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- zoom
- 작은화면
- 유튜브
- 아르데타인 떠돌이상인
- HWP
- https
- 로헨델 떠돌이상인
- 페이튼 떠돌이상인
- sm
- PIP모드
- SE
- 3
- 한글
- IT용어
- 파푸니카 떠돌이상인
- SI
- 욘 떠돌이상인
- 홈페이지제작견적
- 루테란 떠돌이상인
- 베른 떠돌이상인
- SSL
- 슈샤이어 떠돌이상인
- 특정페이지가로로
- 이름바꾸기
- 가로세로세팅
- 애니츠 떠돌이상인
- 토토이크 떠돌이상인
- Today
- Total
도담도담
쿼리메서드 본문
쿼리메서드 작성 방법
주로 findBy~~ deleteBy~~ getBy~~ 와 같은 이름으로 시작하고, 필요한 필드 조건이나 AND, OR 와 같은 키워드를 조합하여 메서드의 이름만으로도 쿼리조건을 만들어 낼 수 있다.
메서드의 파라미터(매개변수) 는 키워드에 따라서 객수가 결정된다.
예) Between의 경우 범위를 지정하는 두가지 값이 필요하기 때문에 findByStartDateBetween 과 같은 메서드 이름을 작성할 수 있다.
실제 SQL은 select ~~~ where startDate between ? and ? 와 같은 형식으로 실행된다.
메서드의 리턴 타입
select를 하는 작업일 경우 List 또는 배열을 이용할 수 있다.
파라미터네 Pageable 타입을 전달하는 경우에는 반드시 Page<T> 타입으로 지정
*참조 : IntelliJ 일 경우 쿼리 메서드 작성 기능을 제공.
쿼리메서드 (deleteBy)
deleteBy를 이용하여 조건에 맞는 객체를 삭제하는 쿼리 메서드
실제 사용할 때는 해당 메서드에
@Commit
@Transaction
을 사용해야 한다.
@Commit : 사용하지 않았을 경우에는 Rollback
@Transaction : 이 없을 경우에는 예외 발생
(javsx.persistence.TransactionRequiredException)
이유: deleteBy~~ 를 실행할때,
1. select문으로 해당 엔티티객체 조회
2. 각 엔티티 객체들을 한번에 삭제 하는게 아니라 하나씩 삭제하기 때문에.
@Query 어노테이션
기존 SQL을 이용하여 메서드 생성 가능
Spring Data JPA 가 제공하는 쿼리 메서드는 일반적으로 간단한 처리를 할 때 많이 사용된다.
만약, 2개 이상의 테이블을 사용할때는 (복잡한 조건을 처리할때)
=> join 등등을 사용해야 하는데
=> @Query를 사용할 수 있다.
@Query("SQL 구문")
메서드 이름과 무관하게 메서드에 추가한 어노테이션을 통하여 원하는 작업을 처리
(즉, 메서드명은 개발자가 임의의 명명할 수 있다)
@Query를 이용하여 할 수 있는 작업
- 필요한 데이터만 선별적으로 추출 가능
- 데이터베이스에 맞는 순수한 SQL을 사용 가능
- insert, update, delete 와 같이 select가 아닌 DML등을 처리 가능 (단, @Modifying 과 함께 사용)
JPQL(객체 지향 쿼리)
테이블 대신 엔티티 클래스를 이용한다.
테이블에 컬럼 대신, 엔티티 클래스의 멤버변수(필드)를 이용하여 작성.
예) mno 역순으로 정렬하는 메서드 선언 시,
@Query("select m from Memo m order by m.mno desc")
List<Memo> getListDesc();
실제 SQL 에서 사용되는 함수들도 동일하게 사용 가능!
(avg() / sum() / max() / count() / group by / order by 등등)
JPQL : Entity class 기준
SQL : Table 기준
JPA 에서는
SQL -> "select * from tbl_memo m order by m.mno desc"
JPQL -> "select m from Memo m order by m.mno desc"
JPA는 기존 SQL과 JPQL를 매핑하는 역할을 담당하는 거라고 이해해도 된다.
@Query 의 파라미터 바인딩 방법
1. 파라미터명을 활용하는 방식
2. 여러개의 파라미터를 전달 : #{ } ( 객체를 이용 )
*참조 : update/delete 등 데이터가 수정이 되는 경우에는
@Transactional 을 사용한다.
특히 update를 사용할 경우에는 @Modifying 까지 사용해야 한다.
예)
no를 이용하여 해당 memoText를 변경하는 @Query를 이용한 쿼리메서드 (객체로 전달)
@Transactional
@Modifying
@Query("update Memo m set m.memoText = :#{#param.memoText} where m.mno = :#{#param.mno}")
int updateMemoText(@Param("param") Memo memo);
쿼리메서드 참조 URL
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
'IT 공부 > KH 정보교육원' 카테고리의 다른 글
게시글에 이미지 저장시켜서 올리기 (0) | 2021.07.31 |
---|---|
파이널 프로젝트 시작 (0) | 2021.07.14 |
Thymeleaf 레이아웃 (0) | 2021.07.09 |
thymeleaf 내용정리 (0) | 2021.07.08 |
Spring Data JPA 개념 (0) | 2021.07.07 |