Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- tomcat
- LiveTemplate
- 톰캣
- spring
- 외장톰캣
- autocomplete
- Spring Framework
- 디자인패턴 #싱글톤
- Mockito #Reflection #Sigleton #Test #JUnit
Archives
- Today
- Total
자라선
28. JPA Connection 본문
스프링 부트 JPA 연동
스프링 부트는 별도의 datasource 설정을 셋팅하지 않는다면 기본으로 H2를 인메모리 로 띄어준다.
설정 셋팅하면 셋팅한 대로 DB 커넥션 따라감
(물론 기본 H2도 의존성이 있어야함)
@Entity 로 vo를 매핑
@Id 식별자 등록
@GeneratedValue 로 auto Increment
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Objects;
@Entity
public class Account {
@Id
@GeneratedValue
private Long id;
private String username;
private String password;
<getter, setter, toString, Equals>
}
매핑한 vo를 사용할 레포지토리 생성하기 위해 인터페이스 정의 후
JpaRepository<엔티티의 타입, 식별자의 타입>으로 상속
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface AccountRepository extends JpaRepository<Account, Long> {
Account findByUsername(String username);
}
사용할 DB를 연동하기 위해 아래와같이 설정
spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/springboot
spring.datasource.username=keesun
spring.datasource.password=pass
테스트 생성
@DataJpaTest 어노테이션은 슬라이스 테스트 중 하나로 Repository에 관련된 모든 bean를 생성 해준다.
그렇기 때문에 datasource, JdbcTemplate, 이전에 등록한 인터페이스등 을 @Autowired 를 사용해 주입받아 테스트 가능
아래의 경우 application.properties 에서 설정한 셋팅을 받지 못하기 떄문에 H2 인메모리 DB로 테스트를 진행하게 됨
반대로 @SpringBootTest 로 통합 테스트를 진행하면 application.properties 를 읽어 설정 셋팅하기 때문에 이전에 설정한 DB를 따라간다.
@SpringBootTest(properties = {spring.datasource.url='jdbc URL'}) 과 같이 별도 셋팅도 가능
@DataJpaTest 는 자동 트랜잭션을 해주며 rollback 해줌
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@DataJpaTest
public class AccountRepositoryTest {
@Autowired
DataSource dataSource;
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
AccountRepository accountRepository;
@Test
public void di() throws SQLException {
Account account = new Account();
account.setUsername("thkong");
account.setPassword("123");
Account newAccount = accountRepository.save(account);
assertThat(newAccount).isNotNull();
Optional<Account> exisitAccount = accountRepository.findByUsername(account.getUsername());
assertThat(exisitAccount).isNotNull();
System.out.println(exisitAccount);
Optional<Account> nonExisitAccount = accountRepository.findByUsername("non");
assertThat(nonExisitAccount).isEmpty();
System.out.println(nonExisitAccount);
try(Connection connection = dataSource.getConnection()){
DatabaseMetaData databaseMetaData = connection.getMetaData();
System.out.println(databaseMetaData.getURL());
System.out.println(databaseMetaData.getDriverName());
System.out.println(databaseMetaData.getUserName());
}
}
}
'Develop > Spring Boot' 카테고리의 다른 글
30. Redis Connection (0) | 2020.07.27 |
---|---|
29. JPA 초기화 (0) | 2020.07.27 |
27. JPA (0) | 2020.07.27 |
26. Mysql, PostgreSql DB Connect (0) | 2020.07.27 |
25. DBCP (0) | 2020.07.27 |
Comments