jpa 를 사용하려면 @Entity 클래스를 먼저 생성해야 한다.
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name="coin.market_code")
public class MarketCode {
@Id
@Column(name = "market_code")
private String marketCode;
@Column(name = "korean_name")
private String koreanName;
@Column(name = "english_name")
private String englishName;
@Builder
public MarketCode(String marketCode, String koreanName, String englishName) {
this.marketCode = marketCode;
this.koreanName = koreanName;
this.englishName = englishName;
}
}
먼저 데이터베이스에 저장하기 위해 유저가 정의한 클래스가 필요한데 그런 클래스를
Entity라고 한다
@Id
primary key를 가지는 변수를 선언하는 것을 뜻한다. @GeneratedValue 어노테이션은 해당 Id 값을
어떻게 자동으로 생성할지 전략을 선택할 수 있다.
보통 일반적으로
@GeneratedValue(strategy = GenerationType.AUTO)
를 사용한다. DB에 맞게 자동으로 생성해주는 역할이다.
참고 -> juntcom.tistory.com/156 - GeneratedValue생성방법
@Table
별도의 이름을 가진 데이터베이스 테이블과 매핑한다. 기본적으로 @Entity로 선언된 클래스의 이름은 실제
데이터베이스의 테이블 명과 일치하는 것을 매핑한다. 따라서 @Entity의 클래스명과 데이터베이스의 테이블명이
다를 경우에 @Table(name=" ")과 같은 형식을 사용해서 매핑이 가능하다.
@Column
@Column 선언이 꼭 필요한 것은 아니다. 하지만 @Column에서 지정한 변수명과 데이터베이스의 컬럼명을
서로 다르게 주고 싶다면 @Column(name=" ") 같은 형식으로 작성하면 된다.
그렇지 않은 경우에는 기본적으로 멤버 변수명과 일치하는 데이터베이스 컬럼을 매핑한다.
컬럼에 언더바가 있을 경우에는 꼭 column 어노테이션을 사용해야 한다.
JpaRepository
public interface MarketCodeRepository extends JpaRepository<MarketCode, String> {
}
Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속하기만 해도 되며,
인터페이스에 따로 @Repository등의 어노테이션을 추가할 필요가 없다
Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속하기만 해도 되며,
인터페이스에 따로 @Repository등의 어노테이션을 추가할 필요가 없다
그렇게 JpaRepository를 단순하게 상속하는 것만으로 위의 인터페이스는 Entity 하나에 대해서
아래와 같은 기능을 제공하게 된다.
method |
기능 |
save() |
레코드 저장 (insert, update) |
findOne() |
primary key로 레코드 한건 찾기 |
findAll() |
전체 레코드 불러오기. 정렬(sort), 페이징(pageable) 가능 |
count() | 레코드 갯수 |
delete() | 레코드 삭제 |
public interface MarketCodeRepository extends JpaRepository<MarketCode, String> {
List<MarketCode> findBykoreanName(String koreanName);
}
주의사항 변수명을 korean_name 처럼 언더바로 사용할시에 findBy가 적용이 안된다.
변수명을 카멜케이스로 맞추자.
Query 메소드에 포함할 수 있는 키워드는 다음과 같다.
메서드 이름 키워드 |
샘플 |
설명 |
And |
findByEmailAndUserId(String email, String userId) |
여러필드를 and 로 검색 |
Or |
findByEmailOrUserId(String email, String userId) |
여러필드를 or 로 검색 |
Between |
findByCreatedAtBetween(Date fromDate, Date toDate) |
필드의 두 값 사이에 있는 항목 검색 |
LessThan |
findByAgeGraterThanEqual(int age) |
작은 항목 검색 |
GreaterThanEqual |
findByAgeGraterThanEqual(int age) |
크거나 같은 항목 검색 |
Like |
findByNameLike(String name) |
like 검색 |
IsNull |
findByJobIsNull() |
null 인 항목 검색 |
In |
findByJob(String … jobs) |
여러 값중에 하나인 항목 검색 |
OrderBy |
findByEmailOrderByNameAsc(String email) |
검색 결과를 정렬하여 전달 |
참고문헌
docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#jpa.sample-app.finders.strategies - jpa문서
'Spring > JPA' 카테고리의 다른 글
Spring JPA Pageable 처리 - sort 및 Page 처리(totalElements) (0) | 2024.01.09 |
---|---|
[spring JPA] column annotation 컬럼 매칭 레퍼런스 (0) | 2021.05.03 |
[Spring JPA] @Id와 @GeneratedValue - Primary Key 생성방법 (0) | 2021.04.02 |
[spring JPA] 스프링 jpa converter (empty string to null) (0) | 2020.10.02 |
[Spring JPA] Column으로 쓰지않는 변수에 대한 선언. @Transient (0) | 2020.09.22 |