본문 바로가기
개발/스프링(Spring)

(JPA) 사용자 정의 sql (@Query)

by kakk789 2022. 6. 28.

 JPA 사용자 정의 sql 

  • @Query 어노테이션을 이용하여 정의
  • 테이블 명은 Entity 클래스 이름과 일치시켜야함

select 문

  • 주의할 점은 테이블 명으로 Entity가 될 클래스 명을 그대로 써줘야함.
    예를들어) OrderVO라는 이름을 같은 클래스를 Entity로 만들 때 OrderVO를 그대로 사용
     (select * from OrderVO)
@Query("쿼리문")
public 타입 '쿼리문을 실행 할 함수명()';
	@Query("select nvl(max(orderid),0) +1 from Orders")
	public int getNextNo();

insert, delete, update 문

  • select 문과 다르게 table 명 입력 시 실제 클래스 명이 아닌 실제 
@Modifying
@Query("쿼리문")
@Transactional
public "타입" "쿼리문을 실행 할 함수명"(@param("파라미터") "타입" "파라미터명");
public interface OrdersDAO extends JpaRepository<OrdersVO, Integer>{

	@Query(value="select nvl(max(orderid),0) +1 from OrdersVO")
	public int getNextNo();
	
	@Modifying
	@Query (value="insert into orders "
			+ "o(o.orderid, o.custid, o.bookid, o.saleprice, o.orderdate) "
			+ "values(:#{#o.orderid},:#{#o.customer.custid}"
			+ ",:#{#o.book.bookid},:#{#o.saleprice},sysdate)"
			, nativeQuery = true)
	@Transactional
	public void insert(@Param("o") OrdersVO o);
	
}

:#{#order.customer.custid}

  • customer 테이블에 있는 custid라는 속성명을 가져와서 order의 custid의 값으로 사용하는 의미 (조인, join)
반응형

댓글