SpringBoot

JPA 사용

Jungsoomin :) 2020. 11. 8. 00:58

스프링에서는 @EnableJpaRepositories 를 사용해야한다.

스프링 부트에서는 이미 해당 설정이 완료되어 있기에 적용할 필요가 없다.

 


설정 방법

  • @Entity 클래스 생성

@Id 는 식별자를 의미하며 @GenerateValue 는 자동 생성 값을 의미한다.

Entity 객체는 JavaBean 스펙을 따른다.

 

@Entity
public class Account {

    @Id @GeneratedValue
    private Long id;

    private String username;

    private String password;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Account account = (Account) o;
        return Objects.equals(id, account.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  • JpaRepository 를 상속하는 인터페이스 생성

제네릭 타입은 <엔티티, ID> 를 의미한다.

public interface AccountRepository extends JpaRepository<Account,Long> {

    public Optional<Account> findByUsername(String username);

}

스프링 데이터 리파지토리 테스트

H2 DB 를 테스트 의존성에 추가

@DataJpaTest : 리파지토리와 관련 된 Bean 객체 만을 가지고 테스트 실행


@DataJpaTest 는 반드시 인메모리 데이터 베이스가 필요하다.

  • 사용시 Datasource, jdbcTemplate, Repository 등 주입가능
<dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>test</scope>
</dependency>

실행시에는 jdbc 구현체 의존과 설정이 필요하다.

test 시에는 인메모리 데이터베이스를 사용하는게 더빠르다.

  • 기존 DB를 건들지 않기위해 인메모리 데이터베이스를 쓴다.
@RunWith(SpringRunner.class)
@DataJpaTest
public class AccountRepositoryTest {

    @Autowired
    DataSource dataSource;

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Autowired
    AccountRepository accountRepository;

    @Test
    public void di(){
    Account account = new Account();
    account.setPassword("soomin");
    account.setPassword("pass");

        Account save = accountRepository.save(account);
        assertThat(save).isNotNull();

        Optional<Account> byUsername = accountRepository.findByUsername(save.getUsername());
        assertThat(byUsername.get()).isNotNull();

        Optional<Account> byUsernameNotExists = accountRepository.findByUsername("none");
        assertThat(byUsernameNotExists).isEmpty();
    }
}

'SpringBoot' 카테고리의 다른 글

데이터베이스마이그레이션  (0) 2020.11.08
JPA 사용시 데이터베이스 스키마 초기화 및 데이터 사용 방법  (0) 2020.11.08
Spring Data JPA 개요  (0) 2020.11.08
MySQL,PostgreSQL  (0) 2020.11.07
CORS  (0) 2020.11.07