Spring Data JPA 는 JPQL 을 사용 하여 네 이 티 브 SQL 과 조회 하 는 동작 입 니 다.
JPQL 언어(Java Persistence Query Language)는 SQL 과 매우 유사 한 중간 성과 대상 화 된 조회 언어 로 최종 적 으로 서로 다른 바 텀 데이터 베 이 스 를 위 한 SQL 언어 로 컴 파일 되 어 서로 다른 데이터 베 이 스 를 차단 합 니 다.
JPQL 언어 는 Query 인 터 페 이 스 를 통 해 실 행 됩 니 다.Query 인 터 페 이 스 는 데이터베이스 조 회 를 수행 하 는 방법 을 봉인 합 니 다.Entity Manager 의 Query,NamedQuery 및 NativeQuery 방법 을 호출 하면 조회 대상 을 얻 을 수 있 고 Query 인터페이스 와 관련 된 방법 으로 조회 작업 을 수행 할 수 있 습 니 다.
JPQL 은 대상 을 대상 으로 조회 하 는 언어 로 사용자 정의 JPQL 을 통 해 UPDATE 와 DELETE 작업 을 수행 할 수 있 습 니 다.JPQL 은 INSERT 사용 을 지원 하지 않 습 니 다.UPDATE 나 DELETE 작업 에 대해 서 는 주해@Modifying 을 사용 하여 수식 해 야 합 니 다.
【예 시】JPQL 언어 로 조회
package com.pjb.jpauserdemo.dao;
import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
*
* JPQL
* @author pan_junbiao
**/
@Repository
public interface UserJpqlDao extends JpaRepository<UserInfo,Integer>
{
/**
* ,
*/
@Query("SELECT u FROM UserInfo u WHERE u.userName = ?1")
public UserInfo getUserInfoByName(String name);
/**
* ,
*/
@Query("SELECT u FROM UserInfo u WHERE u.userName like %:name%")
public List<UserInfo> getUserListByName(String name);
/**
*
*/
@Modifying
@Query("UPDATE UserInfo u SET u.userName = :name WHERE u.userId = :id")
public int updateUserName(@Param("id")int userId, @Param("name")String userName);
}
2.원생 SQL 문 구 를 사용 하여 조회네 이 티 브 SQL 쿼 리 를 사용 할 때 도@Query 주 해 를 사용 합 니 다.이 때 nativeQuery 인 자 는 true 로 설정 해 야 합 니 다.
[예시]네 이 티 브 SQL 문 구 를 사용 하여 조회 합 니 다.
package com.pjb.jpauserdemo.dao;
import com.pjb.jpauserdemo.entity.UserInfo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* SQL
* @author pan_junbiao
**/
@Repository
public interface UserSqlDao extends JpaRepository<UserInfo,Integer>
{
/**
* ID,
*/
@Query(value = "SELECT * FROM tb_user WHERE user_id = :id",nativeQuery = true)
public UserInfo getUserById(@Param("id")int userId);
/**
* ,
*/
@Query(value = "SELECT * FROM tb_user WHERE user_name LIKE %:userName%",nativeQuery = true)
public List<UserInfo> getUserListByName(@Param("userName")String userName);
/**
*
*/
@Modifying
@Query(value = "UPDATE tb_user SET user_name = :name WHERE user_id = :id",nativeQuery = true)
public int updateUserName(@Param("id")int userId, @Param("name")String userName);
}
이 를 통 해 알 수 있 듯 이@Query 는@Modifying 이라는 두 주석 과 함께 설명 하고 맞 춤 형 업데이트 작업 을 정의 할 수 있 습 니 다.Spring data jpa@query네 이 티 브 SQL 사용 시 주의해 야 할 구덩이
코드 에 따라 설명:
@Query(value = "select bill.id_ as id, bill.created_date as date, bill.no, lawyer_case .case_no as caseNo, " +
"lawyer_case .case_name as caseName, customer.no as customerNo, customer.cn_name as customerName, " +
"bill.total_expense_after_tax, bill.collected_money, bill.book_ticket_amount, bill.version " +
"e1.name as creator, bill.status" +
"from bill " +
"left join lawyer_case on lawyer_case .case_no=bill.case_no " +
"left join customer on customer.no=bill.customer_no " +
"left join employee e1 on e1.id_=bill.creator " +
"where IF (?1!='', customer_no=?1, 1=1) " +
"and IF (?2!='', case_no=?2, 1=1) " +
"and IF (?3!='', status=?3, 1=1) " +
"and IF (?4!='', creator'%',?4,'%')), 1=1) " +
"and create_by=?5 " +
"ORDER BY ?#{#pageable} ",
countQuery = "select count(*) " +
"from bill " +
"left join lawyer_case on lawyer_case .case_no=bill.case_no " +
"left join customer on customer.no=bill.customer_no " +
"left join employee e1 on e1.id_=bill.creator " +
"where IF (?1!='', customer_no=?1, 1=1) " +
"and IF (?2!='', case_no=?2, 1=1) " +
"and IF (?3!='', status=?3, 1=1) " +
"and IF (?4!='', creator'%',?4,'%')), 1=1) " +
"and create_by=?5 "+
"ORDER BY ?#{#pageable} ",
nativeQuery = true)
Page<Object[]> findAllBill(String customerNo, String caseNo, Integer status, String creator,
String createBy, Pageable pageable);
주의해 야 할 방법 은 다음 과 같은 몇 가지 가 있다.1.From 는 이름 바 꾸 기 를 지원 하지 않 습 니 다.
2.하나의 page
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.