JPA
JPA에 대하여
JPA
JPA는 ORM이다.
ORM이란?
Object Relational Mapping의 약자로 SQL문 없이 Entity와 Repository 클래스를 만들어 자동으로 DB에 매핑하는 기술이다.
JPA의 기본 사용법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Getter
@Setter
@Entity
public class Question {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column (length = 200)
private String subject;
@Column (columnDefinition = "TEXT")
private String content;
@Column
@CreatedDate
private LocalDateTime createdDate;
}
@Id
primary key를 가지는 변수를 선언하는 것.
@GeneratedValue
어노테이션을 통해 Id값 자동 생성 방법을 정할 수 있다.
1
2
3
4
5
6
7
@GeneratedValue(strategy = GenerationType.AUTO)
// AUTO로 설정하게 되면 자동으로 JPA가 DBMS의 관계성을 생각해 지정해주지만...
// 기계는 기계일뿐 AUTO를 너무 신뢰하지 말자. 직접 맞는 전략 선택해주는 것이 낫다.
@GeneratedValue(strategy = GenerationType.IDENTITY)
// 기본 키 생성을 데이터베이스에 위임한다.
// 고유번호를 자동으로 가지게해준다.
@Column
Id가 아닌 그 외의 데이터 값
사용된 속성을 알아보자면…
length : 길이 제한
cloumnDefinition : 글자수 제한이 없는 text 형태를 부여
@CreatedDate
현재 날짜를 자동으로 주입 시켜주는 어노테이션 App에 @EnableJpaAuditing
어노테이션을 붙여야 사용 가능하다.
@ManyToOne
다대일의 관계 표현
1
2
3
4
5
6
7
8
@Getter @Setter
@Entity
public class Answer {
...
@ManyToOne
private Question question;
}
@OneToMany
일대다의 관계
1
2
3
4
5
6
7
8
@Getter @Setter
@Entity
public class Question {
...
@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE)
private List<Answer> answerList;
}
Repository
Repository는 기본적으로 JpaRepository를 상속받아 사용한다.
JPA를 사용하기 위해서는 기본적으로 약속된 메서드가 있는데..
1
2
3
4
public interface UserRepository extends JpaRepository<User, Long> {
// JpaRepository를 상속할 때에는 <안에 >
User save(String name, int age);
}
사용하기
JPA는 기본적으로 제공해주는 메서드가 있다. 이를 알아가보자.
- findAll
테이블에 저장된 모든 데이터를 조회하여 가져온다. - findById
테이블의 id값 데이터를 통해 하나의 엔티티를 찾아온다.
JPA 메서드 명과 쿼리문
findById를 제외한 나머지 컬럼으로 찾는 것은 JPA에서 기본으로 제공해주지 않는다 그래서 직접 메서드를 Repository에 작성해야하는데…
1
2
3
4
public interface QuestionRepository extends JpaRepository<Question, Integer> {
Question findBySubject(String subject);
Question findBySubjectAndContent(String subject, String content);
}
메서드 명과 쿼리문은 상당히 관련이 있다. 그렇기에 이를 알아가보자.
SQL연산자 | 레포지토리 메서드 예시 | 설명 |
---|---|---|
And | findBySubjectAndContent | Subject , Content 열과 일치하는 데이터를 조회 |
Or | findBySubjectOrContent | Subject 열 또는 Content 열과 일치하는 데이터를 조회 |
Between | findByCreateDateBetween | CreateDate 열의 데이터 중 정해진 범위 내에 있는 데이터를 조회 |
LessThan | findByIdLessThan | Id 열에서 조건보다 작은 데이터를 조회 |
GreaterThanEqual | findByIdGreaterThanEqual | Id 열에서 조건보다 크거나 같은 데이터를 조회 |
Like | findBySubjectLike | Subject 열에서 문자열 ‘subject’와 같은 문자열을 포함한 데이터를 조회 |
In | findBySubjectIn | Subject 열의 데이터가 주어진 배열에 포함되는 데이터만 조회 |
OrderBy | findBySubjectOrderByCreateDateAsc | Subject 열 중 조건에 일치하는 데이터를 조회하여 CreateDate 열을 오름차순으로 정렬하여 반환 |
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.