스프링에서는 @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 |