반응형
JPA의 기본적인 메서드들을 살펴보자
먼저 테스트하기 위해 entity객체를 하나 만들었다
User
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@Data
@Builder
//위에 까지는 롬복의 어노테이션이다
//@Entity 는 해당 객체가 JPA에서 관리할 엔티티 타입임을 알려준다.
@Entity
public class User {
@Id @GeneratedValue
private Long id;
@NonNull
private String name;
@NonNull
private String email;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
@Id 는 해당 값이 primary key 임을 정의하는 어노테이션이다. Entity 객체는 Id 값을 꼭 갖고 있어야 함으로
@Id가 안 붙어 있으면 오류가 난다 .
@GeneratedValue는 특정 값을 자동으로 올려준다
여러가지 전략을 지정할 수 있는데 기본은 @GeneratedValue(strategy = GenerationType.SEQUENCE) 이고
시퀀스를 만들어 값을 하나씩 올려준다.
JPA는 어플리케이션과 DB 사이에서 작동한다 그렇기 때문에 JPA를 사용하기위해선
실질적으로 DB에 접근하여 값을 가져오는 Repositry객체가 JpaRepository<User,Long> 인터페이스를 상속받아야한다 .
<>안에는 첫번째 값으로 엔티티에 타입 , 두번째로는 엔티티에서 지정한 @id가 붙은 primary key의 타입을 넘겨줘야한다.
(나는 User 엔티티 클래스를 사용할 것이기 때문에 User를 넣어놨다.)
UserRepository
package com.ugo.jpatest.repository;
import com.ugo.jpatest.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User,Long>{
}
테스트를 통해 JpaRepository에 어떤 메소드들이 있는지 알아보자
@SpringBootTest
class UserRepositoryTest {
@Autowired
private UserRepository userRepository;
@BeforeEach
public void insertUser(){
for(int i = 1 ; i <=5 ; i++){
User user = new User((long) i,"ugo"+i,"ugo"+i+".com", LocalDateTime.now(),LocalDateTime.now());
userRepository.save(user);
}
}
@Test
@Transactional
void crud(){
//findAllById에 List 타입으로 아이디를 넣어주면 해당 아이디 값을 갖는 값을 가져온다
// List<Long> longs = Arrays.asList(1L, 2L, 3L);
// List<User> users = userRepository.findAllById(longs);
//
// User user1 = new User("ugo","ugo.com");
// User user2 = new User("ugogo","ugogo.com");
//
//
// //여러개를 save 할때 사용
// userRepository.saveAll(Arrays.asList(user1,user2));
// List<User> users = userRepository.findAll();
// users.forEach(System.out::println);
//getOne 과 findById 차이
//getOne 은 기본적으로 razy fetch(proxy)로 구현되어 있다 .
//User user = userRepository.getOne(1L);
//findById는 리턴값이 Optional로 랩핑되어 있다
//findById는 eagar 패치가 기본이기 때문에 값을 바로가져온다
Optional<User> byId = userRepository.findById(10L);
//Optioanl으로 값이 없을 경우에 대해 처리할 수 있다
//찾는 값이 없을 경우 null을 리턴 시킨다
User user = byId.orElse(null);
System.out.println(user);
}
}
한 테스트에서 여러개 메서드를 사용하려다 보니 주석 처리한 것이 많다 .
일단 @BeforeEach로 샘플 데이터를 넣어놨다
반응형
'JPA > Spring data JPA' 카테고리의 다른 글
SPRING DATA JPA 공부 4 - Query Method 활용 2 ( 정렬과 페이징) (1) | 2021.05.28 |
---|---|
SPRING DATA JPA 공부 3 - QueryMethod 활용 (0) | 2021.05.27 |
SPRING DATA JPA 공부 1 - JPA 란? (0) | 2021.05.27 |
Spring Data JPA 반환타입 (0) | 2020.11.20 |
Spring Data JPA @Query -컬렉션 파라미터 바인딩 (0) | 2020.11.20 |