repository

임형종·2024년 1월 21일
0

스프링부트

목록 보기
10/28

- Repository는 반드시 JpaRepository Interface 상속 받아야함

1.JpaRepository<T, ID>
2.T : Table과 연결된 Entity
3.ID : Entity 내 PK(ID)의 자료형

JPA : NO SQL,개발의 편리함을 위해 sql문을 쓰지 않겠다.

  • JpaRepository안에서 기본 CRUD 메소드가 정의가 되어있음
  • hibernate 구현체가 테이블과, ID에 맞춰서 자동으로 구현

- 특별한 조건을 가지는 메소드는 직접 구현

1) 메소드 이름 규칙을 이용한 구현
findBy : ~에 의해서 찾아오겠다.,카멜기법
ex)public Tbl_Member findByEmailAndPw(String email, String pw);

2) @Query 어노테이션을 이용해서 직접 SQL문을 작성하는 방법
복잡한 쿼리문 작성하기 힘듦(자바로 작성을하니까 스페이스바를 할수없음)
(join,서브쿼리등) 복잡한것을 만들면 JPA단일보단 MyBatis를 겸용하는 경우가 많음

ex)
@Query("select * from tbl_member where email = :email and pw = :pw")
public Tbl_Member login(String email, String pw);
(Tbl_Member)로 묶으면 인식 못함


  • jsp에서는 new가 아닌 repository의 interface이름 repo; 설정하기
  • new를 못넣는 이유 : Interface는 추상메소드가 없어서 객체 생성 불가(new 못씀)
  • @Autowired : Spring 메모리 내에서 넣어 줄 수 있는 객체를 알아서 찾아서 넣어줌

  • repo.save 데이터를 생성한 프로그램이 종료되어도 사라지지 않는 데이터의 특성
  • save()는 엔티티의 상태가 어떻든 저장한다.
  • 엔티티를 새로 저장할 수도 있고, 기존 엔티티를 새로운 엔티티와 병합할 수도 있다.
  • 병합 시 동일한 id에 연결된 엔티티에 상태를 복사하고 그 엔티티를 반환한다.

mybatis : sql문과 자바코드를 분리해서 편하게 쓴다


findBy 차이점 <-- repository의

  1. And
  • entity
@ManyToOne //다대1방식
@JoinColumn(referencedColumnName = "email")
private Tbl_Member writer;
  • repository
@Repository 
public interface MemberRepository extends JpaRepository<Tbl_Member, String>{
	public Tbl_Member findByEmailAndPw(String email, String pw);

@ManyToOne :

  • repository에서 자기자신을 나타내는것이며 여러개를 조건을 걸땐 And를 넣어줌
  • 1:N 관계에서 N인 Entity의 필드에 써줍니다. 위의 코드에서 1:N 관계를 놓고보면 1은 School이 고 N은 Student입니다. 그래서 N인 Entity는 Student고 school의 필드에
    @ManyToOne을 적어준 것 입니다.
  • 더불어서 @JoinColumn을 설정함으로써 주인이라는 뜻을 명확하게 줄 수 있습니다.
  • @JoinColumn 어노테이션을 생략하면 "필드명_참조테이블의기본키"로 매핑합니다.
    생략하는 것보다는 직관적일 수 있도록 school_id라고 명시해주는 게 좋습니다.
  1. _
  • entity
@OneToMany(mappedBy = "writer")
private List<Tbl_Board> board;
  • repository
@Repository
public interface BoardRepository extends JpaRepository<Tbl_Board, Long>{
	public List<Tbl_Board> findByWriter_Email(String writer);
}

@OneToMany :

  • 1:N 관계에서 1에 써줍니다.
  • mappedBy를 설정해줌으로써 주인이 아니다라는 뜻을 줄 수 있습니다.
  • mappedBy 값은 주인에서 사용하는 외래키 필드명을 적어줍니다.
  • mappedBy를 설정해주는 것이 필수는 아닙니다.
  • repository는 자기 자신것을 나타내니 List를 넣어주며 찾을때도
    자신의 fk_상대pk를 꼭 선정 해줘야한다.
profile
제로부터시작하는개발생활

0개의 댓글

관련 채용 정보