Spring Data Jpa 의 네 가지 조회 방식 에 대한 상세 한 설명
1.인 터 페 이 스 를 호출 하 는 방식
1.기본 소개
인터페이스 에 있 는 방법 을 호출 하여 조회 하려 면 사용자 정의 인터페이스 가 Spring Data Jpa 에 규정된 인 터 페 이 스 를 계승 해 야 합 니 다.
public interface UserDao extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User>
이 몇 가지 방법 을 사용 하 는 전 제 는 당신 이 정의 한 실체 류 에 해당 하 는 주 해 를 표시 해 야 한 다 는 것 이다.
@Entity //
@Table(name = "tbl_user") //
public class User {
@Id //
@GeneratedValue(strategy = GenerationType.IDENTITY) // ,
@Column(name = "user_id")//
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "user_address")
private String userAddress;
@Column(name = "user_salary")
private Double userSalary;
//...getter setter toString
}
JpaRepository첫 번 째 인터페이스 에서 간단 한 CRUD 방법 을 정 의 했 습 니 다.범 형 T 는 당신 이 정의 하 는 실체 류 의 유형 이 고 범 형 ID 는 당신 의 실체 류 에서 메 인 키 의 유형 입 니 다.
JpaSpecificationExecutor
이 인 터 페 이 스 는 우리 가 복잡 한 조 회 를 완성 하 는 데 도움 을 줄 수 있 습 니 다.범 형 T 는 당신 이 정의 한 실체 류 의 유형 입 니 다.
2.사용법
하나의 인 터 페 이 스 를 만들어 서 상기 두 인 터 페 이 스 를 계승 하고 범 형 을 채 우 면 호출 할 수 있 습 니 다.
// , findAll
@Test
public void testFindAll(){
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
3.주의사항Jpa Repository 인터페이스 에는 findOne()과 getOne()방법 이 있 습 니 다.말 그대로 두 가지 방법 은 모두 하 나 를 조회 하 는 것 입 니 다.그 렇 긴 하지만 두 가지 본질 적 으로 어느 정도 차이 가 있 습 니 다.
findOne()
바 텀 에서 find()방법 을 호출 했 습 니 다.우리 가 이 방법 을 호출 할 때 직접 결 과 를 찾 아 냈 습 니 다.
getOne()
바 텀 에서 getReference()방법 을 호출 했 습 니 다.게 으 른 로 딩 모드 입 니 다.동적 에이전트 방식 으로 동적 에이전트 대상 을 만 들 었 습 니 다.검색 결 과 를 호출 할 때 sql 문 구 를 보 내 고 우리 가 필요 로 하 는 결 과 를 조회 할 수 있 습 니 다.
jpql 조회
1.기본 소개
jpql 즉 Jpa Query Language
jpql 문법 과 sql 은 대동소이 합 니 다.jpql 은 실체 류 를 대상 으로 하 는 조작 입 니 다.sql 은 데이터베이스 시트 를 직접 조작 하기 때문에 jpql 에 서 는 sql 에 있 는 데이터베이스 시트 이름,열 이름 등 정 보 를 실체 류 속성 으로 바 꿀 뿐 입 니 다.
예컨대
sql 문장의 조회:select*from tbluser where user_name = ?
jpql 문장의 조회:from User where userName=?
2.사용법
사용자 정의 방법 입 니 다.여 기 는@Query 주 해 를 사용 합 니 다.value 는 jpql 구문 입 니 다.모든 물음표 뒤에 숫자 가 있 습 니 다.이 숫자 는 사실 이 속성 대응 방법 내 형 삼 의 위 치 를 표시 합 니 다.그러면 우 리 는 속성의 순서에 따라 값 을 부여 하지 않 을 수 있 습 니 다.
/**
* id name
* @return
*/
@Query(value = "from User where userId = ?2 and userName = ?1")
User findUserByIdAndName(String name, int id);
테스트 코드
@Test
public void testJpql1(){
User user = userDao.findUserByIdAndName(" ", 1);
System.out.println(user);
}
3.주의사항jpql 을 사용 하려 면 주 해 를 사용 하여 실체 클래스 와 파 라 메 터 를 설정 한 것 이 전제 입 니 다.
주해 의 상세 한 정 보 는 다음 과 같다.
/**
* @Entity
* : 。
* @Table
* : 。
* :
* name:
* @Id
* : 。
* @GeneratedValue
* : 。。
* :
* strategy : 。
* GenerationType.IDENTITY: , (mysql)
* GenerationType.SEQUENCE: , (oracle)
* GenerationType.TABLE:jpa , ,
* GenerationType.AUTO:
*
* @Column
* :
* :
* name: 。
* unique:
* nullable:
* inserttable:
* updateable:
* columnDefinition: DDL
* secondaryTable: 。 ( ), [ ]
*/
sql 조회1.기본 소개
sql 구문 조회 사용 하기
2.사용법
사용자 정의 방법 은 jpql 과 달리 이 방법 은 nativeQuery=true 를 추가 하여 로 컬 조회(sql 조회)임 을 밝 혀 야 합 니 다.
/**
* sql
*/
@Query(value = "select * from tbl_user where user_name like ?",nativeQuery = true)
List<User> sqlFindByName(String name);
테스트 방법
@Test
public void testSql2(){
List<User> users = userDao.sqlFindByName("% %");
for (User user : users) {
System.out.println(user);
}
}
4.방법 명명 규칙 조회1.기본 소개
말 그대로 Spring Data JPA 가 정 한 방법 명 으로 조회 하 는 방법 입 니 다.이 방식 은 jpql 이나 sql 을 쓸 필요 가 없습니다.Spring Data JPA 는 방법 명 을 해석 하여 자동 으로 조 회 를 만 들 수 있 습 니 다.
2.사용법
사용자 정의 방법
/**
* id
* @param name
* @param id
* @return
*/
List<User> findUserByUserNameLikeAndUserId(String name, int id);
테스트
@Test
public void TestName1(){
List<User> users = userDao.findUserByUserNameLikeAndUserAddress("% %", " ");
for (User user : users) {
System.out.println(user);
}
}
3.명명 규칙Spring Data JPA 가 정의 하 는 규칙 에 따라 조회 방법 은 findBy 로 시작 하고 삭제 방법 은 deleteBy 로 시작 합 니 다.조건 조회 와 관련 될 때 조건 의 속성 은 조건 키워드 로 연결 되 며 주의해 야 할 것 은 조건 속성 이니셜 은 대문자 가 필요 합 니 다.프레임 워 크 는 방법 명 해석 을 할 때 방법 명 이 남 은 접 두 사 를 자 른 다음 나머지 부분 을 해석 합 니 다.
만약 당신 이 사용 하 는 컴 파일 러 가 아이디어 라면,당신 이 작성 할 때 아이디어 도 힌트 를 줄 것 입 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.