JpaRepository

Lumi·2021년 7월 19일
0

JPA

목록 보기
1/11
post-thumbnail

ORM : 객체와 DB간을 연결해 주는것

JPA : ORM이 전체적인 개념이라면 JAP는 구체적으로 정의한 스펙
-> DB에 접근하기 위한 API의 규격

==> 어플리케이션과 데이터 베이스를 연결하는것이 ORM
그리고 JAVA에서는 ORM의 표준 스펙으로 JPA 라는것을 인터페이스로 정의하여 제공
해당 JPA의 실전 구현 클래스들을 모여놓은것이 Hibernate이고
그중 자주 쓰이는 클래스들을 따로 묶어놓은것이 spring data jpa이다.

=========== loom book =========
@NoArgsConstructor // 매개변수가 없는 생성자를 만들어준다.
@AllArgsConstructor // 선언된 모든 변수가 생성자의 매개변수가 된다.
@Data // toString, getter, setter 등등을 모두 포함한다.
@Builder // AllArgsConstructor와 비슷하지만 Builder를 제공한다

ORM은 객체와 DB를 연결해주는 것인데
여기에서 말하는 객체가 Entity이다.
-> 객체를 Entity로 선언해 주는것이 @Entitiy이다.

DB의 테이블은 기본적으로 유일한 값을 가지게 되고 이를 PK(Primary Key)라고 한다.
DB는 이 PK의 값으로 데이터를 추출해 결과값을 반환해준다.
-> map과 비슷

pk가 없는 경우도 있지만 대부분 존재하면 JPA에서도 Entity클래스 상에 해당 PK를 명시적으로 표시 해주어야 하는데
이떄에 @Id 어노테이션을 사용한다.

Entity로 선언한 객체를 조회하고 반환해줄떄에는 repository를 사용한다.
JpaRepository<a,b>
-> a : Entity를 선언한 class
-> b : a에 있는 PK의 타입

@GeneratedValue //자동으로 값이 증가하는 숫자값을 만들어 준다
-> 주로 필드에 있는 변수에 사용

JpaRepository.save() : ()안에 있는 객체를 생성을 하고 값을 DB에 저장한다.
-> Entity만을 저장한다.

JpaRepository.findAll() : 모든 값을 List형식으로 반환한다.
-> 이떄 DB의 테이블에있는 전체 값을 가져 온다.
-> 하지만 효율성이 떨어지기 떄문에 실무에서는 많이 사용하지 않는다.(거의)

JpaRepository에는 대부분 Entity에 관한 내용을 조회하는 메서드가 많다.
resources에 DB값을 넣어주게 되면
실행을 할떄마다 저 값을 한번 읽어주게 된다.
-> main에 넣게 되면 SpringBoot 서버를 실행하면 한번 읽고
-> test에 넣게 되면 test를 할떄마다 값을 읽어준다.

DB에 있는 User테이블에 5개의 데이터를 집어 넣는다.

call next value for hibernate_sequence
-> 코드의 id 값을 1씩 증가시켜주는 것
-> 만약 새로운 값을 지정해줄떄 id값을 따로 지정해 주지 않게 된다면
-> Id를 PK값으로 사용하는 코드는 오류가 나게 된다.

getone 메서드 같은 경우에는 session이 유지 되지 않기 떄문에
@Transzctional을 추가해 주어야 한다.

findById 메서드 같은 경우에는 return 되는 객체가 Optional이기 떄문에
Optional으로 랩핑 해주어야 한다.

flush 메서드는 쿼리의 변화를 주는것이 아니라 DB의 반영시점을 조절하는 메서드이기 떄문에
로그상으로는 많은 변화를 확인해 볼수는 없다.

count 메서드는 long 형식을 반환한다.
insert의 갯수를 반환해준다(데이터의 갯수)
-> 데이터의 갯수는 PK를 기준으로 한다.

existById() : ()안의 값이 있는 지 없는지 출력한다(boolean 타입)
-> ()안의 값은 PK의 값을 넣는다.

delete() : () 안에는 Entity타입이 들어가야 한다.
말 그래로 PK값에 해당하는 데이터를 삭제함

deleteById(): () 안에 PK의 값을 넣어주면 delete와 동일하게 작동한다.

All 메서드는 루프가 많이 돌기 떄문에 많이 사용하지 않는것이 좋다.
-> 느려진다.
-> 이떄에는 InBatch메서드를 사용한다.

InBatch와 All 메서드의 차이점은
All 은 하나하나 모두 검색을 한뒤에 삭제를 한다고 하면
InBatch는 검색을 따로 하지않고 바로 삭제를 한다.

ExampleMatcher, example 등등은 google을 활용해볼것
-> 간략하게 설명하자면 원하는 데이터를 찾고 호출하는 역할
-> 끝이 a로 끝난다 or name이라는 변수의 종류는 무시한다 등등
-> 조건을 걸고 찾을수 있다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글