ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA 사용법
    개발 2020. 7. 23. 19:43

    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
Designed by Tistory.