목차
H2 데이터베이스 설치
H2 데이터베이스 초기 설정
h2.jar File로 접속 | h2접속(localhost:8082) |
|---|
test.mv.DB 생성 확인 | test.db 화면 |
|---|
H2 데이터베이스 사용해보기
![]() | ![]() |
|---|
![]() | ![]() |
|---|
IntelliJ 환경 설정
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
//build.gradle에 라이브러리 추가
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
//resources > application.properties에 추가
JDBC 리포지토리 구현
public class JdbcMemberRepository implements MemberRepository{
//javax.sql.DataSource 사용
private final DataSource dataSource;
public JdbcMemberRepository(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public Member save(Member member) {
String sql = "insert into member(name) values(?)";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = getConnection(); // DB 연결
// sql 전송
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, member.getName()); // sql의 첫번째 '?'에 대입
pstmt.executeUpdate(); // DB에 데이터 전송
rs = pstmt.getGeneratedKeys();
if (rs.next()) {
member.setId(rs.getLong(1));
} else {
throw new SQLException("id 조회 실패");
}
return member;
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
// JdbcMemberRepositiory > Save 기능
@Override
public List<Member> findAll() {
String sql = "select * from member";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = getConnection(); // DB 연결
pstmt = conn.prepareStatement(sql); // sql 전송
rs = pstmt.executeQuery(); // 데이터 받음
List<Member> members = new ArrayList<>();
while (rs.next()) { // 값이 있을 때까지 반복
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
members.add(member);
}
return members;
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs); // 연결 종료
}
}
// JdbcMemberRepository > 조회(findAll) 기능
SpringConfig 설정
@Bean
public MemberRepository memberRepository(){
//return new MemoryMemberRepository();
return new JdbcMemberRepository(dataSource);
}
//SpringConfig.java
돌려보기
![]() | ![]() |
|---|
![]() | ![]() |
|---|
코드 작성
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;
@Test
public void 회원가입() throws Exception {
//Given
Member member = new Member();
member.setName("hello");
//When
Long saveId = memberService.join(member);
//Then
Member findMember = memberRepository.findById(saveId).get();
assertEquals(member.getName(), findMember.getName());
}
@Test
public void 중복_회원_예외() throws Exception {
//Given
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
//When
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class,
() -> memberService.join(member2));//예외가 발생해야 한다.
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
}
// MemberServiceIntegrationTest.java
회원가입 | 테스트 확인 | DB에 커밋 X |
|---|
@Commit 후 실행 | DB에 커밋 O |
|---|