-
Model
Entity?
DataBase에 저장하기 위해 사용자가 정의한 Class를 뜻한다. 즉 Domain
RDBMS에서 Table을 객체화 시킨것으로 간주한다.
@Entity
public class Member { ~
@Id
Primary key를 가지는 변수를 선언하는 것을 뜻한다, @GeneratedValue Annotation은 해당 Id 값을 어떻게 자동으로 생성하는지 전략을 선택 할 수 있으며 여기서 선택한 전략은 "AUTO"
@Table
별도의 이름을 가진 DataBase Table과 Mapping 한다. 기본적으로 @Entity로 선언된 Class의 이름은 실제 DataBase의 Table명과 일치하는 것으로 Mapping 한다. 따라서 @Entity의 Class 명과 DataBase의 테이블 명이 다를 경우 사용한다.
ex) @Table(name="Member") 같은 형식을 사용하여 Mapping
@Column
필수로 선언해야 하는 것은 아니다. 하지만 @Column에서 지정한 변수명과 DataBase의 Column명을 서로 다르게 주고 싶다면 @Column(name= " ~~ ") 같은 형식으로 작성하면 된다.
Repository
Spring Boot에선 Entity의 기본적인 CRUD가 가능하도록 JpaRepository Interface를 제공
public interface ModelRepository extends JpaRepository<Model, Long>{ }
Spring Data Jpa에서 제공하는 JpaRepository Interface를 상속하기만 해도 된다.
Interface에 따로 @Repository등의 Annotation을 추가할 필요가 없다.
JpaRepository<Model, Long> 에서 Model은 사용할 Entity Class, Long에는 ID 값이 들어가게 된다.
Method
- save() : record 저장 (insert, update)
- findOne() : Primary key로 row 한개 찾기
- findAll() : 전체 row 불러오기, Sort, Pageable 가능
- count() : row 개수
- delete() : row 삭제
위의 기본 기능을 제외한 추가적인 조회 기능을 추가하고 싶으면 규칙에 맞는 Method를 추가 해야한다.
Query Method를 추가하여 Spring에 전달할 수 있다.
- findBy~ : Query를 요청하는 Method임을 알림
- countBy~ : Query 결과 row 수를 요청하는 Method임을 알림
위의 findBy~에 이어 해당 Entity Field 이름을 입력하면 Select Query를 실행한 결과를 전달한다.
SQL의 where 절을 Method 이름을 통해 전달한다고 생각하자.
ex) findByName (String name) -> Where name = ~
Query Method에 포함할 수 있는 Keyword
- And : 여러 Field를 and로 검색. ex) findByEmailAndUserId(String email, String userid)
- Or : 여러 Field를 or로 검색. ex) findByEmailOrUserId(String email, String userid)
- Between : Field의 두 값 사이에 있는 항목 검색. ex) findByCreatedAtBetween(Data fromDate, Date toDate)
- LessThan : 작은 항목 검색. ex) findByAgeLessThanEqual(int age)
- GraterThan : 더 큰 항목 검색. ex) findByAgeGraterThanEqual(int age)
- Like : like 검색. ex) findByNameLike(String name)
- IsNull : null 항목 검색. ex) findByNameIsNull()
- In : 여러 값중에 하나인 항목 검색. ex) findByJob(String jobs)
- OrderBy : 검색 결과를 정렬하여 전달. ex) findByAgeOrderByNameAsc(int age)
Pageable
Pageable???? Query Method의 입력변수로 Pageable 변수를 추가하면 Page타입으로 반환이 가능하다.
Pageable Object를 통해 Paging과 Sort를 위한 Parameter를 전달한다.
Pageable query parameter
- page : 몇 번째 페이지 인지를 전달
- size : 한 페이지에 몇개의 항목을 보여줄것인지 전달
- sort : 정렬 정보를 전달. 정렬 정보는 Field Name, 정렬 방향의 포맷으로 전달한다.
여러 필드로 순차적으로 정렬도 가능하다. ex) sort=createdAt,desc&sort=userId,asc
ex) GET /users?page=1&size=10&sort=createdAt,desc&sort=userId,asc
Pageable Input Parameter는 Controller에서 전달 받아야 한다.
ex)
@RequestMapping("")
Page<Member> getMembers(Pageable pageable){
return memberService.getList(pageable)
}'개발' 카테고리의 다른 글
mysql errno :150 ?~? (0) 2020.08.02 Vue 에서 is not Defined 가 뜬다면? (0) 2020.07.25 JPA (0) 2020.07.23 Git (0) 2020.07.22 sass(scss)? (0) 2020.07.15