[JPA] Spring JPA - JpaRepository

RuiN·2022년 7월 25일
0
post-thumbnail

JPA Repository

	@NoArgsConstructor
    @AllArgsConstructor
    @Data
    @Entity
    @Builder
    @RequiredArgsConstructor
    @Table(name = "user", indexes = {@Index(columnList = "name")},uniqueConstraints = {@UniqueConstraint(columnNames = {"email"})})
    public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NonNull
    private String name;

    @NonNull
    private String email;

    @Enumerated(value = EnumType.STRING)
    private Gender gender;

    @Column(updatable = false)
    private LocalDateTime createdAt;

    @Column(insertable = false)
    private LocalDateTime updatedAt;

    @Transient
    private String testData;

	} 

위와 같은 User 라는 Entity가 존재한다면

JpaRepository는 다음과 같이 작성한다.

		public interface UserRepository extends JpaReposiotry<User,Long>{}
        
        // JpaRepository <엔티티 이름, 컬럼의 ID 자료형>
        

JPA에서는 많은 메소드를 지원한다.

	User findByEmail(String email);

    User getByEmail(String email);

    User readByEmail(String email);

    User queryByEmail(String email);

    User searchByEmail(String email);

    User streamByEmail(String email);

    User findUserByEmail(String email);

    User findSomethingByEmail(String email);



User FindByEmail(String Email)을 비롯하여 모두 같은 결과가 도출되는 메소드이다.

여기서 생성 또한 가능하다.

		User findTop1ByEmail(String email)
        
        다음과 같은 메소드를 생성하고, Junit 테스트에서나 실제 Service에서 사용이 가능하다.
        
        
  여기서 특히한점은 
  
  >Optional<T> findById(ID id);
  >>findById 의 경우에는 Optional 객체를 가지고 있다.
  그래서 Test  구문이나 실제 메소드 적용시에


	@DisplayName("1. CRUD ")
    @Test
    @Transactional
    void crud() {

        userRepository.save(new User("david","david@fastcampus.com"));

        User user = userRepository.findById(1L).orElseThrow(RuntimeException::new);

        user.setEmail("martin-update@fastcampus.com");

        userRepository.save(user);

    }
  
  >>위와 같이 User user = userRepository.findById(1L)을 사용할 경우 오류가 발생한다.
  RuntimeException을 던져줘야만 메소드의 실행이 가능하다.
profile
어디까지 올라갈지 궁금한 하루

0개의 댓글