Backend/SpringBoot

[기본구조3] Repository with JPA (DB CRUD동작,Interface, findby)

Dean83 2024. 10. 23. 13:09

앞에선 DB와 매칭되는 클래스인 엔티티를 정리 하였다. 엔티티로 매핑해 놓으면 해당 테이블과 연결된 항목들을 쉽게 가져올 수 있고, 설정할 수 있다. 그러나 프로그램 상에서만 그러할 뿐 실제 DB에 반영하기 위해선 Repository를 이용해야 한다. 

 

  • 구현
    • interface 형식으로 구현을 한다. 
    • 엔티티가 아래와 같다면, 
package com.example.test1.test1;


import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
public class entity1 {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    Long idx;

    @Column(length=200)
    String name;

    @Column(length=11)
    String phoneNumber;

    @Column(columnDefinition = "TEXT")
    String address;
}
  • Repository Interface는 아래와 같다
package com.example.test1.test1;
import org.springframework.data.jpa.repository.JpaRepository;


public interface repo extends JpaRepository<entity1, Long>{
    
}
  • JpaRepository를 상속받고, 형식으로는 엔티티클래스명, 엔티티에서 unique key값인 변수의 형을 적어둔다
    • 여기선 JpaRepository<entitiy1, Long>이 된다.
  • 이후 findby 함수의 확장형을 인터페이스에 작성해주면 자동으로 구현부 까지 실현되어 사용할 수 있다.



  • CRUD 연동 함수들
    • 저장 : 구현한 interface 의 내장 save 함수를 통해 DB에 저장 할 수 있다.
      • Create, Update 동작이다.
    • 삭제 : 구현한 interface 의 내장 delete 함수를 통해 DB에서 삭제 할 수 있다.
    • 조회 : 구현한 interface 의 내장 findby 함수들을 통해 DB에 저장 할 수 있다
      • findby 는 개발자가 필요에 따라 확장한다.
    • 아래는 리파지토리를 사용하는 Java예제이다.
package com.example.test1.test1;

public class repotest {
    private final repo _repoInt;
    
    //생성자에 의존성 주입. @Autowired 가 생략됨
    public repotest(repo _repo)
    {
        this._repoInt = _repo;
    }

    public void CreateFunc()
    {   
        entity1 ent1 = new entity1();
        ent1.setAddress("");
        _repoInt.save(ent1);
    }

    public void SaveFunc(entity1 ent1)
    {
    	 ent1.setAddress("변경");
        _repoInt.save(ent1);
    }

    public void DeleteFunc(entity1 ent1)
    {
        _repoInt.delete(ent1);
    }
}

 

 

  • FindBy
    • interface를 통해 값을 DB로부터 조회하는 함수.
    • findbyId
      • 기본으로 제공되는 함수로, interface 작성시 입력한 key 컬럼값을 기준으로 조회
      • 리턴값은 Optional로, 형변환을 해야한다.
    • findby + 컬럼명을 통해 다양한 함수들을 개발자가 등록할 수 있다.
      • And, Or같은 연산자를 통해 컬럼들을 묶어 조회할 수 있다. 
        • 연산자
          • And
          • Or
          • Between
          • LessThan
          • GreaterThanEqual
          • Like
          • In
          • OrderBy
import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;

public interface repo extends JpaRepository<entity1, Long>{
    List<entity1> findByAddress(String address);
    List<entity1> findByName(String name);
     List<entity1> findByNameLike(String name);
    List<entity1> findByPhoneNumber(String phoneNumber);
    List<entity1> findByNameAndPhoneNumber(String name, String phoneNumber);
}